aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.drone.yml186
-rw-r--r--.gitignore1
m---------3rdparty0
-rw-r--r--CHANGELOG.md2
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--apps/admin_audit/appinfo/info.xml8
-rw-r--r--apps/comments/appinfo/info.xml4
-rw-r--r--apps/comments/js/commentmodel.js36
-rw-r--r--apps/comments/js/commentsummarymodel.js11
-rw-r--r--apps/comments/js/filesplugin.js11
-rw-r--r--apps/comments/l10n/ca.js38
-rw-r--r--apps/comments/l10n/ca.json38
-rw-r--r--apps/comments/l10n/cs_CZ.js8
-rw-r--r--apps/comments/l10n/cs_CZ.json8
-rw-r--r--apps/comments/l10n/de_DE.js10
-rw-r--r--apps/comments/l10n/de_DE.json10
-rw-r--r--apps/comments/l10n/fr.js2
-rw-r--r--apps/comments/l10n/fr.json2
-rw-r--r--apps/comments/l10n/lv.js17
-rw-r--r--apps/comments/l10n/lv.json17
-rw-r--r--apps/comments/l10n/nb_NO.js8
-rw-r--r--apps/comments/l10n/nb_NO.json8
-rw-r--r--apps/comments/l10n/pl.js8
-rw-r--r--apps/comments/l10n/pl.json8
-rw-r--r--apps/comments/l10n/ru.js10
-rw-r--r--apps/comments/l10n/ru.json10
-rw-r--r--apps/comments/l10n/sk_SK.js28
-rw-r--r--apps/comments/l10n/sk_SK.json28
-rw-r--r--apps/comments/l10n/sq.js11
-rw-r--r--apps/comments/l10n/sq.json11
-rw-r--r--apps/comments/l10n/sv.js36
-rw-r--r--apps/comments/l10n/sv.json36
-rw-r--r--apps/comments/l10n/zh_CN.js34
-rw-r--r--apps/comments/l10n/zh_CN.json34
-rw-r--r--apps/comments/lib/Activity/Provider.php2
-rw-r--r--apps/comments/lib/Notification/Listener.php15
-rw-r--r--apps/comments/lib/Notification/Notifier.php6
-rw-r--r--apps/comments/tests/Unit/Notification/ListenerTest.php8
-rw-r--r--apps/dav/appinfo/info.xml5
-rw-r--r--apps/dav/appinfo/v1/caldav.php3
-rw-r--r--apps/dav/appinfo/v1/carddav.php1
-rw-r--r--apps/dav/appinfo/v1/webdav.php1
-rw-r--r--apps/dav/appinfo/v2/remote.php1
-rw-r--r--apps/dav/l10n/bg_BG.js49
-rw-r--r--apps/dav/l10n/bg_BG.json47
-rw-r--r--apps/dav/l10n/cs_CZ.js70
-rw-r--r--apps/dav/l10n/cs_CZ.json70
-rw-r--r--apps/dav/l10n/de.js28
-rw-r--r--apps/dav/l10n/de.json28
-rw-r--r--apps/dav/l10n/de_DE.js24
-rw-r--r--apps/dav/l10n/de_DE.json24
-rw-r--r--apps/dav/l10n/nb_NO.js38
-rw-r--r--apps/dav/l10n/nb_NO.json38
-rw-r--r--apps/dav/l10n/ru.js40
-rw-r--r--apps/dav/l10n/ru.json40
-rw-r--r--apps/dav/l10n/sq.js40
-rw-r--r--apps/dav/l10n/sq.json38
-rw-r--r--apps/dav/l10n/sv.js44
-rw-r--r--apps/dav/l10n/sv.json44
-rw-r--r--apps/dav/lib/CalDAV/Activity/Backend.php4
-rw-r--r--apps/dav/lib/CalDAV/Activity/Setting/Todo.php2
-rw-r--r--apps/dav/lib/CalDAV/BirthdayService.php45
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php32
-rw-r--r--apps/dav/lib/CalDAV/CalendarObject.php8
-rw-r--r--apps/dav/lib/Connector/LegacyDAVACL.php19
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesPlugin.php9
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesReportPlugin.php12
-rw-r--r--apps/dav/lib/Connector/Sabre/TagsPlugin.php6
-rw-r--r--apps/dav/lib/Files/RootCollection.php1
-rw-r--r--apps/dav/lib/Migration/ValueFix.php71
-rw-r--r--apps/dav/lib/Migration/ValueFixInsert.php63
-rw-r--r--apps/dav/lib/Server.php40
-rw-r--r--apps/dav/lib/SystemTag/SystemTagNode.php7
-rw-r--r--apps/dav/tests/travis/caldav/script-new-endpoint.sh (renamed from apps/dav/tests/travis/caldav/script.sh)3
-rw-r--r--apps/dav/tests/travis/caldav/script-old-endpoint.sh23
-rw-r--r--apps/dav/tests/travis/caldavtest/serverinfo-new-endpoint.xml (renamed from apps/dav/tests/travis/caldavtest/serverinfo.xml)0
-rw-r--r--apps/dav/tests/travis/caldavtest/serverinfo-old-caldav-endpoint.xml850
-rw-r--r--apps/dav/tests/travis/caldavtest/serverinfo-old-carddav-endpoint.xml850
-rw-r--r--apps/dav/tests/travis/carddav/script-new-endpoint.sh25
-rw-r--r--apps/dav/tests/travis/carddav/script-old-endpoint.sh22
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarTest.php8
-rw-r--r--apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php29
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php2
-rw-r--r--apps/dav/tests/unit/Migration/ValueFixInsertTest.php117
-rw-r--r--apps/dav/tests/unit/Migration/ValueFixTest.php200
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php42
-rw-r--r--apps/encryption/appinfo/info.xml5
-rw-r--r--apps/encryption/css/settings-personal.css5
-rw-r--r--apps/encryption/l10n/cs_CZ.js8
-rw-r--r--apps/encryption/l10n/cs_CZ.json8
-rw-r--r--apps/encryption/l10n/de.js8
-rw-r--r--apps/encryption/l10n/de.json8
-rw-r--r--apps/encryption/l10n/de_DE.js10
-rw-r--r--apps/encryption/l10n/de_DE.json10
-rw-r--r--apps/encryption/l10n/el.js8
-rw-r--r--apps/encryption/l10n/el.json8
-rw-r--r--apps/encryption/l10n/es.js8
-rw-r--r--apps/encryption/l10n/es.json8
-rw-r--r--apps/encryption/l10n/fr.js10
-rw-r--r--apps/encryption/l10n/fr.json10
-rw-r--r--apps/encryption/l10n/hu_HU.js8
-rw-r--r--apps/encryption/l10n/hu_HU.json8
-rw-r--r--apps/encryption/l10n/id.js9
-rw-r--r--apps/encryption/l10n/id.json9
-rw-r--r--apps/encryption/l10n/it.js8
-rw-r--r--apps/encryption/l10n/it.json8
-rw-r--r--apps/encryption/l10n/ja.js8
-rw-r--r--apps/encryption/l10n/ja.json8
-rw-r--r--apps/encryption/l10n/ko.js7
-rw-r--r--apps/encryption/l10n/ko.json7
-rw-r--r--apps/encryption/l10n/lt_LT.js30
-rw-r--r--apps/encryption/l10n/lt_LT.json30
-rw-r--r--apps/encryption/l10n/nb_NO.js8
-rw-r--r--apps/encryption/l10n/nb_NO.json8
-rw-r--r--apps/encryption/l10n/nl.js8
-rw-r--r--apps/encryption/l10n/nl.json8
-rw-r--r--apps/encryption/l10n/pl.js8
-rw-r--r--apps/encryption/l10n/pl.json8
-rw-r--r--apps/encryption/l10n/pt_BR.js8
-rw-r--r--apps/encryption/l10n/pt_BR.json8
-rw-r--r--apps/encryption/l10n/ru.js12
-rw-r--r--apps/encryption/l10n/ru.json12
-rw-r--r--apps/encryption/l10n/sk_SK.js9
-rw-r--r--apps/encryption/l10n/sk_SK.json9
-rw-r--r--apps/encryption/l10n/sq.js5
-rw-r--r--apps/encryption/l10n/sq.json5
-rw-r--r--apps/encryption/l10n/sv.js23
-rw-r--r--apps/encryption/l10n/sv.json23
-rw-r--r--apps/encryption/l10n/zh_CN.js30
-rw-r--r--apps/encryption/l10n/zh_CN.json30
-rw-r--r--apps/encryption/lib/Hooks/UserHooks.php61
-rw-r--r--apps/encryption/lib/KeyManager.php8
-rw-r--r--apps/encryption/tests/Hooks/UserHooksTest.php47
-rw-r--r--apps/encryption/tests/KeyManagerTest.php6
-rw-r--r--apps/federatedfilesharing/appinfo/info.xml4
-rw-r--r--apps/federatedfilesharing/l10n/cs_CZ.js2
-rw-r--r--apps/federatedfilesharing/l10n/cs_CZ.json2
-rw-r--r--apps/federatedfilesharing/l10n/de.js2
-rw-r--r--apps/federatedfilesharing/l10n/de.json2
-rw-r--r--apps/federatedfilesharing/l10n/de_DE.js4
-rw-r--r--apps/federatedfilesharing/l10n/de_DE.json4
-rw-r--r--apps/federatedfilesharing/l10n/es.js2
-rw-r--r--apps/federatedfilesharing/l10n/es.json2
-rw-r--r--apps/federatedfilesharing/l10n/fr.js4
-rw-r--r--apps/federatedfilesharing/l10n/fr.json4
-rw-r--r--apps/federatedfilesharing/l10n/hu_HU.js2
-rw-r--r--apps/federatedfilesharing/l10n/hu_HU.json2
-rw-r--r--apps/federatedfilesharing/l10n/id.js7
-rw-r--r--apps/federatedfilesharing/l10n/id.json7
-rw-r--r--apps/federatedfilesharing/l10n/it.js2
-rw-r--r--apps/federatedfilesharing/l10n/it.json2
-rw-r--r--apps/federatedfilesharing/l10n/nl.js2
-rw-r--r--apps/federatedfilesharing/l10n/nl.json2
-rw-r--r--apps/federatedfilesharing/l10n/pl.js1
-rw-r--r--apps/federatedfilesharing/l10n/pl.json1
-rw-r--r--apps/federatedfilesharing/l10n/pt_BR.js2
-rw-r--r--apps/federatedfilesharing/l10n/pt_BR.json2
-rw-r--r--apps/federatedfilesharing/l10n/ru.js35
-rw-r--r--apps/federatedfilesharing/l10n/ru.json35
-rw-r--r--apps/federatedfilesharing/l10n/sq.js26
-rw-r--r--apps/federatedfilesharing/l10n/sq.json26
-rw-r--r--apps/federatedfilesharing/l10n/sv.js48
-rw-r--r--apps/federatedfilesharing/l10n/sv.json48
-rw-r--r--apps/federatedfilesharing/l10n/zh_CN.js28
-rw-r--r--apps/federatedfilesharing/l10n/zh_CN.json28
-rw-r--r--apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php46
-rw-r--r--apps/federatedfilesharing/templates/settings-admin.php2
-rw-r--r--apps/federation/appinfo/info.xml4
-rw-r--r--apps/federation/l10n/ca.js16
-rw-r--r--apps/federation/l10n/ca.json16
-rw-r--r--apps/federation/l10n/cs_CZ.js9
-rw-r--r--apps/federation/l10n/cs_CZ.json9
-rw-r--r--apps/federation/l10n/de.js14
-rw-r--r--apps/federation/l10n/de.json14
-rw-r--r--apps/federation/l10n/de_DE.js12
-rw-r--r--apps/federation/l10n/de_DE.json12
-rw-r--r--apps/federation/l10n/el.js12
-rw-r--r--apps/federation/l10n/el.json12
-rw-r--r--apps/federation/l10n/es.js6
-rw-r--r--apps/federation/l10n/es.json6
-rw-r--r--apps/federation/l10n/fr.js6
-rw-r--r--apps/federation/l10n/fr.json6
-rw-r--r--apps/federation/l10n/hu_HU.js6
-rw-r--r--apps/federation/l10n/hu_HU.json6
-rw-r--r--apps/federation/l10n/id.js10
-rw-r--r--apps/federation/l10n/id.json10
-rw-r--r--apps/federation/l10n/it.js6
-rw-r--r--apps/federation/l10n/it.json6
-rw-r--r--apps/federation/l10n/ja.js6
-rw-r--r--apps/federation/l10n/ja.json6
-rw-r--r--apps/federation/l10n/lv.js19
-rw-r--r--apps/federation/l10n/lv.json17
-rw-r--r--apps/federation/l10n/nl.js6
-rw-r--r--apps/federation/l10n/nl.json6
-rw-r--r--apps/federation/l10n/pl.js6
-rw-r--r--apps/federation/l10n/pl.json6
-rw-r--r--apps/federation/l10n/pt_BR.js6
-rw-r--r--apps/federation/l10n/pt_BR.json6
-rw-r--r--apps/federation/l10n/ru.js18
-rw-r--r--apps/federation/l10n/ru.json18
-rw-r--r--apps/federation/l10n/sl.js9
-rw-r--r--apps/federation/l10n/sl.json9
-rw-r--r--apps/federation/l10n/sq.js22
-rw-r--r--apps/federation/l10n/sq.json22
-rw-r--r--apps/federation/l10n/sv.js16
-rw-r--r--apps/federation/l10n/sv.json16
-rw-r--r--apps/federation/l10n/zh_CN.js16
-rw-r--r--apps/federation/l10n/zh_CN.json16
-rw-r--r--apps/federation/lib/DAV/FedAuth.php8
-rw-r--r--apps/files/appinfo/app.php14
-rw-r--r--apps/files/appinfo/info.xml11
-rw-r--r--apps/files/css/detailsView.css18
-rw-r--r--apps/files/css/files.css41
-rw-r--r--apps/files/css/mobile.css7
-rw-r--r--apps/files/img/app.svg6
-rw-r--r--apps/files/js/file-upload.js84
-rw-r--r--apps/files/js/fileinfomodel.js47
-rw-r--r--apps/files/js/filelist.js29
-rw-r--r--apps/files/js/mainfileinfodetailview.js20
-rw-r--r--apps/files/js/newfilemenu.js10
-rw-r--r--apps/files/js/tagsplugin.js17
-rw-r--r--apps/files/l10n/ast.js18
-rw-r--r--apps/files/l10n/ast.json18
-rw-r--r--apps/files/l10n/bg_BG.js44
-rw-r--r--apps/files/l10n/bg_BG.json44
-rw-r--r--apps/files/l10n/cs_CZ.js49
-rw-r--r--apps/files/l10n/cs_CZ.json49
-rw-r--r--apps/files/l10n/de.js31
-rw-r--r--apps/files/l10n/de.json31
-rw-r--r--apps/files/l10n/de_DE.js43
-rw-r--r--apps/files/l10n/de_DE.json43
-rw-r--r--apps/files/l10n/el.js52
-rw-r--r--apps/files/l10n/el.json52
-rw-r--r--apps/files/l10n/en_GB.js20
-rw-r--r--apps/files/l10n/en_GB.json20
-rw-r--r--apps/files/l10n/es.js30
-rw-r--r--apps/files/l10n/es.json30
-rw-r--r--apps/files/l10n/fi_FI.js24
-rw-r--r--apps/files/l10n/fi_FI.json24
-rw-r--r--apps/files/l10n/fr.js69
-rw-r--r--apps/files/l10n/fr.json69
-rw-r--r--apps/files/l10n/he.js18
-rw-r--r--apps/files/l10n/he.json18
-rw-r--r--apps/files/l10n/hu_HU.js25
-rw-r--r--apps/files/l10n/hu_HU.json25
-rw-r--r--apps/files/l10n/id.js24
-rw-r--r--apps/files/l10n/id.json24
-rw-r--r--apps/files/l10n/is.js24
-rw-r--r--apps/files/l10n/is.json24
-rw-r--r--apps/files/l10n/it.js25
-rw-r--r--apps/files/l10n/it.json25
-rw-r--r--apps/files/l10n/ja.js30
-rw-r--r--apps/files/l10n/ja.json30
-rw-r--r--apps/files/l10n/ko.js87
-rw-r--r--apps/files/l10n/ko.json87
-rw-r--r--apps/files/l10n/lv.js66
-rw-r--r--apps/files/l10n/lv.json66
-rw-r--r--apps/files/l10n/nb_NO.js54
-rw-r--r--apps/files/l10n/nb_NO.json54
-rw-r--r--apps/files/l10n/nl.js25
-rw-r--r--apps/files/l10n/nl.json25
-rw-r--r--apps/files/l10n/pl.js52
-rw-r--r--apps/files/l10n/pl.json52
-rw-r--r--apps/files/l10n/pt_BR.js25
-rw-r--r--apps/files/l10n/pt_BR.json25
-rw-r--r--apps/files/l10n/ru.js56
-rw-r--r--apps/files/l10n/ru.json56
-rw-r--r--apps/files/l10n/sk_SK.js146
-rw-r--r--apps/files/l10n/sk_SK.json146
-rw-r--r--apps/files/l10n/sl.js26
-rw-r--r--apps/files/l10n/sl.json26
-rw-r--r--apps/files/l10n/sq.js78
-rw-r--r--apps/files/l10n/sq.json78
-rw-r--r--apps/files/l10n/sv.js47
-rw-r--r--apps/files/l10n/sv.json47
-rw-r--r--apps/files/l10n/tr.js43
-rw-r--r--apps/files/l10n/tr.json43
-rw-r--r--apps/files/l10n/zh_CN.js166
-rw-r--r--apps/files/l10n/zh_CN.json166
-rw-r--r--apps/files/l10n/zh_TW.js24
-rw-r--r--apps/files/l10n/zh_TW.json24
-rw-r--r--apps/files/lib/Activity/FavoriteProvider.php5
-rw-r--r--apps/files/lib/Activity/Provider.php5
-rw-r--r--apps/files/tests/js/mainfileinfodetailviewSpec.js20
-rw-r--r--apps/files_external/3rdparty/autoload.php2
-rw-r--r--apps/files_external/3rdparty/composer.json4
-rw-r--r--apps/files_external/3rdparty/composer.lock28
-rw-r--r--apps/files_external/3rdparty/composer/ClassLoader.php48
-rw-r--r--apps/files_external/3rdparty/composer/autoload_classmap.php27
-rw-r--r--apps/files_external/3rdparty/composer/autoload_real.php13
-rw-r--r--apps/files_external/3rdparty/composer/autoload_static.php127
-rw-r--r--apps/files_external/3rdparty/composer/installed.json29
-rw-r--r--apps/files_external/3rdparty/icewind/smb/README.md18
-rw-r--r--apps/files_external/3rdparty/icewind/smb/composer.json3
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Change.php40
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Connection.php40
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php11
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php30
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php46
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/IShare.php16
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/NativeFileInfo.php4
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/NativeShare.php26
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/NativeState.php70
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php88
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Parser.php141
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/RawConnection.php2
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Server.php29
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Share.php86
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/System.php12
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php2
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php2
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/Path.php12
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php25
-rw-r--r--apps/files_external/3rdparty/icewind/streams/src/Wrapper.php2
-rw-r--r--apps/files_external/appinfo/info.xml11
-rw-r--r--apps/files_external/img/app-dark.svg1
-rw-r--r--apps/files_external/js/statusmanager.js6
-rw-r--r--apps/files_external/l10n/cs_CZ.js10
-rw-r--r--apps/files_external/l10n/cs_CZ.json10
-rw-r--r--apps/files_external/l10n/da.js8
-rw-r--r--apps/files_external/l10n/da.json8
-rw-r--r--apps/files_external/l10n/de.js10
-rw-r--r--apps/files_external/l10n/de.json10
-rw-r--r--apps/files_external/l10n/de_DE.js14
-rw-r--r--apps/files_external/l10n/de_DE.json14
-rw-r--r--apps/files_external/l10n/el.js8
-rw-r--r--apps/files_external/l10n/el.json8
-rw-r--r--apps/files_external/l10n/en_GB.js9
-rw-r--r--apps/files_external/l10n/en_GB.json9
-rw-r--r--apps/files_external/l10n/es.js12
-rw-r--r--apps/files_external/l10n/es.json12
-rw-r--r--apps/files_external/l10n/fi_FI.js9
-rw-r--r--apps/files_external/l10n/fi_FI.json9
-rw-r--r--apps/files_external/l10n/fr.js10
-rw-r--r--apps/files_external/l10n/fr.json10
-rw-r--r--apps/files_external/l10n/he.js8
-rw-r--r--apps/files_external/l10n/he.json8
-rw-r--r--apps/files_external/l10n/hu_HU.js11
-rw-r--r--apps/files_external/l10n/hu_HU.json11
-rw-r--r--apps/files_external/l10n/id.js17
-rw-r--r--apps/files_external/l10n/id.json17
-rw-r--r--apps/files_external/l10n/is.js11
-rw-r--r--apps/files_external/l10n/is.json11
-rw-r--r--apps/files_external/l10n/it.js10
-rw-r--r--apps/files_external/l10n/it.json10
-rw-r--r--apps/files_external/l10n/ja.js10
-rw-r--r--apps/files_external/l10n/ja.json10
-rw-r--r--apps/files_external/l10n/ko.js10
-rw-r--r--apps/files_external/l10n/ko.json10
-rw-r--r--apps/files_external/l10n/nb_NO.js11
-rw-r--r--apps/files_external/l10n/nb_NO.json11
-rw-r--r--apps/files_external/l10n/nl.js10
-rw-r--r--apps/files_external/l10n/nl.json10
-rw-r--r--apps/files_external/l10n/pl.js14
-rw-r--r--apps/files_external/l10n/pl.json14
-rw-r--r--apps/files_external/l10n/pt_BR.js10
-rw-r--r--apps/files_external/l10n/pt_BR.json10
-rw-r--r--apps/files_external/l10n/pt_PT.js8
-rw-r--r--apps/files_external/l10n/pt_PT.json8
-rw-r--r--apps/files_external/l10n/ru.js10
-rw-r--r--apps/files_external/l10n/ru.json10
-rw-r--r--apps/files_external/l10n/sl.js9
-rw-r--r--apps/files_external/l10n/sl.json9
-rw-r--r--apps/files_external/l10n/sq.js20
-rw-r--r--apps/files_external/l10n/sq.json20
-rw-r--r--apps/files_external/l10n/sv.js57
-rw-r--r--apps/files_external/l10n/sv.json57
-rw-r--r--apps/files_external/l10n/th_TH.js8
-rw-r--r--apps/files_external/l10n/th_TH.json8
-rw-r--r--apps/files_external/l10n/tr.js9
-rw-r--r--apps/files_external/l10n/tr.json9
-rw-r--r--apps/files_external/l10n/zh_CN.js81
-rw-r--r--apps/files_external/l10n/zh_CN.json81
-rw-r--r--apps/files_external/l10n/zh_TW.js8
-rw-r--r--apps/files_external/l10n/zh_TW.json8
-rw-r--r--apps/files_external/lib/Command/Notify.php57
-rw-r--r--apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php60
-rw-r--r--apps/files_external/lib/Lib/Notify/SMBNotifyHandler.php150
-rw-r--r--apps/files_external/lib/Lib/Storage/AmazonS3.php16
-rw-r--r--apps/files_external/lib/Lib/Storage/Dropbox.php28
-rw-r--r--apps/files_external/lib/Lib/Storage/FTP.php16
-rw-r--r--apps/files_external/lib/Lib/Storage/Google.php144
-rw-r--r--apps/files_external/lib/Lib/Storage/SFTP.php2
-rw-r--r--apps/files_external/lib/Lib/Storage/SMB.php95
-rw-r--r--apps/files_external/lib/Lib/Storage/Swift.php16
-rw-r--r--apps/files_external/lib/Settings/Section.php21
-rw-r--r--apps/files_external/tests/AmazonS3MigrationTest.php146
-rw-r--r--apps/files_external/tests/Command/ListCommandTest.php24
-rw-r--r--apps/files_external/tests/Settings/AdminTest.php20
-rw-r--r--apps/files_external/tests/Settings/SectionTest.php5
-rw-r--r--apps/files_external/tests/Storage/SmbTest.php47
-rwxr-xr-xapps/files_external/tests/env/start-smb-linux.sh42
-rwxr-xr-xapps/files_external/tests/env/start-smb-silvershell.sh67
-rwxr-xr-xapps/files_external/tests/env/start-webdav-apachedrone.sh26
-rwxr-xr-xapps/files_external/tests/env/stop-smb-linux.sh21
-rwxr-xr-xapps/files_external/tests/env/stop-smb-silvershell.sh37
-rwxr-xr-xapps/files_external/tests/env/stop-webdav-apachedrone.sh14
-rw-r--r--apps/files_sharing/appinfo/info.xml8
-rw-r--r--apps/files_sharing/css/authenticate.css8
-rw-r--r--apps/files_sharing/css/public.css64
-rw-r--r--apps/files_sharing/css/sharetabview.css16
-rw-r--r--apps/files_sharing/js/public.js2
-rw-r--r--apps/files_sharing/js/share.js28
-rw-r--r--apps/files_sharing/l10n/cs_CZ.js184
-rw-r--r--apps/files_sharing/l10n/cs_CZ.json184
-rw-r--r--apps/files_sharing/l10n/de.js38
-rw-r--r--apps/files_sharing/l10n/de.json38
-rw-r--r--apps/files_sharing/l10n/de_DE.js52
-rw-r--r--apps/files_sharing/l10n/de_DE.json52
-rw-r--r--apps/files_sharing/l10n/es.js32
-rw-r--r--apps/files_sharing/l10n/es.json32
-rw-r--r--apps/files_sharing/l10n/fr.js36
-rw-r--r--apps/files_sharing/l10n/fr.json36
-rw-r--r--apps/files_sharing/l10n/hu_HU.js32
-rw-r--r--apps/files_sharing/l10n/hu_HU.json32
-rw-r--r--apps/files_sharing/l10n/it.js32
-rw-r--r--apps/files_sharing/l10n/it.json32
-rw-r--r--apps/files_sharing/l10n/nb_NO.js180
-rw-r--r--apps/files_sharing/l10n/nb_NO.json180
-rw-r--r--apps/files_sharing/l10n/nl.js32
-rw-r--r--apps/files_sharing/l10n/nl.json32
-rw-r--r--apps/files_sharing/l10n/pl.js161
-rw-r--r--apps/files_sharing/l10n/pl.json161
-rw-r--r--apps/files_sharing/l10n/pt_BR.js32
-rw-r--r--apps/files_sharing/l10n/pt_BR.json32
-rw-r--r--apps/files_sharing/l10n/ru.js187
-rw-r--r--apps/files_sharing/l10n/ru.json187
-rw-r--r--apps/files_sharing/l10n/sq.js132
-rw-r--r--apps/files_sharing/l10n/sq.json132
-rw-r--r--apps/files_sharing/l10n/sv.js200
-rw-r--r--apps/files_sharing/l10n/sv.json200
-rw-r--r--apps/files_sharing/l10n/zh_CN.js96
-rw-r--r--apps/files_sharing/l10n/zh_CN.json96
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Downloads.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Groups.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/PublicLinks.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Users.php2
-rw-r--r--apps/files_sharing/lib/AppInfo/Application.php4
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php4
-rw-r--r--apps/files_sharing/lib/Controller/ShareController.php8
-rw-r--r--apps/files_sharing/lib/Controller/ShareesAPIController.php30
-rw-r--r--apps/files_sharing/lib/Helper.php1
-rw-r--r--apps/files_sharing/lib/Maintainer.php47
-rw-r--r--apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php30
-rw-r--r--apps/files_sharing/lib/MountProvider.php2
-rw-r--r--apps/files_sharing/lib/Scanner.php9
-rw-r--r--apps/files_sharing/lib/SharedMount.php40
-rw-r--r--apps/files_sharing/lib/SharedStorage.php3
-rw-r--r--apps/files_sharing/templates/public.php59
-rw-r--r--apps/files_sharing/tests/Controller/ShareAPIControllerTest.php56
-rw-r--r--apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php42
-rw-r--r--apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php34
-rw-r--r--apps/files_sharing/tests/SharedStorageTest.php28
-rw-r--r--apps/files_trashbin/appinfo/info.xml4
-rw-r--r--apps/files_trashbin/l10n/ca.js6
-rw-r--r--apps/files_trashbin/l10n/ca.json6
-rw-r--r--apps/files_trashbin/l10n/eo.js1
-rw-r--r--apps/files_trashbin/l10n/eo.json1
-rw-r--r--apps/files_trashbin/l10n/sv.js2
-rw-r--r--apps/files_trashbin/l10n/sv.json2
-rw-r--r--apps/files_trashbin/l10n/zh_CN.js6
-rw-r--r--apps/files_trashbin/l10n/zh_CN.json6
-rw-r--r--apps/files_trashbin/lib/Storage.php83
-rw-r--r--apps/files_trashbin/lib/Trashbin.php20
-rw-r--r--apps/files_versions/appinfo/info.xml4
-rw-r--r--apps/files_versions/l10n/ca.js2
-rw-r--r--apps/files_versions/l10n/ca.json2
-rw-r--r--apps/files_versions/l10n/cs_CZ.js1
-rw-r--r--apps/files_versions/l10n/cs_CZ.json1
-rw-r--r--apps/files_versions/l10n/de_DE.js2
-rw-r--r--apps/files_versions/l10n/de_DE.json2
-rw-r--r--apps/files_versions/l10n/el.js2
-rw-r--r--apps/files_versions/l10n/el.json2
-rw-r--r--apps/files_versions/l10n/eo.js1
-rw-r--r--apps/files_versions/l10n/eo.json1
-rw-r--r--apps/files_versions/l10n/fr.js2
-rw-r--r--apps/files_versions/l10n/fr.json2
-rw-r--r--apps/files_versions/l10n/id.js2
-rw-r--r--apps/files_versions/l10n/id.json2
-rw-r--r--apps/files_versions/l10n/ja.js1
-rw-r--r--apps/files_versions/l10n/ja.json1
-rw-r--r--apps/files_versions/l10n/lv.js2
-rw-r--r--apps/files_versions/l10n/lv.json2
-rw-r--r--apps/files_versions/l10n/nb_NO.js2
-rw-r--r--apps/files_versions/l10n/nb_NO.json2
-rw-r--r--apps/files_versions/l10n/pl.js2
-rw-r--r--apps/files_versions/l10n/pl.json2
-rw-r--r--apps/files_versions/l10n/ru.js1
-rw-r--r--apps/files_versions/l10n/ru.json1
-rw-r--r--apps/files_versions/l10n/sk_SK.js2
-rw-r--r--apps/files_versions/l10n/sk_SK.json2
-rw-r--r--apps/files_versions/l10n/sl.js2
-rw-r--r--apps/files_versions/l10n/sl.json2
-rw-r--r--apps/files_versions/l10n/sq.js2
-rw-r--r--apps/files_versions/l10n/sq.json2
-rw-r--r--apps/files_versions/l10n/sv.js4
-rw-r--r--apps/files_versions/l10n/sv.json4
-rw-r--r--apps/files_versions/l10n/zh_CN.js2
-rw-r--r--apps/files_versions/l10n/zh_CN.json2
-rw-r--r--apps/lookup_server_connector/appinfo/info.xml2
-rw-r--r--apps/provisioning_api/appinfo/info.xml4
-rw-r--r--apps/provisioning_api/appinfo/routes.php1
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php105
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php404
-rw-r--r--apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php122
-rw-r--r--apps/sharebymail/appinfo/info.xml4
-rw-r--r--apps/sharebymail/lib/Activity.php2
-rw-r--r--apps/sharebymail/lib/ShareByMailProvider.php19
-rw-r--r--apps/systemtags/appinfo/info.xml4
-rw-r--r--apps/systemtags/l10n/bg_BG.js55
-rw-r--r--apps/systemtags/l10n/bg_BG.json55
-rw-r--r--apps/systemtags/l10n/cs_CZ.js40
-rw-r--r--apps/systemtags/l10n/cs_CZ.json40
-rw-r--r--apps/systemtags/l10n/de.js5
-rw-r--r--apps/systemtags/l10n/de.json5
-rw-r--r--apps/systemtags/l10n/de_DE.js5
-rw-r--r--apps/systemtags/l10n/de_DE.json5
-rw-r--r--apps/systemtags/l10n/es.js9
-rw-r--r--apps/systemtags/l10n/es.json9
-rw-r--r--apps/systemtags/l10n/fr.js3
-rw-r--r--apps/systemtags/l10n/fr.json3
-rw-r--r--apps/systemtags/l10n/hu_HU.js3
-rw-r--r--apps/systemtags/l10n/hu_HU.json3
-rw-r--r--apps/systemtags/l10n/it.js3
-rw-r--r--apps/systemtags/l10n/it.json3
-rw-r--r--apps/systemtags/l10n/nb_NO.js49
-rw-r--r--apps/systemtags/l10n/nb_NO.json49
-rw-r--r--apps/systemtags/l10n/nl.js3
-rw-r--r--apps/systemtags/l10n/nl.json3
-rw-r--r--apps/systemtags/l10n/pt_BR.js3
-rw-r--r--apps/systemtags/l10n/pt_BR.json3
-rw-r--r--apps/systemtags/l10n/ru.js39
-rw-r--r--apps/systemtags/l10n/ru.json39
-rw-r--r--apps/systemtags/l10n/sq.js43
-rw-r--r--apps/systemtags/l10n/sq.json43
-rw-r--r--apps/systemtags/l10n/sv.js61
-rw-r--r--apps/systemtags/l10n/sv.json61
-rw-r--r--apps/testing/appinfo/app.php23
-rw-r--r--apps/testing/appinfo/info.xml7
-rw-r--r--apps/testing/lib/AlternativeHomeUserBackend.php56
-rw-r--r--apps/testing/lib/Application.php42
-rw-r--r--apps/theming/appinfo/info.xml4
-rw-r--r--apps/theming/img/app-dark.svg1
-rw-r--r--apps/theming/lib/Controller/ThemingController.php4
-rw-r--r--apps/theming/lib/Settings/Section.php21
-rw-r--r--apps/theming/lib/Util.php2
-rw-r--r--apps/theming/templates/settings-admin.php2
-rw-r--r--apps/theming/tests/Controller/ThemingControllerTest.php11
-rw-r--r--apps/theming/tests/Settings/SectionTest.php18
-rw-r--r--apps/twofactor_backupcodes/appinfo/app.php3
-rw-r--r--apps/twofactor_backupcodes/appinfo/info.xml17
-rw-r--r--apps/twofactor_backupcodes/appinfo/routes.php2
-rw-r--r--apps/twofactor_backupcodes/l10n/cs_CZ.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/cs_CZ.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/de.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/de.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/de_DE.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/de_DE.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/es.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/es.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/fr.js6
-rw-r--r--apps/twofactor_backupcodes/l10n/fr.json6
-rw-r--r--apps/twofactor_backupcodes/l10n/hu_HU.js1
-rw-r--r--apps/twofactor_backupcodes/l10n/hu_HU.json1
-rw-r--r--apps/twofactor_backupcodes/l10n/it.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/it.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/ko.js10
-rw-r--r--apps/twofactor_backupcodes/l10n/ko.json10
-rw-r--r--apps/twofactor_backupcodes/l10n/lv.js20
-rw-r--r--apps/twofactor_backupcodes/l10n/lv.json18
-rw-r--r--apps/twofactor_backupcodes/l10n/nb_NO.js28
-rw-r--r--apps/twofactor_backupcodes/l10n/nb_NO.json28
-rw-r--r--apps/twofactor_backupcodes/l10n/nl.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/nl.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/pl.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/pl.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/pt_BR.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/pt_BR.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/ru.js16
-rw-r--r--apps/twofactor_backupcodes/l10n/ru.json16
-rw-r--r--apps/twofactor_backupcodes/l10n/sv.js21
-rw-r--r--apps/twofactor_backupcodes/l10n/sv.json19
-rw-r--r--apps/twofactor_backupcodes/lib/Activity/GenericFilter.php66
-rw-r--r--apps/twofactor_backupcodes/lib/Activity/GenericProvider.php77
-rw-r--r--apps/twofactor_backupcodes/lib/Activity/GenericSetting.php65
-rw-r--r--apps/twofactor_backupcodes/lib/Activity/Provider.php72
-rw-r--r--apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php5
-rw-r--r--apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php48
-rw-r--r--apps/twofactor_backupcodes/settings/personal.php3
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Activity/GenericFilterTest.php83
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php132
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php131
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Activity/SettingTest.php73
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php72
-rw-r--r--apps/updatenotification/appinfo/app.php3
-rw-r--r--apps/updatenotification/appinfo/info.xml4
-rw-r--r--apps/updatenotification/l10n/cs_CZ.js3
-rw-r--r--apps/updatenotification/l10n/cs_CZ.json3
-rw-r--r--apps/updatenotification/l10n/de.js3
-rw-r--r--apps/updatenotification/l10n/de.json3
-rw-r--r--apps/updatenotification/l10n/de_DE.js5
-rw-r--r--apps/updatenotification/l10n/de_DE.json5
-rw-r--r--apps/updatenotification/l10n/es.js3
-rw-r--r--apps/updatenotification/l10n/es.json3
-rw-r--r--apps/updatenotification/l10n/fr.js3
-rw-r--r--apps/updatenotification/l10n/fr.json3
-rw-r--r--apps/updatenotification/l10n/hu_HU.js3
-rw-r--r--apps/updatenotification/l10n/hu_HU.json3
-rw-r--r--apps/updatenotification/l10n/it.js2
-rw-r--r--apps/updatenotification/l10n/it.json2
-rw-r--r--apps/updatenotification/l10n/ja.js3
-rw-r--r--apps/updatenotification/l10n/ja.json3
-rw-r--r--apps/updatenotification/l10n/lv.js24
-rw-r--r--apps/updatenotification/l10n/lv.json22
-rw-r--r--apps/updatenotification/l10n/nb_NO.js3
-rw-r--r--apps/updatenotification/l10n/nb_NO.json3
-rw-r--r--apps/updatenotification/l10n/nl.js3
-rw-r--r--apps/updatenotification/l10n/nl.json3
-rw-r--r--apps/updatenotification/l10n/pl.js4
-rw-r--r--apps/updatenotification/l10n/pl.json4
-rw-r--r--apps/updatenotification/l10n/pt_BR.js3
-rw-r--r--apps/updatenotification/l10n/pt_BR.json3
-rw-r--r--apps/updatenotification/l10n/ru.js2
-rw-r--r--apps/updatenotification/l10n/ru.json2
-rw-r--r--apps/updatenotification/l10n/sk_SK.js19
-rw-r--r--apps/updatenotification/l10n/sk_SK.json19
-rw-r--r--apps/updatenotification/l10n/sl.js10
-rw-r--r--apps/updatenotification/l10n/sl.json10
-rw-r--r--apps/updatenotification/l10n/sq.js15
-rw-r--r--apps/updatenotification/l10n/sq.json15
-rw-r--r--apps/updatenotification/l10n/sv.js16
-rw-r--r--apps/updatenotification/l10n/sv.json16
-rw-r--r--apps/updatenotification/l10n/tr.js3
-rw-r--r--apps/updatenotification/l10n/tr.json3
-rw-r--r--apps/updatenotification/l10n/zh_CN.js18
-rw-r--r--apps/updatenotification/l10n/zh_CN.json18
-rw-r--r--apps/updatenotification/l10n/zh_TW.js3
-rw-r--r--apps/updatenotification/l10n/zh_TW.json3
-rw-r--r--apps/updatenotification/lib/Notification/BackgroundJob.php23
-rw-r--r--apps/updatenotification/lib/Notification/Notifier.php36
-rw-r--r--apps/updatenotification/tests/Notification/BackgroundJobTest.php49
-rw-r--r--apps/updatenotification/tests/Notification/NotifierTest.php14
-rw-r--r--apps/user_ldap/appinfo/info.xml4
-rw-r--r--apps/user_ldap/appinfo/routes.php10
-rw-r--r--apps/user_ldap/img/app-dark.svg4
-rw-r--r--apps/user_ldap/js/wizard/wizardTabLoginFilter.js2
-rw-r--r--apps/user_ldap/l10n/ast.js4
-rw-r--r--apps/user_ldap/l10n/ast.json4
-rw-r--r--apps/user_ldap/l10n/cs_CZ.js9
-rw-r--r--apps/user_ldap/l10n/cs_CZ.json9
-rw-r--r--apps/user_ldap/l10n/da.js4
-rw-r--r--apps/user_ldap/l10n/da.json4
-rw-r--r--apps/user_ldap/l10n/de.js5
-rw-r--r--apps/user_ldap/l10n/de.json5
-rw-r--r--apps/user_ldap/l10n/de_DE.js7
-rw-r--r--apps/user_ldap/l10n/de_DE.json7
-rw-r--r--apps/user_ldap/l10n/el.js4
-rw-r--r--apps/user_ldap/l10n/el.json4
-rw-r--r--apps/user_ldap/l10n/en_GB.js4
-rw-r--r--apps/user_ldap/l10n/en_GB.json4
-rw-r--r--apps/user_ldap/l10n/es.js5
-rw-r--r--apps/user_ldap/l10n/es.json5
-rw-r--r--apps/user_ldap/l10n/fr.js19
-rw-r--r--apps/user_ldap/l10n/fr.json19
-rw-r--r--apps/user_ldap/l10n/gl.js4
-rw-r--r--apps/user_ldap/l10n/gl.json4
-rw-r--r--apps/user_ldap/l10n/he.js4
-rw-r--r--apps/user_ldap/l10n/he.json4
-rw-r--r--apps/user_ldap/l10n/hu_HU.js4
-rw-r--r--apps/user_ldap/l10n/hu_HU.json4
-rw-r--r--apps/user_ldap/l10n/id.js10
-rw-r--r--apps/user_ldap/l10n/id.json10
-rw-r--r--apps/user_ldap/l10n/it.js5
-rw-r--r--apps/user_ldap/l10n/it.json5
-rw-r--r--apps/user_ldap/l10n/ja.js5
-rw-r--r--apps/user_ldap/l10n/ja.json5
-rw-r--r--apps/user_ldap/l10n/ko.js4
-rw-r--r--apps/user_ldap/l10n/ko.json4
-rw-r--r--apps/user_ldap/l10n/nb_NO.js3
-rw-r--r--apps/user_ldap/l10n/nb_NO.json3
-rw-r--r--apps/user_ldap/l10n/nl.js5
-rw-r--r--apps/user_ldap/l10n/nl.json5
-rw-r--r--apps/user_ldap/l10n/pl.js25
-rw-r--r--apps/user_ldap/l10n/pl.json25
-rw-r--r--apps/user_ldap/l10n/pt_BR.js5
-rw-r--r--apps/user_ldap/l10n/pt_BR.json5
-rw-r--r--apps/user_ldap/l10n/pt_PT.js4
-rw-r--r--apps/user_ldap/l10n/pt_PT.json4
-rw-r--r--apps/user_ldap/l10n/ru.js9
-rw-r--r--apps/user_ldap/l10n/ru.json9
-rw-r--r--apps/user_ldap/l10n/sk_SK.js4
-rw-r--r--apps/user_ldap/l10n/sk_SK.json4
-rw-r--r--apps/user_ldap/l10n/sl.js4
-rw-r--r--apps/user_ldap/l10n/sl.json4
-rw-r--r--apps/user_ldap/l10n/sq.js14
-rw-r--r--apps/user_ldap/l10n/sq.json14
-rw-r--r--apps/user_ldap/l10n/sr.js4
-rw-r--r--apps/user_ldap/l10n/sr.json4
-rw-r--r--apps/user_ldap/l10n/sv.js38
-rw-r--r--apps/user_ldap/l10n/sv.json38
-rw-r--r--apps/user_ldap/l10n/th_TH.js4
-rw-r--r--apps/user_ldap/l10n/th_TH.json4
-rw-r--r--apps/user_ldap/l10n/tr.js4
-rw-r--r--apps/user_ldap/l10n/tr.json4
-rw-r--r--apps/user_ldap/l10n/zh_CN.js13
-rw-r--r--apps/user_ldap/l10n/zh_CN.json13
-rw-r--r--apps/user_ldap/lib/Access.php147
-rw-r--r--apps/user_ldap/lib/Command/CreateEmptyConfig.php28
-rw-r--r--apps/user_ldap/lib/Configuration.php9
-rw-r--r--apps/user_ldap/lib/Connection.php5
-rw-r--r--apps/user_ldap/lib/Controller/ConfigAPIController.php322
-rw-r--r--apps/user_ldap/lib/Helper.php19
-rw-r--r--apps/user_ldap/lib/Mapping/AbstractMapping.php11
-rw-r--r--apps/user_ldap/lib/Settings/Section.php21
-rw-r--r--apps/user_ldap/tests/Mapping/AbstractMappingTest.php3
-rw-r--r--apps/user_ldap/tests/Settings/SectionTest.php18
-rw-r--r--apps/workflowengine/appinfo/info.xml4
-rw-r--r--apps/workflowengine/l10n/bg_BG.js1
-rw-r--r--apps/workflowengine/l10n/bg_BG.json1
-rw-r--r--apps/workflowengine/l10n/lv.js71
-rw-r--r--apps/workflowengine/l10n/lv.json69
-rw-r--r--apps/workflowengine/l10n/pl.js4
-rw-r--r--apps/workflowengine/l10n/pl.json4
-rw-r--r--apps/workflowengine/l10n/ru.js9
-rw-r--r--apps/workflowengine/l10n/ru.json9
-rw-r--r--apps/workflowengine/l10n/sk_SK.js58
-rw-r--r--apps/workflowengine/l10n/sk_SK.json56
-rw-r--r--apps/workflowengine/l10n/sq.js71
-rw-r--r--apps/workflowengine/l10n/sq.json69
-rw-r--r--apps/workflowengine/l10n/sv.js71
-rw-r--r--apps/workflowengine/l10n/sv.json69
-rw-r--r--apps/workflowengine/l10n/zh_CN.js59
-rw-r--r--apps/workflowengine/l10n/zh_CN.json57
-rw-r--r--apps/workflowengine/lib/Settings/Section.php21
-rwxr-xr-xautotest-external.sh14
-rwxr-xr-xautotest-js.sh4
-rwxr-xr-xautotest.sh3
-rw-r--r--bower.json1
-rw-r--r--build/autoloaderchecker.sh29
-rw-r--r--build/integration/config/behat.yml15
-rw-r--r--build/integration/data/bjoern.vcf51
-rw-r--r--build/integration/features/auth.feature10
-rw-r--r--build/integration/features/bootstrap/Auth.php40
-rw-r--r--build/integration/features/bootstrap/BasicStructure.php19
-rw-r--r--build/integration/features/bootstrap/CardDavContext.php111
-rw-r--r--build/integration/features/bootstrap/CommandLine.php167
-rw-r--r--build/integration/features/bootstrap/CommandLineContext.php99
-rw-r--r--build/integration/features/bootstrap/LDAPContext.php85
-rw-r--r--build/integration/features/bootstrap/Provisioning.php13
-rw-r--r--build/integration/features/bootstrap/TagsContext.php8
-rw-r--r--build/integration/features/bootstrap/WebDav.php92
-rw-r--r--build/integration/features/carddav.feature30
-rw-r--r--build/integration/features/favorites.feature64
-rw-r--r--build/integration/features/tags.feature22
-rw-r--r--build/integration/features/transfer-ownership.feature119
-rw-r--r--build/integration/features/webdav-related.feature52
-rw-r--r--build/integration/ldap_features/ldap-ocs.feature70
-rwxr-xr-xbuild/integration/run.sh34
-rw-r--r--build/package.json3
-rw-r--r--config/config.sample.php230
-rw-r--r--core/Application.php34
-rw-r--r--core/Command/Config/ListConfigs.php19
-rw-r--r--core/Command/Integrity/CheckApp.php3
-rw-r--r--core/Command/Integrity/CheckCore.php3
-rw-r--r--core/Command/Integrity/SignApp.php11
-rw-r--r--core/Command/Integrity/SignCore.php12
-rw-r--r--core/Controller/CssController.php79
-rw-r--r--core/Controller/LoginController.php25
-rw-r--r--core/Controller/LostController.php6
-rw-r--r--core/Controller/OCSController.php16
-rw-r--r--core/Controller/SetupController.php1
-rw-r--r--core/Controller/TwoFactorChallengeController.php26
-rw-r--r--core/css/apps.css700
-rw-r--r--core/css/apps.scss688
-rw-r--r--core/css/guest.css660
-rw-r--r--core/css/header.css385
-rw-r--r--core/css/header.scss407
-rw-r--r--core/css/icons.scss (renamed from core/css/icons.css)217
-rw-r--r--core/css/inputs.css472
-rw-r--r--core/css/inputs.scss512
-rw-r--r--core/css/multiselect.css113
-rw-r--r--core/css/multiselect.scss128
-rw-r--r--core/css/share.css199
-rw-r--r--core/css/share.scss181
-rw-r--r--core/css/styles.css999
-rw-r--r--core/css/styles.scss1304
-rw-r--r--core/css/systemtags.css86
-rw-r--r--core/css/systemtags.scss81
-rw-r--r--core/css/tooltip.css119
-rw-r--r--core/css/tooltip.scss130
-rw-r--r--core/css/update.css33
-rw-r--r--core/img/actions/checkbox-checked-disabled.svg1
-rw-r--r--core/img/actions/checkbox-checked-white.svg1
-rw-r--r--core/img/actions/checkbox-checked.svg1
-rw-r--r--core/img/actions/checkbox-disabled-white.svg1
-rw-r--r--core/img/actions/checkbox-disabled.svg1
-rw-r--r--core/img/actions/checkbox-mark-white.svg1
-rw-r--r--core/img/actions/checkbox-mark.svg1
-rw-r--r--core/img/actions/checkbox-mixed-disabled.svg1
-rw-r--r--core/img/actions/checkbox-mixed-white.svg2
-rw-r--r--core/img/actions/checkbox-mixed.svg2
-rw-r--r--core/img/actions/checkbox-white.svg1
-rw-r--r--core/img/actions/checkbox.svg1
-rw-r--r--core/img/actions/close-white.svg4
-rw-r--r--core/img/actions/radio-checked-disabled.svg1
-rw-r--r--core/img/actions/radio-checked-white.svg1
-rw-r--r--core/img/actions/radio-checked.svg1
-rw-r--r--core/img/actions/radio-disabled.svg1
-rw-r--r--core/img/actions/radio-white.svg1
-rw-r--r--core/img/actions/radio.svg1
-rw-r--r--core/img/actions/settings-dark.svg1
-rw-r--r--core/js/files/client.js36
-rw-r--r--core/js/js.js46
-rw-r--r--core/js/lostpassword.js2
-rw-r--r--core/js/mimetypelist.js1
-rw-r--r--core/js/sharedialoglinkshareview.js39
-rw-r--r--core/js/sharedialogresharerinfoview.js2
-rw-r--r--core/js/sharedialogshareelistview.js196
-rw-r--r--core/js/shareitemmodel.js50
-rw-r--r--core/js/systemtags/systemtagmodel.js21
-rw-r--r--core/js/systemtags/systemtagsinputfield.js7
-rw-r--r--core/js/tests/specs/coreSpec.js34
-rw-r--r--core/js/tests/specs/l10nSpec.js7
-rw-r--r--core/js/tests/specs/sharedialogviewSpec.js23
-rw-r--r--core/js/tests/specs/shareitemmodelSpec.js5
-rw-r--r--core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js87
-rw-r--r--core/js/update.js2
-rw-r--r--core/l10n/bg_BG.js370
-rw-r--r--core/l10n/bg_BG.json368
-rw-r--r--core/l10n/cs_CZ.js25
-rw-r--r--core/l10n/cs_CZ.json25
-rw-r--r--core/l10n/da.js9
-rw-r--r--core/l10n/da.json9
-rw-r--r--core/l10n/de.js36
-rw-r--r--core/l10n/de.json36
-rw-r--r--core/l10n/de_DE.js30
-rw-r--r--core/l10n/de_DE.json30
-rw-r--r--core/l10n/el.js11
-rw-r--r--core/l10n/el.json11
-rw-r--r--core/l10n/en_GB.js9
-rw-r--r--core/l10n/en_GB.json9
-rw-r--r--core/l10n/es.js26
-rw-r--r--core/l10n/es.json26
-rw-r--r--core/l10n/fi_FI.js19
-rw-r--r--core/l10n/fi_FI.json19
-rw-r--r--core/l10n/fr.js70
-rw-r--r--core/l10n/fr.json70
-rw-r--r--core/l10n/he.js9
-rw-r--r--core/l10n/he.json9
-rw-r--r--core/l10n/hu_HU.js23
-rw-r--r--core/l10n/hu_HU.json23
-rw-r--r--core/l10n/id.js35
-rw-r--r--core/l10n/id.json35
-rw-r--r--core/l10n/is.js22
-rw-r--r--core/l10n/is.json22
-rw-r--r--core/l10n/it.js24
-rw-r--r--core/l10n/it.json24
-rw-r--r--core/l10n/ja.js24
-rw-r--r--core/l10n/ja.json24
-rw-r--r--core/l10n/ko.js34
-rw-r--r--core/l10n/ko.json34
-rw-r--r--core/l10n/lv.js303
-rw-r--r--core/l10n/lv.json301
-rw-r--r--core/l10n/nb_NO.js26
-rw-r--r--core/l10n/nb_NO.json26
-rw-r--r--core/l10n/nl.js24
-rw-r--r--core/l10n/nl.json24
-rw-r--r--core/l10n/pl.js53
-rw-r--r--core/l10n/pl.json53
-rw-r--r--core/l10n/pt_BR.js28
-rw-r--r--core/l10n/pt_BR.json28
-rw-r--r--core/l10n/pt_PT.js9
-rw-r--r--core/l10n/pt_PT.json9
-rw-r--r--core/l10n/ru.js63
-rw-r--r--core/l10n/ru.json63
-rw-r--r--core/l10n/sk_SK.js321
-rw-r--r--core/l10n/sk_SK.json319
-rw-r--r--core/l10n/sl.js15
-rw-r--r--core/l10n/sl.json15
-rw-r--r--core/l10n/sq.js67
-rw-r--r--core/l10n/sq.json67
-rw-r--r--core/l10n/sv.js144
-rw-r--r--core/l10n/sv.json144
-rw-r--r--core/l10n/th_TH.js285
-rw-r--r--core/l10n/th_TH.json283
-rw-r--r--core/l10n/tr.js9
-rw-r--r--core/l10n/tr.json9
-rw-r--r--core/l10n/uk.js9
-rw-r--r--core/l10n/uk.json9
-rw-r--r--core/l10n/zh_CN.js293
-rw-r--r--core/l10n/zh_CN.json293
-rw-r--r--core/l10n/zh_TW.js21
-rw-r--r--core/l10n/zh_TW.json21
-rw-r--r--core/routes.php2
-rw-r--r--core/search/js/search.js4
-rw-r--r--core/templates/installation.php3
-rw-r--r--core/templates/layout.user.php118
-rw-r--r--core/templates/login.php2
-rw-r--r--core/templates/twofactorshowchallenge.php8
-rw-r--r--core/vendor/.gitignore16
-rw-r--r--core/vendor/DOMPurify/.bower.json42
-rw-r--r--core/vendor/DOMPurify/LICENSE378
-rw-r--r--core/vendor/DOMPurify/dist/purify.min.js2
-rw-r--r--core/vendor/marked/.bower.json33
-rw-r--r--core/vendor/marked/LICENSE19
-rw-r--r--core/vendor/marked/marked.min.js6
-rw-r--r--cron.php7
-rw-r--r--lib/base.php59
-rw-r--r--lib/composer/autoload.php2
-rw-r--r--lib/composer/composer/ClassLoader.php36
-rw-r--r--lib/composer/composer/autoload_classmap.php52
-rw-r--r--lib/composer/composer/autoload_real.php2
-rw-r--r--lib/composer/composer/autoload_static.php52
-rw-r--r--lib/l10n/bg_BG.js177
-rw-r--r--lib/l10n/bg_BG.json175
-rw-r--r--lib/l10n/cs_CZ.js14
-rw-r--r--lib/l10n/cs_CZ.json14
-rw-r--r--lib/l10n/de.js10
-rw-r--r--lib/l10n/de.json10
-rw-r--r--lib/l10n/de_DE.js26
-rw-r--r--lib/l10n/de_DE.json26
-rw-r--r--lib/l10n/es.js10
-rw-r--r--lib/l10n/es.json10
-rw-r--r--lib/l10n/fr.js12
-rw-r--r--lib/l10n/fr.json12
-rw-r--r--lib/l10n/hu_HU.js10
-rw-r--r--lib/l10n/hu_HU.json10
-rw-r--r--lib/l10n/it.js10
-rw-r--r--lib/l10n/it.json10
-rw-r--r--lib/l10n/ja.js10
-rw-r--r--lib/l10n/ja.json10
-rw-r--r--lib/l10n/nb_NO.js16
-rw-r--r--lib/l10n/nb_NO.json16
-rw-r--r--lib/l10n/nl.js10
-rw-r--r--lib/l10n/nl.json10
-rw-r--r--lib/l10n/pl.js17
-rw-r--r--lib/l10n/pl.json17
-rw-r--r--lib/l10n/pt_BR.js10
-rw-r--r--lib/l10n/pt_BR.json10
-rw-r--r--lib/l10n/ru.js17
-rw-r--r--lib/l10n/ru.json17
-rw-r--r--lib/l10n/sk_SK.js215
-rw-r--r--lib/l10n/sk_SK.json213
-rw-r--r--lib/l10n/sq.js233
-rw-r--r--lib/l10n/sq.json231
-rw-r--r--lib/l10n/sv.js233
-rw-r--r--lib/l10n/sv.json231
-rw-r--r--lib/l10n/zh_CN.js233
-rw-r--r--lib/l10n/zh_CN.json231
-rw-r--r--lib/l10n/zh_TW.js4
-rw-r--r--lib/l10n/zh_TW.json4
-rw-r--r--lib/private/AllConfig.php13
-rw-r--r--lib/private/App/AppManager.php15
-rw-r--r--lib/private/App/AppStore/Fetcher/AppFetcher.php22
-rw-r--r--lib/private/App/AppStore/Fetcher/CategoryFetcher.php8
-rw-r--r--lib/private/App/AppStore/Fetcher/Fetcher.php56
-rw-r--r--lib/private/AppConfig.php59
-rw-r--r--lib/private/AppFramework/Db/Db.php314
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php29
-rw-r--r--lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php14
-rw-r--r--lib/private/AppFramework/Utility/ControllerMethodReflector.php23
-rw-r--r--lib/private/Archive/TAR.php19
-rw-r--r--lib/private/Archive/ZIP.php18
-rw-r--r--lib/private/Authentication/LoginCredentials/Credentials.php72
-rw-r--r--lib/private/Authentication/LoginCredentials/Store.php120
-rw-r--r--lib/private/Authentication/TwoFactorAuth/Manager.php45
-rw-r--r--lib/private/Console/TimestampFormatter.php4
-rw-r--r--lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php38
-rw-r--r--lib/private/Encryption/Keys/Storage.php35
-rw-r--r--lib/private/Files/Cache/Cache.php7
-rw-r--r--lib/private/Files/Config/UserMountCache.php7
-rw-r--r--lib/private/Files/Mount/LocalHomeMountProvider.php3
-rw-r--r--lib/private/Files/Node/File.php56
-rw-r--r--lib/private/Files/Node/Folder.php55
-rw-r--r--lib/private/Files/Node/Node.php80
-rw-r--r--lib/private/Files/Notify/Change.php65
-rw-r--r--lib/private/Files/Notify/RenameChange.php52
-rw-r--r--lib/private/Files/ObjectStore/ObjectStoreStorage.php21
-rw-r--r--lib/private/Files/Storage/Common.php10
-rw-r--r--lib/private/Files/Storage/DAV.php123
-rw-r--r--lib/private/Files/Storage/Home.php11
-rw-r--r--lib/private/Files/Storage/Local.php13
-rw-r--r--lib/private/Files/Stream/Close.php119
-rw-r--r--lib/private/Files/Stream/Dir.php67
-rw-r--r--lib/private/Files/Stream/Quota.php94
-rw-r--r--lib/private/Files/Stream/StaticStream.php171
-rw-r--r--lib/private/Files/Type/Detection.php4
-rw-r--r--lib/private/Files/Utils/Scanner.php21
-rw-r--r--lib/private/Files/View.php27
-rw-r--r--lib/private/Group/Backend.php15
-rw-r--r--lib/private/Group/Database.php5
-rw-r--r--lib/private/Group/Group.php14
-rw-r--r--lib/private/Group/Manager.php16
-rw-r--r--lib/private/Http/Client/Client.php11
-rw-r--r--lib/private/IntegrityCheck/Checker.php58
-rw-r--r--lib/private/IntegrityCheck/Helpers/FileAccessHelper.php29
-rw-r--r--lib/private/Log.php28
-rw-r--r--lib/private/Log/File.php4
-rw-r--r--lib/private/Log/Rotate.php4
-rw-r--r--lib/private/Mail/Mailer.php2
-rw-r--r--lib/private/Memcache/APC.php136
-rw-r--r--lib/private/Memcache/Factory.php6
-rw-r--r--lib/private/Memcache/Memcached.php27
-rw-r--r--lib/private/NavigationManager.php107
-rw-r--r--lib/private/Preview.php1349
-rw-r--r--lib/private/PreviewManager.php24
-rw-r--r--lib/private/Repair.php6
-rw-r--r--lib/private/Repair/AvatarPermissions.php116
-rw-r--r--lib/private/Repair/Collation.php12
-rw-r--r--lib/private/Repair/MoveUpdaterStepFile.php2
-rw-r--r--lib/private/Repair/NC11/FixMountStorages.php78
-rw-r--r--lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php (renamed from lib/private/Repair/NC11/MoveAvatarBackgroundJob.php)0
-rw-r--r--lib/private/Repair/RepairInvalidShares.php24
-rw-r--r--lib/private/Repair/RepairLegacyStorages.php257
-rw-r--r--lib/private/Security/Bruteforce/Throttler.php13
-rw-r--r--lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php2
-rw-r--r--lib/private/Security/CertificateManager.php20
-rw-r--r--lib/private/Server.php62
-rw-r--r--lib/private/Settings/Admin/Encryption.php8
-rw-r--r--lib/private/Settings/Manager.php199
-rw-r--r--lib/private/Settings/Mapper.php163
-rw-r--r--lib/private/Settings/Section.php21
-rw-r--r--lib/private/Setup.php8
-rw-r--r--lib/private/Setup/MySQL.php4
-rw-r--r--lib/private/Setup/PostgreSQL.php16
-rw-r--r--lib/private/Setup/Sqlite.php2
-rw-r--r--lib/private/Share20/DefaultShareProvider.php3
-rw-r--r--lib/private/Share20/Manager.php9
-rw-r--r--lib/private/SubAdmin.php2
-rw-r--r--lib/private/SystemConfig.php1
-rw-r--r--lib/private/Template/CSSResourceLocator.php52
-rwxr-xr-x[-rw-r--r--]lib/private/Template/ResourceLocator.php4
-rw-r--r--lib/private/Template/SCSSCacher.php190
-rw-r--r--lib/private/TemplateLayout.php51
-rw-r--r--lib/private/Updater.php6
-rw-r--r--lib/private/User/Database.php6
-rw-r--r--lib/private/User/Session.php7
-rw-r--r--lib/private/User/User.php10
-rw-r--r--lib/private/legacy/app.php48
-rw-r--r--lib/private/legacy/files.php1
-rw-r--r--lib/private/legacy/helper.php34
-rw-r--r--lib/private/legacy/user.php11
-rw-r--r--lib/private/legacy/util.php25
-rw-r--r--lib/public/Activity/IManager.php1
-rw-r--r--lib/public/App/IAppManager.php9
-rw-r--r--lib/public/AppFramework/Db/Mapper.php16
-rw-r--r--lib/public/AppFramework/Http/Response.php4
-rw-r--r--lib/public/Authentication/Exceptions/CredentialsUnavailableException.php34
-rw-r--r--lib/public/Authentication/LoginCredentials/ICredentials.php58
-rw-r--r--lib/public/Authentication/LoginCredentials/IStore.php44
-rw-r--r--lib/public/Authentication/TwoFactorAuth/TwoFactorException.php38
-rw-r--r--lib/public/DB/QueryBuilder/IExpressionBuilder.php21
-rw-r--r--lib/public/Encryption/Keys/IStorage.php10
-rw-r--r--lib/public/Files/Cache/IScanner.php1
-rw-r--r--lib/public/Files/Notify/IChange.php56
-rw-r--r--lib/public/Files/Notify/INotifyHandler.php64
-rw-r--r--lib/public/Files/Notify/IRenameChange.php40
-rw-r--r--lib/public/Files/Storage/INotifyStorage.php13
-rw-r--r--lib/public/Files/Storage/IStorage.php4
-rw-r--r--lib/public/GroupInterface.php12
-rw-r--r--lib/public/IAppConfig.php9
-rw-r--r--lib/public/IDb.php54
-rw-r--r--lib/public/IGroup.php9
-rw-r--r--lib/public/IPreview.php2
-rw-r--r--lib/public/IServerContainer.php8
-rw-r--r--lib/public/RichObjectStrings/Definitions.php27
-rw-r--r--lib/public/Settings/IIconSection.php38
-rw-r--r--lib/public/Settings/ISection.php1
-rw-r--r--ocs/v1.php4
-rw-r--r--resources/config/ca-bundle.crt46
-rw-r--r--resources/config/mimetypemapping.dist.json2
-rw-r--r--settings/Application.php3
-rw-r--r--settings/Controller/AdminSettingsController.php8
-rw-r--r--settings/Controller/UsersController.php15
-rw-r--r--settings/ajax/togglegroups.php92
-rw-r--r--settings/css/settings.css74
-rw-r--r--settings/img/change.svg5
-rw-r--r--settings/img/password.svg1
-rw-r--r--settings/img/share.svg1
-rw-r--r--settings/img/toggle-filelist.svg1
-rw-r--r--settings/js/apps.js67
-rw-r--r--settings/js/federationscopemenu.js2
-rw-r--r--settings/js/users/groups.js4
-rw-r--r--settings/js/users/users.js79
-rw-r--r--settings/l10n/ar.js10
-rw-r--r--settings/l10n/ar.json10
-rw-r--r--settings/l10n/ast.js14
-rw-r--r--settings/l10n/ast.json14
-rw-r--r--settings/l10n/az.js14
-rw-r--r--settings/l10n/az.json14
-rw-r--r--settings/l10n/bg_BG.js17
-rw-r--r--settings/l10n/bg_BG.json17
-rw-r--r--settings/l10n/bn_BD.js9
-rw-r--r--settings/l10n/bn_BD.json9
-rw-r--r--settings/l10n/bs.js13
-rw-r--r--settings/l10n/bs.json13
-rw-r--r--settings/l10n/ca.js17
-rw-r--r--settings/l10n/ca.json17
-rw-r--r--settings/l10n/cs_CZ.js40
-rw-r--r--settings/l10n/cs_CZ.json40
-rw-r--r--settings/l10n/da.js17
-rw-r--r--settings/l10n/da.json17
-rw-r--r--settings/l10n/de.js45
-rw-r--r--settings/l10n/de.json45
-rw-r--r--settings/l10n/de_DE.js51
-rw-r--r--settings/l10n/de_DE.json51
-rw-r--r--settings/l10n/el.js26
-rw-r--r--settings/l10n/el.json26
-rw-r--r--settings/l10n/en_GB.js17
-rw-r--r--settings/l10n/en_GB.json17
-rw-r--r--settings/l10n/eo.js14
-rw-r--r--settings/l10n/eo.json14
-rw-r--r--settings/l10n/es.js29
-rw-r--r--settings/l10n/es.json29
-rw-r--r--settings/l10n/es_AR.js13
-rw-r--r--settings/l10n/es_AR.json13
-rw-r--r--settings/l10n/es_MX.js11
-rw-r--r--settings/l10n/es_MX.json11
-rw-r--r--settings/l10n/et_EE.js16
-rw-r--r--settings/l10n/et_EE.json16
-rw-r--r--settings/l10n/eu.js14
-rw-r--r--settings/l10n/eu.json14
-rw-r--r--settings/l10n/fa.js17
-rw-r--r--settings/l10n/fa.json17
-rw-r--r--settings/l10n/fi_FI.js17
-rw-r--r--settings/l10n/fi_FI.json17
-rw-r--r--settings/l10n/fr.js53
-rw-r--r--settings/l10n/fr.json53
-rw-r--r--settings/l10n/gl.js17
-rw-r--r--settings/l10n/gl.json17
-rw-r--r--settings/l10n/he.js17
-rw-r--r--settings/l10n/he.json17
-rw-r--r--settings/l10n/hr.js14
-rw-r--r--settings/l10n/hr.json14
-rw-r--r--settings/l10n/hu_HU.js32
-rw-r--r--settings/l10n/hu_HU.json32
-rw-r--r--settings/l10n/hy.js3
-rw-r--r--settings/l10n/hy.json3
-rw-r--r--settings/l10n/ia.js10
-rw-r--r--settings/l10n/ia.json8
-rw-r--r--settings/l10n/id.js30
-rw-r--r--settings/l10n/id.json30
-rw-r--r--settings/l10n/is.js29
-rw-r--r--settings/l10n/is.json29
-rw-r--r--settings/l10n/it.js35
-rw-r--r--settings/l10n/it.json35
-rw-r--r--settings/l10n/ja.js36
-rw-r--r--settings/l10n/ja.json36
-rw-r--r--settings/l10n/ka_GE.js11
-rw-r--r--settings/l10n/ka_GE.json11
-rw-r--r--settings/l10n/km.js11
-rw-r--r--settings/l10n/km.json11
-rw-r--r--settings/l10n/kn.js10
-rw-r--r--settings/l10n/kn.json10
-rw-r--r--settings/l10n/ko.js77
-rw-r--r--settings/l10n/ko.json77
-rw-r--r--settings/l10n/lb.js9
-rw-r--r--settings/l10n/lb.json9
-rw-r--r--settings/l10n/lt_LT.js25
-rw-r--r--settings/l10n/lt_LT.json25
-rw-r--r--settings/l10n/lv.js190
-rw-r--r--settings/l10n/lv.json190
-rw-r--r--settings/l10n/mk.js13
-rw-r--r--settings/l10n/mk.json13
-rw-r--r--settings/l10n/nb_NO.js32
-rw-r--r--settings/l10n/nb_NO.json32
-rw-r--r--settings/l10n/nl.js35
-rw-r--r--settings/l10n/nl.json35
-rw-r--r--settings/l10n/nn_NO.js8
-rw-r--r--settings/l10n/nn_NO.json8
-rw-r--r--settings/l10n/pl.js74
-rw-r--r--settings/l10n/pl.json74
-rw-r--r--settings/l10n/pt_BR.js35
-rw-r--r--settings/l10n/pt_BR.json35
-rw-r--r--settings/l10n/pt_PT.js17
-rw-r--r--settings/l10n/pt_PT.json17
-rw-r--r--settings/l10n/ro.js16
-rw-r--r--settings/l10n/ro.json16
-rw-r--r--settings/l10n/ru.js80
-rw-r--r--settings/l10n/ru.json80
-rw-r--r--settings/l10n/si_LK.js7
-rw-r--r--settings/l10n/si_LK.json7
-rw-r--r--settings/l10n/sk_SK.js122
-rw-r--r--settings/l10n/sk_SK.json122
-rw-r--r--settings/l10n/sl.js17
-rw-r--r--settings/l10n/sl.json17
-rw-r--r--settings/l10n/sq.js110
-rw-r--r--settings/l10n/sq.json110
-rw-r--r--settings/l10n/sr.js16
-rw-r--r--settings/l10n/sr.json16
-rw-r--r--settings/l10n/sv.js155
-rw-r--r--settings/l10n/sv.json155
-rw-r--r--settings/l10n/ta_LK.js7
-rw-r--r--settings/l10n/ta_LK.json7
-rw-r--r--settings/l10n/th_TH.js17
-rw-r--r--settings/l10n/th_TH.json17
-rw-r--r--settings/l10n/tr.js17
-rw-r--r--settings/l10n/tr.json17
-rw-r--r--settings/l10n/ug.js8
-rw-r--r--settings/l10n/ug.json8
-rw-r--r--settings/l10n/uk.js16
-rw-r--r--settings/l10n/uk.json16
-rw-r--r--settings/l10n/vi.js11
-rw-r--r--settings/l10n/vi.json11
-rw-r--r--settings/l10n/zh_CN.js314
-rw-r--r--settings/l10n/zh_CN.json314
-rw-r--r--settings/l10n/zh_HK.js5
-rw-r--r--settings/l10n/zh_HK.json5
-rw-r--r--settings/l10n/zh_TW.js17
-rw-r--r--settings/l10n/zh_TW.json17
-rw-r--r--settings/personal.php4
-rw-r--r--settings/templates/admin/frame.php20
-rw-r--r--settings/templates/apps.php12
-rw-r--r--settings/templates/personal.php20
-rw-r--r--settings/tests/js/appsSpec.js10
-rw-r--r--tests/Core/Command/Config/ListConfigsTest.php6
-rw-r--r--tests/Core/Command/Group/AddUserTest.php119
-rw-r--r--tests/Core/Command/Group/ListCommandTest.php127
-rw-r--r--tests/Core/Command/Group/RemoveUserTest.php119
-rw-r--r--tests/Core/Command/TwoFactorAuth/DisableTest.php99
-rw-r--r--tests/Core/Command/TwoFactorAuth/EnableTest.php99
-rw-r--r--tests/Core/Command/User/DisableTest.php94
-rw-r--r--tests/Core/Command/User/EnableTest.php94
-rw-r--r--tests/Core/Controller/CssControllerTest.php111
-rw-r--r--tests/Core/Controller/LoginControllerTest.php3
-rw-r--r--tests/Core/Controller/LostControllerTest.php1
-rw-r--r--tests/Core/Controller/OCSControllerTest.php18
-rw-r--r--tests/Core/Controller/TwoFactorChallengeControllerTest.php153
-rw-r--r--tests/Core/Controller/UserControllerTest.php76
-rw-r--r--tests/Settings/Controller/UsersControllerTest.php209
-rw-r--r--tests/data/app/expected-info.json1
-rw-r--r--tests/data/app/invalid-info.xml1
-rw-r--r--tests/data/app/valid-info.xml1
-rw-r--r--tests/karma.config.js19
-rw-r--r--tests/lib/App/AppStore/Fetcher/AppFetcherTest.php16
-rw-r--r--tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php3
-rw-r--r--tests/lib/App/AppStore/Fetcher/FetcherBase.php289
-rw-r--r--tests/lib/AppConfigTest.php23
-rw-r--r--tests/lib/AppFramework/Controller/ControllerTest.php2
-rw-r--r--tests/lib/AppFramework/Http/DataResponseTest.php2
-rw-r--r--tests/lib/AppFramework/Http/ResponseTest.php2
-rw-r--r--tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php73
-rw-r--r--tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php13
-rw-r--r--tests/lib/AppTest.php20
-rw-r--r--tests/lib/Authentication/LoginCredentials/CredentialsTest.php66
-rw-r--r--tests/lib/Authentication/LoginCredentials/StoreTest.php182
-rw-r--r--tests/lib/Authentication/TwoFactorAuth/ManagerTest.php81
-rw-r--r--tests/lib/Command/Integrity/SignAppTest.php62
-rw-r--r--tests/lib/Command/Integrity/SignCoreTest.php60
-rw-r--r--tests/lib/DB/DBSchemaTest.php13
-rw-r--r--tests/lib/DB/LegacyDBTest.php7
-rw-r--r--tests/lib/DB/SchemaDiffTest.php8
-rw-r--r--tests/lib/Encryption/Keys/StorageTest.php43
-rw-r--r--tests/lib/Files/FilesystemTest.php37
-rw-r--r--tests/lib/Files/Node/FileTest.php384
-rw-r--r--tests/lib/Files/Node/FolderTest.php153
-rw-r--r--tests/lib/Files/Node/NodeTest.php478
-rw-r--r--tests/lib/Files/ObjectStore/S3Test.php3
-rw-r--r--tests/lib/Files/Storage/HomeTest.php8
-rw-r--r--tests/lib/Files/Stream/QuotaTest.php5
-rw-r--r--tests/lib/Files/Stream/StaticStreamTest.php70
-rw-r--r--tests/lib/Files/Type/DetectionTest.php4
-rw-r--r--tests/lib/Files/Utils/ScannerTest.php21
-rw-r--r--tests/lib/Group/ManagerTest.php449
-rw-r--r--tests/lib/Http/Client/ClientTest.php71
-rw-r--r--tests/lib/Http/Client/ResponseTest.php27
-rw-r--r--tests/lib/IntegrityCheck/CheckerTest.php97
-rw-r--r--tests/lib/IntegrityCheck/Helpers/FileAccessHelperTest.php25
-rw-r--r--tests/lib/LoggerTest.php18
-rw-r--r--tests/lib/Mail/MailerTest.php4
-rw-r--r--tests/lib/Memcache/APCTest.php26
-rw-r--r--tests/lib/Memcache/APCuTest.php12
-rw-r--r--tests/lib/NavigationManagerTest.php66
-rw-r--r--tests/lib/PreviewTest.php963
-rw-r--r--tests/lib/Repair/AvatarPermissionsTest.php189
-rw-r--r--tests/lib/Repair/NC11/FixMountStoragesTest.php132
-rw-r--r--tests/lib/Repair/RepairInvalidSharesTest.php67
-rw-r--r--tests/lib/Repair/RepairLegacyStoragesTest.php321
-rw-r--r--tests/lib/Security/CertificateManagerTest.php7
-rw-r--r--tests/lib/ServerTest.php2
-rw-r--r--tests/lib/Settings/ManagerTest.php267
-rw-r--r--tests/lib/Settings/MapperTest.php139
-rw-r--r--tests/lib/SetupTest.php16
-rw-r--r--tests/lib/Share20/ManagerTest.php260
-rw-r--r--tests/lib/StreamWrappersTest.php80
-rw-r--r--tests/lib/Template/ResourceLocatorTest.php2
-rw-r--r--tests/lib/TestCase.php4
-rw-r--r--tests/lib/User/SessionTest.php14
-rw-r--r--tests/lib/User/UserTest.php285
-rw-r--r--tests/lib/UserTest.php2
-rw-r--r--tests/preseed-config.php17
-rw-r--r--themes/example/defaults.php6
-rw-r--r--version.php6
1293 files changed, 36242 insertions, 19077 deletions
diff --git a/.drone.yml b/.drone.yml
index 2ee5e8c0730..5e4f18af9f6 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -13,14 +13,14 @@ pipeline:
matrix:
TESTS: jsunit
check-autoloader:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- bash ./build/autoloaderchecker.sh
when:
matrix:
TESTS: check-autoloader
app-check-code:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- ./occ app:check-code admin_audit
- ./occ app:check-code comments
@@ -33,14 +33,14 @@ pipeline:
matrix:
TESTS: app-check-code
signed-off-check:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- php ./build/signed-off-checker.php
when:
matrix:
TESTS: signed-off-check
htaccess-checker:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- php ./build/htaccess-checker.php
when:
@@ -55,7 +55,7 @@ pipeline:
matrix:
TESTS: syntax-php5.6
syntax-php7.0:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- composer install
- ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
@@ -86,24 +86,81 @@ pipeline:
when:
matrix:
TESTS: litmus-v2
- caldavtester:
+ caldavtester-new-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-4
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/caldav/install.sh
- - bash apps/dav/tests/travis/caldav/script.sh
+ - bash apps/dav/tests/travis/caldav/script-new-endpoint.sh
when:
matrix:
- TESTS: caldavtester
- carddavtester:
+ TESTS: caldavtester-new-endpoint
+ caldavtester-old-endpoint:
+ image: nextcloudci/litmus-php7.0:litmus-php7.0-4
+ commands:
+ - bash tests/travis/install.sh sqlite
+ - bash apps/dav/tests/travis/caldav/install.sh
+ - bash apps/dav/tests/travis/caldav/script-old-endpoint.sh
+ when:
+ matrix:
+ TESTS: caldavtester-old-endpoint
+ carddavtester-new-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-4
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/carddav/install.sh
- - bash apps/dav/tests/travis/carddav/script.sh
+ - bash apps/dav/tests/travis/carddav/script-new-endpoint.sh
when:
matrix:
- TESTS: carddavtester
+ TESTS: carddavtester-new-endpoint
+ carddavtester-old-endpoint:
+ image: nextcloudci/litmus-php7.0:litmus-php7.0-4
+ commands:
+ - bash tests/travis/install.sh sqlite
+ - bash apps/dav/tests/travis/carddav/install.sh
+ - bash apps/dav/tests/travis/carddav/script-old-endpoint.sh
+ when:
+ matrix:
+ TESTS: carddavtester-old-endpoint
+ sqlite-php7.0-samba-native:
+ image: nextcloudci/samba-native-php7.0:samba-native-php7.0-1
+ commands:
+ - smbd -D -FS &
+ - ./autotest-external.sh sqlite smb-linux
+ - wget https://codecov.io/bash -O codecov.sh
+ - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
+ when:
+ matrix:
+ TESTS: sqlite-php7.0-samba-native
+ sqlite-php7.0-samba-non-native:
+ image: nextcloudci/samba-non-native-php7.0:samba-non-native-php7.0-2
+ commands:
+ - smbd -D -FS &
+ - ./autotest-external.sh sqlite smb-linux
+ - wget https://codecov.io/bash -O codecov.sh
+ - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
+ when:
+ matrix:
+ TESTS: sqlite-php7.0-samba-non-native
+ sqlite-php7.0-webdav-apache:
+ image: nextcloudci/webdav-apache-php7.0
+ commands:
+ - apache2
+ - ./autotest-external.sh sqlite webdav-apachedrone
+ - wget https://codecov.io/bash -O codecov.sh
+ - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-webdav-apachedrone.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-webdav-apachedrone.xml; fi"
+ when:
+ matrix:
+ TESTS: sqlite-php7.0-webdav-apache
nodb-php5.6:
image: nextcloudci/php5.6:php5.6-7
commands:
@@ -113,7 +170,7 @@ pipeline:
DB: NODB
PHP: 5.6
nodb-php7.0:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite
when:
@@ -137,7 +194,7 @@ pipeline:
DB: sqlite
PHP: 5.6
sqlite-php7.0:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite
when:
@@ -178,7 +235,7 @@ pipeline:
DB: mysqlmb4
PHP: 5.6
integration-capabilities_features:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -187,7 +244,7 @@ pipeline:
matrix:
TESTS: integration-capabilities_features
integration-federation_features:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -196,7 +253,7 @@ pipeline:
matrix:
TESTS: integration-federation_features
integration-auth:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -205,7 +262,7 @@ pipeline:
matrix:
TESTS: integration-auth
integration-carddav:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -214,7 +271,7 @@ pipeline:
matrix:
TESTS: integration-carddav
integration-dav-v2:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -223,7 +280,7 @@ pipeline:
matrix:
TESTS: integration-dav-v2
integration-ocs-v1:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -232,7 +289,7 @@ pipeline:
matrix:
TESTS: integration-ocs-v1
integration-sharing-v1:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -241,7 +298,7 @@ pipeline:
matrix:
TESTS: integration-sharing-v1
integration-checksums-v1:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -250,7 +307,7 @@ pipeline:
matrix:
TESTS: integration-checksums
integration-external-storage:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -259,7 +316,7 @@ pipeline:
matrix:
TESTS: integration-external-storage
integration-provisioning-v1:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -268,7 +325,7 @@ pipeline:
matrix:
TESTS: integration-provisioning-v1
integration-tags:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -277,7 +334,7 @@ pipeline:
matrix:
TESTS: integration-tags
integration-caldav:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -286,7 +343,7 @@ pipeline:
matrix:
TESTS: integration-caldav
integration-comments:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -295,7 +352,7 @@ pipeline:
matrix:
TESTS: integration-comments
integration-favorites:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -304,7 +361,7 @@ pipeline:
matrix:
TESTS: integration-favorites
integration-provisioning-v2:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -313,7 +370,7 @@ pipeline:
matrix:
TESTS: integration-provisioning-v2
integration-webdav-related:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -322,7 +379,7 @@ pipeline:
matrix:
TESTS: integration-webdav-related
integration-sharees-features:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -331,7 +388,7 @@ pipeline:
matrix:
TESTS: integration-sharees-features
integration-setup-features:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- cd build/integration
- ./run.sh setup_features/setup.feature
@@ -339,7 +396,7 @@ pipeline:
matrix:
TESTS: integration-setup-features
integration-filesdrop-features:
- image: nextcloudci/integration-php7.0:integration-php7.0-2
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@@ -347,8 +404,27 @@ pipeline:
when:
matrix:
TESTS: integration-filesdrop-features
+ integration-transfer-ownership-features:
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/transfer-ownership.feature
+ when:
+ matrix:
+ TESTS: integration-transfer-ownership-features
+ integration-ldap-features:
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - ./occ app:enable user_ldap
+ - cd build/integration
+ - ./run.sh ldap_features/ldap-ocs.feature
+ when:
+ matrix:
+ TESTS: integration-ldap-features
nodb-codecov:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- TEST_SELECTION=NODB ./autotest.sh sqlite
- wget https://codecov.io/bash -O codecov.sh
@@ -358,7 +434,7 @@ pipeline:
matrix:
TESTS: nodb-codecov
db-codecov:
- image: nextcloudci/php7.0:php7.0-6
+ image: nextcloudci/php7.0:php7.0-7
commands:
- TEST_SELECTION=QUICKDB ./autotest.sh sqlite
- wget https://codecov.io/bash -O codecov.sh
@@ -367,12 +443,33 @@ pipeline:
when:
matrix:
TESTS: db-codecov
+ object-store:
+ image: nextcloudci/php7.0:php7.0-7
+ commands:
+ - TEST_SELECTION=PRIMARY-${OBJECT_STORE} ./autotest.sh sqlite
+ - wget https://codecov.io/bash -O codecov.sh
+ - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
+ when:
+ matrix:
+ TESTS: object-store
+ memcache-memcached:
+ image: nextcloudci/php7.0-memcached:php7.0-memcached-6
+ commands:
+ - service memcached restart
+ - ./autotest.sh sqlite tests/lib/Memcache/MemcachedTest.php
+ - wget https://codecov.io/bash -O codecov.sh
+ - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
+ - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
+ when:
+ matrix:
+ TEST: memcache-memcached
matrix:
include:
- TESTS: signed-off-check
- TESTS: htaccess-checker
- TESTS: nodb-codecov
- - TESTS: db-codecov
+ - TESTS: db-codecov
- TESTS: integration-capabilities_features
- TESTS: integration-federation_features
- TESTS: integration-auth
@@ -392,6 +489,8 @@ matrix:
- TESTS: integration-sharees-features
- TESTS: integration-setup-features
- TESTS: integration-filesdrop-features
+ - TESTS: integration-transfer-ownership-features
+ - TESTS: integration-ldap-features
- TESTS: jsunit
- TESTS: check-autoloader
- TESTS: app-check-code
@@ -400,8 +499,16 @@ matrix:
- TESTS: syntax-php7.1
- TESTS: litmus-v1
- TESTS: litmus-v2
- - TESTS: caldavtester
- - TESTS: carddavtester
+ - TESTS: caldavtester-old-endpoint
+ - TESTS: caldavtester-new-endpoint
+ - TESTS: carddavtester-new-endpoint
+ - TESTS: carddavtester-old-endpoint
+ - TESTS: object-store
+ OBJECT_STORE: s3
+ - TESTS: sqlite-php7.0-samba-native
+ - TESTS: sqlite-php7.0-samba-non-native
+ - TEST: memcache-memcached
+ - TESTS: sqlite-php7.0-webdav-apache
- DB: NODB
PHP: 5.6
- DB: NODB
@@ -453,3 +560,8 @@ services:
when:
matrix:
DB: mysqlmb4
+ fake-s3:
+ image: lphoward/fake-s3
+ when:
+ matrix:
+ OBJECT_STORE: s3
diff --git a/.gitignore b/.gitignore
index fa49588fad4..d8669fed074 100644
--- a/.gitignore
+++ b/.gitignore
@@ -124,6 +124,7 @@ Vagrantfile
# Tests - auto-generated files
/data-autotest
/tests/coverage*
+/tests/css
/tests/karma-coverage
/tests/autoconfig*
/tests/autotest*
diff --git a/3rdparty b/3rdparty
-Subproject f2974c2e72b2ad5ab7ae745936c4d866405d2b6
+Subproject 489bcf4f81e462f4d74f0b76f58caeabd58e75d
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3228b2bcbfa..3f61c17c268 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,7 @@
ChangeLog
=========
-NC 11 (????-??-??)
+NC 11 (2016-12-13)
------------------
* PHP 5.4 and 5.5 no longer supported
* PHP 7.1 support
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2ed7920a830..5f9dce7a3bf 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -58,7 +58,7 @@ like `git config --global alias.ci 'commit -s'`. Now you can commit with
In case you are not sure how to add or update the license header correctly please have a look at [contribute/HowToApplyALicense.md][applyalicense]
-[devmanual]: https://docs.nextcloud.org/server/11/developer_manual/
+[devmanual]: https://docs.nextcloud.org/server/12/developer_manual/
[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin
[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md
diff --git a/apps/admin_audit/appinfo/info.xml b/apps/admin_audit/appinfo/info.xml
index 14bce64aabc..e5ec9db0689 100644
--- a/apps/admin_audit/appinfo/info.xml
+++ b/apps/admin_audit/appinfo/info.xml
@@ -2,14 +2,12 @@
<info>
<id>admin_audit</id>
<name>Auditing / Logging</name>
- <description>Provides logging abilities for Nextcloud such as logging file
- accesses or otherwise sensitive actions.
- </description>
+ <description>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</description>
<licence>AGPL</licence>
<author>Nextcloud</author>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
<logging/>
diff --git a/apps/comments/appinfo/info.xml b/apps/comments/appinfo/info.xml
index 9d5409a2d62..eb711c4b569 100644
--- a/apps/comments/appinfo/info.xml
+++ b/apps/comments/appinfo/info.xml
@@ -6,9 +6,9 @@
<licence>AGPL</licence>
<author>Arthur Schiwon, Vincent Petry</author>
<default_enable/>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
<logging/>
diff --git a/apps/comments/js/commentmodel.js b/apps/comments/js/commentmodel.js
index e75c79b3f08..3711e53c9f3 100644
--- a/apps/comments/js/commentmodel.js
+++ b/apps/comments/js/commentmodel.js
@@ -9,7 +9,20 @@
*/
(function(OC, OCA) {
- var NS_OWNCLOUD = 'http://owncloud.org/ns';
+
+ _.extend(OC.Files.Client, {
+ PROPERTY_FILEID: '{' + OC.Files.Client.NS_OWNCLOUD + '}id',
+ PROPERTY_MESSAGE: '{' + OC.Files.Client.NS_OWNCLOUD + '}message',
+ PROPERTY_ACTORTYPE: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorType',
+ PROPERTY_ACTORID: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorId',
+ PROPERTY_ISUNREAD: '{' + OC.Files.Client.NS_OWNCLOUD + '}isUnread',
+ PROPERTY_OBJECTID: '{' + OC.Files.Client.NS_OWNCLOUD + '}objectId',
+ PROPERTY_OBJECTTYPE: '{' + OC.Files.Client.NS_OWNCLOUD + '}objectType',
+ PROPERTY_ACTORDISPLAYNAME: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorDisplayName',
+ PROPERTY_CREATIONDATETIME: '{' + OC.Files.Client.NS_OWNCLOUD + '}creationDateTime',
+ PROPERTY_MENTIONS: '{' + OC.Files.Client.NS_OWNCLOUD + '}mentions'
+ });
+
/**
* @class OCA.Comments.CommentModel
* @classdesc
@@ -27,16 +40,16 @@
},
davProperties: {
- 'id': '{' + NS_OWNCLOUD + '}id',
- 'message': '{' + NS_OWNCLOUD + '}message',
- 'actorType': '{' + NS_OWNCLOUD + '}actorType',
- 'actorId': '{' + NS_OWNCLOUD + '}actorId',
- 'actorDisplayName': '{' + NS_OWNCLOUD + '}actorDisplayName',
- 'creationDateTime': '{' + NS_OWNCLOUD + '}creationDateTime',
- 'objectType': '{' + NS_OWNCLOUD + '}objectType',
- 'objectId': '{' + NS_OWNCLOUD + '}objectId',
- 'isUnread': '{' + NS_OWNCLOUD + '}isUnread',
- 'mentions': '{' + NS_OWNCLOUD + '}mentions'
+ 'id': OC.Files.Client.PROPERTY_FILEID,
+ 'message': OC.Files.Client.PROPERTY_MESSAGE,
+ 'actorType': OC.Files.Client.PROPERTY_ACTORTYPE,
+ 'actorId': OC.Files.Client.PROPERTY_ACTORID,
+ 'actorDisplayName': OC.Files.Client.PROPERTY_ACTORDISPLAYNAME,
+ 'creationDateTime': OC.Files.Client.PROPERTY_CREATIONDATETIME,
+ 'objectType': OC.Files.Client.PROPERTY_OBJECTTYPE,
+ 'objectId': OC.Files.Client.PROPERTY_OBJECTID,
+ 'isUnread': OC.Files.Client.PROPERTY_ISUNREAD,
+ 'mentions': OC.Files.Client.PROPERTY_MENTIONS
},
parse: function(data) {
@@ -78,4 +91,3 @@
OCA.Comments.CommentModel = CommentModel;
})(OC, OCA);
-
diff --git a/apps/comments/js/commentsummarymodel.js b/apps/comments/js/commentsummarymodel.js
index d405315ca1f..ffabbc30fb4 100644
--- a/apps/comments/js/commentsummarymodel.js
+++ b/apps/comments/js/commentsummarymodel.js
@@ -9,13 +9,17 @@
*/
(function(OC, OCA) {
- var NS_OWNCLOUD = 'http://owncloud.org/ns';
+
+ _.extend(OC.Files.Client, {
+ PROPERTY_READMARKER: '{' + OC.Files.Client.NS_OWNCLOUD + '}readMarker'
+ });
+
/**
* @class OCA.Comments.CommentSummaryModel
* @classdesc
*
* Model containing summary information related to comments
- * like the read marker.
+ * like the read marker.
*
*/
var CommentSummaryModel = OC.Backbone.Model.extend(
@@ -37,7 +41,7 @@
_objectId: null,
davProperties: {
- 'readMarker': '{' + NS_OWNCLOUD + '}readMarker'
+ 'readMarker': OC.Files.Client.PROPERTY_READMARKER
},
/**
@@ -62,4 +66,3 @@
OCA.Comments.CommentSummaryModel = CommentSummaryModel;
})(OC, OCA);
-
diff --git a/apps/comments/js/filesplugin.js b/apps/comments/js/filesplugin.js
index cc419c18ddb..8c5762065a1 100644
--- a/apps/comments/js/filesplugin.js
+++ b/apps/comments/js/filesplugin.js
@@ -11,6 +11,11 @@
/* global Handlebars */
(function() {
+
+ _.extend(OC.Files.Client, {
+ PROPERTY_COMMENTS_UNREAD: '{' + OC.Files.Client.NS_OWNCLOUD + '}comments-unread'
+ });
+
var TEMPLATE_COMMENTS_UNREAD =
'<a class="action action-comment permanent" title="{{countMessage}}" href="#">' +
'<img class="svg" src="{{iconUrl}}"/>' +
@@ -52,19 +57,17 @@
fileList.registerTabView(new OCA.Comments.CommentsTabView('commentsTabView'));
- var NS_OC = 'http://owncloud.org/ns';
-
var oldGetWebdavProperties = fileList._getWebdavProperties;
fileList._getWebdavProperties = function() {
var props = oldGetWebdavProperties.apply(this, arguments);
- props.push('{' + NS_OC + '}comments-unread');
+ props.push(OC.Files.Client.PROPERTY_COMMENTS_UNREAD);
return props;
};
fileList.filesClient.addFileInfoParser(function(response) {
var data = {};
var props = response.propStat[0].properties;
- var commentsUnread = props['{' + NS_OC + '}comments-unread'];
+ var commentsUnread = props[OC.Files.Client.PROPERTY_COMMENTS_UNREAD];
if (!_.isUndefined(commentsUnread) && commentsUnread !== '') {
data.commentsUnread = parseInt(commentsUnread, 10);
}
diff --git a/apps/comments/l10n/ca.js b/apps/comments/l10n/ca.js
index 9ad9f962572..e97f85ec407 100644
--- a/apps/comments/l10n/ca.js
+++ b/apps/comments/l10n/ca.js
@@ -1,23 +1,39 @@
OC.L10N.register(
"comments",
{
- "Type in a new comment..." : "Escriu en un nou comentari...",
+ "Comments" : "Comentaris",
+ "Unknown user" : "Usuari desconegut",
+ "New comment …" : "Nou comentari...",
"Delete comment" : "Esborrar comentari",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"Edit comment" : "Editar comentari",
"[Deleted user]" : "[usuari Esborrat]",
- "Comments" : "Comentaris",
- "No other comments available" : "No hi han altres comentaris disponibles",
- "More comments..." : "Més comentaris",
+ "No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
+ "More comments …" : "Més comentaris...",
"Save" : "Desa",
- "Allowed characters {count} of {max}" : "caracters Permessos {count} de {max}",
- "{count} unread comments" : "{count} comentaris no llegits",
+ "Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Hi ha hagut un error en extraure el comentari amb id {id}",
+ "Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
+ "Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comentaris</strong> per arxius <em>(sempre llistat en corrent)",
- "You commented" : "Has comentat",
- "%1$s commented" : "%1$s comentat",
- "You commented on %2$s" : "Has comentat a %2$s",
- "%1$s commented on %2$s" : "%1$s ha comentat a %2$s"
+ "You commented" : "Heu comentat",
+ "%1$s commented" : "%1$s ha comentat",
+ "{author} commented" : "{author} ha comentat",
+ "You commented on %1$s" : "Heu comentat a %1$s",
+ "You commented on {file}" : "Heu comentat a {file}",
+ "%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
+ "{author} commented on {file}" : "{author} ha comentat a {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuari (ara) esborrat us ha nomenat en un comentari a “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuari (ara) esborrat us ha nomenat en un comentari de “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
+ "Type in a new comment..." : "Escriviu un nou comentari...",
+ "No other comments available" : "No hi ha altres comentaris disponibles",
+ "More comments..." : "Més comentaris...",
+ "{count} unread comments" : "{count} comentaris no llegits",
+ "You commented on %2$s" : "Heu comentat a %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/ca.json b/apps/comments/l10n/ca.json
index f6df3abce3b..599ff0afa10 100644
--- a/apps/comments/l10n/ca.json
+++ b/apps/comments/l10n/ca.json
@@ -1,21 +1,37 @@
{ "translations": {
- "Type in a new comment..." : "Escriu en un nou comentari...",
+ "Comments" : "Comentaris",
+ "Unknown user" : "Usuari desconegut",
+ "New comment …" : "Nou comentari...",
"Delete comment" : "Esborrar comentari",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"Edit comment" : "Editar comentari",
"[Deleted user]" : "[usuari Esborrat]",
- "Comments" : "Comentaris",
- "No other comments available" : "No hi han altres comentaris disponibles",
- "More comments..." : "Més comentaris",
+ "No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
+ "More comments …" : "Més comentaris...",
"Save" : "Desa",
- "Allowed characters {count} of {max}" : "caracters Permessos {count} de {max}",
- "{count} unread comments" : "{count} comentaris no llegits",
+ "Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Hi ha hagut un error en extraure el comentari amb id {id}",
+ "Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
+ "Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comentaris</strong> per arxius <em>(sempre llistat en corrent)",
- "You commented" : "Has comentat",
- "%1$s commented" : "%1$s comentat",
- "You commented on %2$s" : "Has comentat a %2$s",
- "%1$s commented on %2$s" : "%1$s ha comentat a %2$s"
+ "You commented" : "Heu comentat",
+ "%1$s commented" : "%1$s ha comentat",
+ "{author} commented" : "{author} ha comentat",
+ "You commented on %1$s" : "Heu comentat a %1$s",
+ "You commented on {file}" : "Heu comentat a {file}",
+ "%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
+ "{author} commented on {file}" : "{author} ha comentat a {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuari (ara) esborrat us ha nomenat en un comentari a “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuari (ara) esborrat us ha nomenat en un comentari de “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
+ "Type in a new comment..." : "Escriviu un nou comentari...",
+ "No other comments available" : "No hi ha altres comentaris disponibles",
+ "More comments..." : "Més comentaris...",
+ "{count} unread comments" : "{count} comentaris no llegits",
+ "You commented on %2$s" : "Heu comentat a %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/comments/l10n/cs_CZ.js b/apps/comments/l10n/cs_CZ.js
index 17231a3fa45..da14fcf91b8 100644
--- a/apps/comments/l10n/cs_CZ.js
+++ b/apps/comments/l10n/cs_CZ.js
@@ -20,8 +20,16 @@ OC.L10N.register(
"Comment" : "Komentář",
"You commented" : "Okomentoval(a) jsi",
"%1$s commented" : "%1$s okomentován",
+ "{author} commented" : "{author} okomentoval(a)",
+ "You commented on %1$s" : "Okomentoval(a) jste %1$s",
+ "You commented on {file}" : "Okomentoval(a) jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
+ "{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní již smazaný uživatel vás zmínil v komentáři u \"{file}\"",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
+ "{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil v komentáři u “{file}”",
"Type in a new comment..." : "Zadat nový komentář...",
"No other comments available" : "Nejsou dostupné žádné další komentáře",
"More comments..." : "Více komentářů...",
diff --git a/apps/comments/l10n/cs_CZ.json b/apps/comments/l10n/cs_CZ.json
index a1435f9b3bf..1f1a84b6c09 100644
--- a/apps/comments/l10n/cs_CZ.json
+++ b/apps/comments/l10n/cs_CZ.json
@@ -18,8 +18,16 @@
"Comment" : "Komentář",
"You commented" : "Okomentoval(a) jsi",
"%1$s commented" : "%1$s okomentován",
+ "{author} commented" : "{author} okomentoval(a)",
+ "You commented on %1$s" : "Okomentoval(a) jste %1$s",
+ "You commented on {file}" : "Okomentoval(a) jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
+ "{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní již smazaný uživatel vás zmínil v komentáři u \"{file}\"",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
+ "{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil v komentáři u “{file}”",
"Type in a new comment..." : "Zadat nový komentář...",
"No other comments available" : "Nejsou dostupné žádné další komentáře",
"More comments..." : "Více komentářů...",
diff --git a/apps/comments/l10n/de_DE.js b/apps/comments/l10n/de_DE.js
index ce1e52ffc60..3f7f94fb7c5 100644
--- a/apps/comments/l10n/de_DE.js
+++ b/apps/comments/l10n/de_DE.js
@@ -20,16 +20,16 @@ OC.L10N.register(
"Comment" : "Kommentar",
"You commented" : "Sie haben kommentiert",
"%1$s commented" : "%1$s kommentierte",
- "{author} commented" : "{author} kommentiert",
+ "{author} commented" : "{author} kommentierte",
"You commented on %1$s" : "Sie haben %1$s kommentiert",
"You commented on {file}" : "Sie haben {file} kommentiert",
"%1$s commented on %2$s" : "%1$s kommentierte %2$s",
"{author} commented on {file}" : "{author} hat {file} kommentiert",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien",
- "A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Nutzer erwähnt Sie in einem Kommentar zu \"%s\"",
- "A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Nutzer erwähnt Sie in einem Kommentar zu “{file}”",
- "%1$s mentioned you in a comment on “%2$s”" : "%1$s erwähnt Sie in einem Kommentar zu “%2$s”",
- "{user} mentioned you in a comment on “{file}”" : "{user} erwähnt Sie in einem Kommentar zu “{file}”",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu \"%s\" erwähnt",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu “{file}” erwähnt",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s hat Sie in einem Kommentar zu “%2$s” erwähnt.",
+ "{user} mentioned you in a comment on “{file}”" : "{user} hat Sie in einem Kommentar zu “{file}” erwähnt",
"Type in a new comment..." : "Neuen Kommentar eingeben...",
"No other comments available" : "Keine weiteren Kommentare verfügbar",
"More comments..." : "Weitere Kommentare...",
diff --git a/apps/comments/l10n/de_DE.json b/apps/comments/l10n/de_DE.json
index e83ee533cb2..de0474199ef 100644
--- a/apps/comments/l10n/de_DE.json
+++ b/apps/comments/l10n/de_DE.json
@@ -18,16 +18,16 @@
"Comment" : "Kommentar",
"You commented" : "Sie haben kommentiert",
"%1$s commented" : "%1$s kommentierte",
- "{author} commented" : "{author} kommentiert",
+ "{author} commented" : "{author} kommentierte",
"You commented on %1$s" : "Sie haben %1$s kommentiert",
"You commented on {file}" : "Sie haben {file} kommentiert",
"%1$s commented on %2$s" : "%1$s kommentierte %2$s",
"{author} commented on {file}" : "{author} hat {file} kommentiert",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien",
- "A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Nutzer erwähnt Sie in einem Kommentar zu \"%s\"",
- "A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Nutzer erwähnt Sie in einem Kommentar zu “{file}”",
- "%1$s mentioned you in a comment on “%2$s”" : "%1$s erwähnt Sie in einem Kommentar zu “%2$s”",
- "{user} mentioned you in a comment on “{file}”" : "{user} erwähnt Sie in einem Kommentar zu “{file}”",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu \"%s\" erwähnt",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu “{file}” erwähnt",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s hat Sie in einem Kommentar zu “%2$s” erwähnt.",
+ "{user} mentioned you in a comment on “{file}”" : "{user} hat Sie in einem Kommentar zu “{file}” erwähnt",
"Type in a new comment..." : "Neuen Kommentar eingeben...",
"No other comments available" : "Keine weiteren Kommentare verfügbar",
"More comments..." : "Weitere Kommentare...",
diff --git a/apps/comments/l10n/fr.js b/apps/comments/l10n/fr.js
index 21641df269b..588f429babc 100644
--- a/apps/comments/l10n/fr.js
+++ b/apps/comments/l10n/fr.js
@@ -9,7 +9,7 @@ OC.L10N.register(
"Cancel" : "Annuler",
"Edit comment" : "Modifier le commentaire",
"[Deleted user]" : "[Utilisateur supprimé]",
- "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!",
+ "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !",
"More comments …" : "Plus de commentaires ...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
diff --git a/apps/comments/l10n/fr.json b/apps/comments/l10n/fr.json
index c8aa168fc3c..71e3823b84a 100644
--- a/apps/comments/l10n/fr.json
+++ b/apps/comments/l10n/fr.json
@@ -7,7 +7,7 @@
"Cancel" : "Annuler",
"Edit comment" : "Modifier le commentaire",
"[Deleted user]" : "[Utilisateur supprimé]",
- "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!",
+ "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !",
"More comments …" : "Plus de commentaires ...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
diff --git a/apps/comments/l10n/lv.js b/apps/comments/l10n/lv.js
index c30721e9df4..ff597383f15 100644
--- a/apps/comments/l10n/lv.js
+++ b/apps/comments/l10n/lv.js
@@ -2,25 +2,36 @@ OC.L10N.register(
"comments",
{
"Comments" : "Komentāri",
+ "Unknown user" : "Nezināms lietotājs",
+ "New comment …" : "Jauns komentārs...",
"Delete comment" : "Dzēst komentāru",
"Post" : "Pievienot",
"Cancel" : "Atcelt",
"Edit comment" : "Rediģēt komentāru",
"[Deleted user]" : "[Dzēsts lietotājs]",
+ "No comments yet, start the conversation!" : "Vēl nav komentāru, uzsāciet sarunu!",
+ "More comments …" : "Vairāk komentāri...",
"Save" : "Saglabāt",
"Allowed characters {count} of {max}" : "Atļautās zīmes {count} no {max}",
"Error occurred while retrieving comment with id {id}" : "Notika kļūda saņemot komentāru ar id {id}",
"Error occurred while updating comment with id {id}" : "Kļūda atjauninot komentāru ar id {id}",
"Error occurred while posting comment" : "Notika kļūda pievienojot komentāru",
+ "_%n unread comment_::_%n unread comments_" : ["%n nelasīti komentāri","%n nelasīti komentāri","%n nelasīti komentāri"],
"Comment" : "Komentārs",
- "<strong>Comments</strong> for files" : "<strong>Komentāri</strong> datnēm",
"You commented" : "Tu komentēji",
"%1$s commented" : "%1$s komentēja",
- "You commented on %2$s" : "Tu komentēji %2$s",
+ "{author} commented" : "{author} komentēja",
+ "You commented on %1$s" : "Tu komentēji %1$s",
+ "You commented on {file}" : "Tu komentēji {file}",
"%1$s commented on %2$s" : "%1$s komentēja %2$s",
+ "{author} commented on {file}" : "{author} komentārs {file}",
+ "<strong>Comments</strong> for files" : "<strong>Komentāri</strong> datnēm",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s minēja jūs komentārā “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} minēja jūs komentārā “{file}”",
"Type in a new comment..." : "Raksti jaunu komentāru...",
"No other comments available" : "Nav pieejami citi komentāri",
"More comments..." : "Vairāk komentāri...",
- "{count} unread comments" : "{count} neizlasītu komentāru"
+ "{count} unread comments" : "{count} neizlasītu komentāru",
+ "You commented on %2$s" : "Tu komentēji %2$s"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/comments/l10n/lv.json b/apps/comments/l10n/lv.json
index 153e7c4edfd..b61037fb568 100644
--- a/apps/comments/l10n/lv.json
+++ b/apps/comments/l10n/lv.json
@@ -1,24 +1,35 @@
{ "translations": {
"Comments" : "Komentāri",
+ "Unknown user" : "Nezināms lietotājs",
+ "New comment …" : "Jauns komentārs...",
"Delete comment" : "Dzēst komentāru",
"Post" : "Pievienot",
"Cancel" : "Atcelt",
"Edit comment" : "Rediģēt komentāru",
"[Deleted user]" : "[Dzēsts lietotājs]",
+ "No comments yet, start the conversation!" : "Vēl nav komentāru, uzsāciet sarunu!",
+ "More comments …" : "Vairāk komentāri...",
"Save" : "Saglabāt",
"Allowed characters {count} of {max}" : "Atļautās zīmes {count} no {max}",
"Error occurred while retrieving comment with id {id}" : "Notika kļūda saņemot komentāru ar id {id}",
"Error occurred while updating comment with id {id}" : "Kļūda atjauninot komentāru ar id {id}",
"Error occurred while posting comment" : "Notika kļūda pievienojot komentāru",
+ "_%n unread comment_::_%n unread comments_" : ["%n nelasīti komentāri","%n nelasīti komentāri","%n nelasīti komentāri"],
"Comment" : "Komentārs",
- "<strong>Comments</strong> for files" : "<strong>Komentāri</strong> datnēm",
"You commented" : "Tu komentēji",
"%1$s commented" : "%1$s komentēja",
- "You commented on %2$s" : "Tu komentēji %2$s",
+ "{author} commented" : "{author} komentēja",
+ "You commented on %1$s" : "Tu komentēji %1$s",
+ "You commented on {file}" : "Tu komentēji {file}",
"%1$s commented on %2$s" : "%1$s komentēja %2$s",
+ "{author} commented on {file}" : "{author} komentārs {file}",
+ "<strong>Comments</strong> for files" : "<strong>Komentāri</strong> datnēm",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s minēja jūs komentārā “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} minēja jūs komentārā “{file}”",
"Type in a new comment..." : "Raksti jaunu komentāru...",
"No other comments available" : "Nav pieejami citi komentāri",
"More comments..." : "Vairāk komentāri...",
- "{count} unread comments" : "{count} neizlasītu komentāru"
+ "{count} unread comments" : "{count} neizlasītu komentāru",
+ "You commented on %2$s" : "Tu komentēji %2$s"
},"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/comments/l10n/nb_NO.js b/apps/comments/l10n/nb_NO.js
index 40c0c3663ad..d6ac9a2b7b6 100644
--- a/apps/comments/l10n/nb_NO.js
+++ b/apps/comments/l10n/nb_NO.js
@@ -20,8 +20,16 @@ OC.L10N.register(
"Comment" : "Kommentar",
"You commented" : "Du kommenterte",
"%1$s commented" : "%1$s kommentert",
+ "{author} commented" : "{author} kommenterte",
+ "You commented on %1$s" : "Du kommenterte på %1$s",
+ "You commented on {file}" : "Du kommenterte på {file}",
"%1$s commented on %2$s" : "%1$s kommenterte %2$s",
+ "{author} commented on {file}" : "{author} kommenterte på {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "En (now) slettet bruker nevnte deg i en kommentar til “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) slettet bruker nevnte deg i en kommentar til “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s nevnte deg i en kommentar på “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} nevnte deg i en kommentar på “{file}”",
"Type in a new comment..." : "Skriv inn en ny kommentar...",
"No other comments available" : "Ingen andre kommentarer tilgjengelig",
"More comments..." : "Flere kommentarer..",
diff --git a/apps/comments/l10n/nb_NO.json b/apps/comments/l10n/nb_NO.json
index 00db3510fee..293eca39e84 100644
--- a/apps/comments/l10n/nb_NO.json
+++ b/apps/comments/l10n/nb_NO.json
@@ -18,8 +18,16 @@
"Comment" : "Kommentar",
"You commented" : "Du kommenterte",
"%1$s commented" : "%1$s kommentert",
+ "{author} commented" : "{author} kommenterte",
+ "You commented on %1$s" : "Du kommenterte på %1$s",
+ "You commented on {file}" : "Du kommenterte på {file}",
"%1$s commented on %2$s" : "%1$s kommenterte %2$s",
+ "{author} commented on {file}" : "{author} kommenterte på {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "En (now) slettet bruker nevnte deg i en kommentar til “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) slettet bruker nevnte deg i en kommentar til “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s nevnte deg i en kommentar på “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} nevnte deg i en kommentar på “{file}”",
"Type in a new comment..." : "Skriv inn en ny kommentar...",
"No other comments available" : "Ingen andre kommentarer tilgjengelig",
"More comments..." : "Flere kommentarer..",
diff --git a/apps/comments/l10n/pl.js b/apps/comments/l10n/pl.js
index 19d5148477c..79c2f364578 100644
--- a/apps/comments/l10n/pl.js
+++ b/apps/comments/l10n/pl.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Comments" : "Komentarze",
"Unknown user" : "Nieznany użytkownik",
- "New comment …" : "Nowy komentarz ...",
+ "New comment …" : "Nowy komentarz...",
"Delete comment" : "Skasuj komentarz",
"Post" : "Zapisz",
"Cancel" : "Anuluj",
@@ -16,9 +16,9 @@ OC.L10N.register(
"Error occurred while retrieving comment with id {id}" : "W trakcie otrzymywania komentarza o identyfikatorze {id} wystąpił błąd.",
"Error occurred while updating comment with id {id}" : "W trakcie aktualizacji komentarza o identyfikatorze {id} wystąpił błąd.",
"Error occurred while posting comment" : "Podczas wysyłania komentarza wystąpił błąd",
- "_%n unread comment_::_%n unread comments_" : ["%n nieprzeczytany komentarz","%n nieprzeczytane komentarze","%n nieprzeczytanych komentarzy"],
+ "_%n unread comment_::_%n unread comments_" : ["%n nieprzeczytany komentarz","%n nieprzeczytane komentarze","%n nieprzeczytanych komentarzy","%n nieprzeczytanych komentarzy"],
"Comment" : "Komentarz",
- "You commented" : "Skomentowałeś/łaś",
+ "You commented" : "Skomentowałeś",
"%1$s commented" : "%1$s skomentował",
"{author} commented" : "{author} skomentował",
"You commented on %1$s" : "Skomentowałeś w %1$s",
@@ -34,6 +34,6 @@ OC.L10N.register(
"No other comments available" : "Nie ma więcej komentarzy",
"More comments..." : "Więcej komentarzy...",
"{count} unread comments" : "{count} nieprzeczytanych komentarzy",
- "You commented on %2$s" : "Skomentowałeś/łaś %2$s"
+ "You commented on %2$s" : "Skomentowałeś %2$s"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/comments/l10n/pl.json b/apps/comments/l10n/pl.json
index 838f4d1aa44..90566fdfd86 100644
--- a/apps/comments/l10n/pl.json
+++ b/apps/comments/l10n/pl.json
@@ -1,7 +1,7 @@
{ "translations": {
"Comments" : "Komentarze",
"Unknown user" : "Nieznany użytkownik",
- "New comment …" : "Nowy komentarz ...",
+ "New comment …" : "Nowy komentarz...",
"Delete comment" : "Skasuj komentarz",
"Post" : "Zapisz",
"Cancel" : "Anuluj",
@@ -14,9 +14,9 @@
"Error occurred while retrieving comment with id {id}" : "W trakcie otrzymywania komentarza o identyfikatorze {id} wystąpił błąd.",
"Error occurred while updating comment with id {id}" : "W trakcie aktualizacji komentarza o identyfikatorze {id} wystąpił błąd.",
"Error occurred while posting comment" : "Podczas wysyłania komentarza wystąpił błąd",
- "_%n unread comment_::_%n unread comments_" : ["%n nieprzeczytany komentarz","%n nieprzeczytane komentarze","%n nieprzeczytanych komentarzy"],
+ "_%n unread comment_::_%n unread comments_" : ["%n nieprzeczytany komentarz","%n nieprzeczytane komentarze","%n nieprzeczytanych komentarzy","%n nieprzeczytanych komentarzy"],
"Comment" : "Komentarz",
- "You commented" : "Skomentowałeś/łaś",
+ "You commented" : "Skomentowałeś",
"%1$s commented" : "%1$s skomentował",
"{author} commented" : "{author} skomentował",
"You commented on %1$s" : "Skomentowałeś w %1$s",
@@ -32,6 +32,6 @@
"No other comments available" : "Nie ma więcej komentarzy",
"More comments..." : "Więcej komentarzy...",
"{count} unread comments" : "{count} nieprzeczytanych komentarzy",
- "You commented on %2$s" : "Skomentowałeś/łaś %2$s"
+ "You commented on %2$s" : "Skomentowałeś %2$s"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/comments/l10n/ru.js b/apps/comments/l10n/ru.js
index 83231e9b7cc..650ff5c7d3d 100644
--- a/apps/comments/l10n/ru.js
+++ b/apps/comments/l10n/ru.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"comments",
{
"Comments" : "Комментарии",
- "Unknown user" : "Пользователь неизвестен",
+ "Unknown user" : "Неизвестный пользователь",
"New comment …" : "Новый комментарий...",
"Delete comment" : "Удалить комментарий",
"Post" : "Опубликовать",
@@ -20,8 +20,16 @@ OC.L10N.register(
"Comment" : "Комментарий",
"You commented" : "Вы прокомментировали",
"%1$s commented" : "%1$s прокомментировано",
+ "{author} commented" : "{author} прокомментировал",
+ "You commented on %1$s" : "Вы прокомментировали %1$s",
+ "You commented on {file}" : "Вы прокомментировали {file}",
"%1$s commented on %2$s" : "%1$s прокомментировано на %2$s",
+ "{author} commented on {file}" : "{author} прокомментировал {file}",
"<strong>Comments</strong> for files" : "<strong>Комментарии</strong> к файлам",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Пользователь (удалённый в настоящее время) упомянул вас в комментарии к “%s”.",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Пользователь (удалённый в настоящее время) упомянул вас в комментарии к “{file}”.",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s упомянул вас в комментарии к \"%2$s\"",
+ "{user} mentioned you in a comment on “{file}”" : "{user} упомянул вас в комментарии к “{file}”.",
"Type in a new comment..." : "Напишите новый комментарий...",
"No other comments available" : "Другие комментарии отсутствуют",
"More comments..." : "Ещё комментарии...",
diff --git a/apps/comments/l10n/ru.json b/apps/comments/l10n/ru.json
index 277ecdcecdf..91974f9cdad 100644
--- a/apps/comments/l10n/ru.json
+++ b/apps/comments/l10n/ru.json
@@ -1,6 +1,6 @@
{ "translations": {
"Comments" : "Комментарии",
- "Unknown user" : "Пользователь неизвестен",
+ "Unknown user" : "Неизвестный пользователь",
"New comment …" : "Новый комментарий...",
"Delete comment" : "Удалить комментарий",
"Post" : "Опубликовать",
@@ -18,8 +18,16 @@
"Comment" : "Комментарий",
"You commented" : "Вы прокомментировали",
"%1$s commented" : "%1$s прокомментировано",
+ "{author} commented" : "{author} прокомментировал",
+ "You commented on %1$s" : "Вы прокомментировали %1$s",
+ "You commented on {file}" : "Вы прокомментировали {file}",
"%1$s commented on %2$s" : "%1$s прокомментировано на %2$s",
+ "{author} commented on {file}" : "{author} прокомментировал {file}",
"<strong>Comments</strong> for files" : "<strong>Комментарии</strong> к файлам",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Пользователь (удалённый в настоящее время) упомянул вас в комментарии к “%s”.",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Пользователь (удалённый в настоящее время) упомянул вас в комментарии к “{file}”.",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s упомянул вас в комментарии к \"%2$s\"",
+ "{user} mentioned you in a comment on “{file}”" : "{user} упомянул вас в комментарии к “{file}”.",
"Type in a new comment..." : "Напишите новый комментарий...",
"No other comments available" : "Другие комментарии отсутствуют",
"More comments..." : "Ещё комментарии...",
diff --git a/apps/comments/l10n/sk_SK.js b/apps/comments/l10n/sk_SK.js
index 808e0bff4d4..ed68f8f11ed 100644
--- a/apps/comments/l10n/sk_SK.js
+++ b/apps/comments/l10n/sk_SK.js
@@ -1,8 +1,34 @@
OC.L10N.register(
"comments",
{
+ "Comments" : "Komentáre",
+ "Unknown user" : "Neznámy používateľ",
+ "New comment …" : "Nový komentár ...",
+ "Delete comment" : "Zmazať komentár",
+ "Post" : "Odoslať",
"Cancel" : "Zrušiť",
+ "Edit comment" : "Upraviť komentár",
+ "[Deleted user]" : "[Zmazaný užívateľ]",
+ "No comments yet, start the conversation!" : "Žiadne komentáre, začnite konverzáciu!",
+ "More comments …" : "Ďalšie komentáre ...",
"Save" : "Uložiť",
- "Comment" : "Komentár"
+ "Allowed characters {count} of {max}" : "Počet povolených znakov {count} z {max}",
+ "Error occurred while retrieving comment with id {id}" : "Pri načítavaní komentára s id {id} nastala chyba",
+ "Error occurred while updating comment with id {id}" : "Pri aktualizovaní komentára s id {id} nastala chyba",
+ "Error occurred while posting comment" : "Pri odosielaní komentára nastala chyba",
+ "_%n unread comment_::_%n unread comments_" : ["%n neprečítaný komentár","%n neprečítaných komentárov","%n neprečítaných komentárov"],
+ "Comment" : "Komentár",
+ "You commented" : "Komentovali ste",
+ "%1$s commented" : "%1$s komentoval",
+ "{author} commented" : "{author} komentoval",
+ "You commented on %1$s" : "Komentovali ste %1$s",
+ "You commented on {file}" : "Komentovali ste {file}",
+ "%1$s commented on %2$s" : "%1$s komentoval %2$s",
+ "{author} commented on {file}" : "{author} komentoval {file}",
+ "<strong>Comments</strong> for files" : "<strong>Komentáre</strong> pre súbory",
+ "Type in a new comment..." : "Zadať nový komentár...",
+ "No other comments available" : "Žiadne ďalšie komentáre nie sú dostupné",
+ "More comments..." : "Ďalšie komentáre...",
+ "{count} unread comments" : "{count} neprečítaných komentárov"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/comments/l10n/sk_SK.json b/apps/comments/l10n/sk_SK.json
index 649d040de7a..f85f7dfb3e2 100644
--- a/apps/comments/l10n/sk_SK.json
+++ b/apps/comments/l10n/sk_SK.json
@@ -1,6 +1,32 @@
{ "translations": {
+ "Comments" : "Komentáre",
+ "Unknown user" : "Neznámy používateľ",
+ "New comment …" : "Nový komentár ...",
+ "Delete comment" : "Zmazať komentár",
+ "Post" : "Odoslať",
"Cancel" : "Zrušiť",
+ "Edit comment" : "Upraviť komentár",
+ "[Deleted user]" : "[Zmazaný užívateľ]",
+ "No comments yet, start the conversation!" : "Žiadne komentáre, začnite konverzáciu!",
+ "More comments …" : "Ďalšie komentáre ...",
"Save" : "Uložiť",
- "Comment" : "Komentár"
+ "Allowed characters {count} of {max}" : "Počet povolených znakov {count} z {max}",
+ "Error occurred while retrieving comment with id {id}" : "Pri načítavaní komentára s id {id} nastala chyba",
+ "Error occurred while updating comment with id {id}" : "Pri aktualizovaní komentára s id {id} nastala chyba",
+ "Error occurred while posting comment" : "Pri odosielaní komentára nastala chyba",
+ "_%n unread comment_::_%n unread comments_" : ["%n neprečítaný komentár","%n neprečítaných komentárov","%n neprečítaných komentárov"],
+ "Comment" : "Komentár",
+ "You commented" : "Komentovali ste",
+ "%1$s commented" : "%1$s komentoval",
+ "{author} commented" : "{author} komentoval",
+ "You commented on %1$s" : "Komentovali ste %1$s",
+ "You commented on {file}" : "Komentovali ste {file}",
+ "%1$s commented on %2$s" : "%1$s komentoval %2$s",
+ "{author} commented on {file}" : "{author} komentoval {file}",
+ "<strong>Comments</strong> for files" : "<strong>Komentáre</strong> pre súbory",
+ "Type in a new comment..." : "Zadať nový komentár...",
+ "No other comments available" : "Žiadne ďalšie komentáre nie sú dostupné",
+ "More comments..." : "Ďalšie komentáre...",
+ "{count} unread comments" : "{count} neprečítaných komentárov"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/comments/l10n/sq.js b/apps/comments/l10n/sq.js
index 2297b7dd768..845b9e5cfb1 100644
--- a/apps/comments/l10n/sq.js
+++ b/apps/comments/l10n/sq.js
@@ -14,8 +14,9 @@ OC.L10N.register(
"Save" : "Ruaje",
"Allowed characters {count} of {max}" : "Shenja të lejuara {count} nga {max}",
"Error occurred while retrieving comment with id {id}" : "Ndodhi një gabim teksa merrej komenti me id{id}",
- "Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id{id}",
+ "Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id {id}",
"Error occurred while posting comment" : "Ndodhi një gabim teksa postohej komenti",
+ "_%n unread comment_::_%n unread comments_" : ["%n komente të palexuara","%n komente të palexuara "],
"Comment" : "Koment",
"You commented" : "Komentuat",
"%1$s commented" : "%1$s komentoi",
@@ -23,8 +24,12 @@ OC.L10N.register(
"You commented on %1$s" : "Ju komentuat në %1$s",
"You commented on {file}" : "Ju komentuat në {file}",
"%1$s commented on %2$s" : "%1$s komentoi te %2$s",
- "{author} commented on {file}" : "{autori} komentoj në {file}",
- "<strong>Comments</strong> for files" : "<strong>Komente</strong> për file-et",
+ "{author} commented on {file}" : "{author} komentoi në {file}",
+ "<strong>Comments</strong> for files" : "<strong>Komente</strong> për skedarët",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Një përdorues i fshirë (tani) ju ka përmendur në një koment në \"%s\"",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Një përdorues i fshirë (tani) ju ka përmendur në një koment në “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s ju ka përmendur në një koment në “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} ju ka përmendur në një koment në “{file}”",
"Type in a new comment..." : "Shtypni një koment të ri…",
"No other comments available" : "S’ka komente të tjera",
"More comments..." : "Më tepër komente…",
diff --git a/apps/comments/l10n/sq.json b/apps/comments/l10n/sq.json
index 98d68f922a1..9b0eab39905 100644
--- a/apps/comments/l10n/sq.json
+++ b/apps/comments/l10n/sq.json
@@ -12,8 +12,9 @@
"Save" : "Ruaje",
"Allowed characters {count} of {max}" : "Shenja të lejuara {count} nga {max}",
"Error occurred while retrieving comment with id {id}" : "Ndodhi një gabim teksa merrej komenti me id{id}",
- "Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id{id}",
+ "Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id {id}",
"Error occurred while posting comment" : "Ndodhi një gabim teksa postohej komenti",
+ "_%n unread comment_::_%n unread comments_" : ["%n komente të palexuara","%n komente të palexuara "],
"Comment" : "Koment",
"You commented" : "Komentuat",
"%1$s commented" : "%1$s komentoi",
@@ -21,8 +22,12 @@
"You commented on %1$s" : "Ju komentuat në %1$s",
"You commented on {file}" : "Ju komentuat në {file}",
"%1$s commented on %2$s" : "%1$s komentoi te %2$s",
- "{author} commented on {file}" : "{autori} komentoj në {file}",
- "<strong>Comments</strong> for files" : "<strong>Komente</strong> për file-et",
+ "{author} commented on {file}" : "{author} komentoi në {file}",
+ "<strong>Comments</strong> for files" : "<strong>Komente</strong> për skedarët",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Një përdorues i fshirë (tani) ju ka përmendur në një koment në \"%s\"",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Një përdorues i fshirë (tani) ju ka përmendur në një koment në “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s ju ka përmendur në një koment në “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} ju ka përmendur në një koment në “{file}”",
"Type in a new comment..." : "Shtypni një koment të ri…",
"No other comments available" : "S’ka komente të tjera",
"More comments..." : "Më tepër komente…",
diff --git a/apps/comments/l10n/sv.js b/apps/comments/l10n/sv.js
index 72b91da0fbe..1f66e311e75 100644
--- a/apps/comments/l10n/sv.js
+++ b/apps/comments/l10n/sv.js
@@ -1,23 +1,39 @@
OC.L10N.register(
"comments",
{
- "Type in a new comment..." : "Skriv en ny kommentar",
+ "Comments" : "Kommentarer",
+ "Unknown user" : "Okänd användare",
+ "New comment …" : "Ny kommentar ...",
"Delete comment" : "Radera kommentar",
"Post" : "Skicka",
"Cancel" : "Avbryt",
"Edit comment" : "Redigera kommentar",
"[Deleted user]" : "[Raderad användare]",
- "Comments" : "Kommentarer",
- "No other comments available" : "Inga andra kommentarer tillgängliga",
- "More comments..." : "Fler kommentarter,,,",
+ "No comments yet, start the conversation!" : "Inga kommentarer ännu.",
+ "More comments …" : "Fler kommentarer ...",
"Save" : "Spara",
- "Allowed characters {count} of {max}" : "Tillåtet antal tecken {count} av {max}",
- "{count} unread comments" : "{count} olästa kommentarer",
+ "Allowed characters {count} of {max}" : "Antal tillåtna tecken, {count} av {max}",
+ "Error occurred while retrieving comment with id {id}" : "Fel inträffade vid inläsning av kommentar med id {id}",
+ "Error occurred while updating comment with id {id}" : "Fel inträffade vid uppdatering av kommentar med id {id}",
+ "Error occurred while posting comment" : "Fel inträffade vid publicering av kommentar",
+ "_%n unread comment_::_%n unread comments_" : ["%n oläst kommentar","%n olästa kommentarer"],
"Comment" : "Kommentar",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentarer</strong> för filer <em>(listad alltid i flödet)</em>",
"You commented" : "Du kommenterade",
- "%1$s commented" : "%1$s har kommenterat",
- "You commented on %2$s" : "Du kommenterade %2$s",
- "%1$s commented on %2$s" : "%1$s kommenterade på %2$s"
+ "%1$s commented" : "%1$s kommenterade",
+ "{author} commented" : "{author} kommenterade",
+ "You commented on %1$s" : "Du kommenterade på %1$s",
+ "You commented on {file}" : "Du kommenterade på {file}",
+ "%1$s commented on %2$s" : "%1$s kommenterade på %2$s",
+ "{author} commented on {file}" : "{author} kommenterade på {file}",
+ "<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> för filer",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "En (nu) raderad användare nämnde dig i en kommentar på \"%s\"",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "En (nu) raderad användare nämnde dig i en kommentar på \"{file}\"",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s nämnde dig i en kommentar på “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} nämnde dig i en kommentar på \"{file}\"",
+ "Type in a new comment..." : "Skriv en ny kommentar...",
+ "No other comments available" : "Inga andra kommentarer tillgängliga",
+ "More comments..." : "Fler kommentarer...",
+ "{count} unread comments" : "{count} olästa kommentarer",
+ "You commented on %2$s" : "Du kommenterade %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/sv.json b/apps/comments/l10n/sv.json
index f078ea0e120..696e8f3a078 100644
--- a/apps/comments/l10n/sv.json
+++ b/apps/comments/l10n/sv.json
@@ -1,21 +1,37 @@
{ "translations": {
- "Type in a new comment..." : "Skriv en ny kommentar",
+ "Comments" : "Kommentarer",
+ "Unknown user" : "Okänd användare",
+ "New comment …" : "Ny kommentar ...",
"Delete comment" : "Radera kommentar",
"Post" : "Skicka",
"Cancel" : "Avbryt",
"Edit comment" : "Redigera kommentar",
"[Deleted user]" : "[Raderad användare]",
- "Comments" : "Kommentarer",
- "No other comments available" : "Inga andra kommentarer tillgängliga",
- "More comments..." : "Fler kommentarter,,,",
+ "No comments yet, start the conversation!" : "Inga kommentarer ännu.",
+ "More comments …" : "Fler kommentarer ...",
"Save" : "Spara",
- "Allowed characters {count} of {max}" : "Tillåtet antal tecken {count} av {max}",
- "{count} unread comments" : "{count} olästa kommentarer",
+ "Allowed characters {count} of {max}" : "Antal tillåtna tecken, {count} av {max}",
+ "Error occurred while retrieving comment with id {id}" : "Fel inträffade vid inläsning av kommentar med id {id}",
+ "Error occurred while updating comment with id {id}" : "Fel inträffade vid uppdatering av kommentar med id {id}",
+ "Error occurred while posting comment" : "Fel inträffade vid publicering av kommentar",
+ "_%n unread comment_::_%n unread comments_" : ["%n oläst kommentar","%n olästa kommentarer"],
"Comment" : "Kommentar",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentarer</strong> för filer <em>(listad alltid i flödet)</em>",
"You commented" : "Du kommenterade",
- "%1$s commented" : "%1$s har kommenterat",
- "You commented on %2$s" : "Du kommenterade %2$s",
- "%1$s commented on %2$s" : "%1$s kommenterade på %2$s"
+ "%1$s commented" : "%1$s kommenterade",
+ "{author} commented" : "{author} kommenterade",
+ "You commented on %1$s" : "Du kommenterade på %1$s",
+ "You commented on {file}" : "Du kommenterade på {file}",
+ "%1$s commented on %2$s" : "%1$s kommenterade på %2$s",
+ "{author} commented on {file}" : "{author} kommenterade på {file}",
+ "<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> för filer",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "En (nu) raderad användare nämnde dig i en kommentar på \"%s\"",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "En (nu) raderad användare nämnde dig i en kommentar på \"{file}\"",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s nämnde dig i en kommentar på “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} nämnde dig i en kommentar på \"{file}\"",
+ "Type in a new comment..." : "Skriv en ny kommentar...",
+ "No other comments available" : "Inga andra kommentarer tillgängliga",
+ "More comments..." : "Fler kommentarer...",
+ "{count} unread comments" : "{count} olästa kommentarer",
+ "You commented on %2$s" : "Du kommenterade %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/comments/l10n/zh_CN.js b/apps/comments/l10n/zh_CN.js
index 326fa6407a4..9a459c92b6e 100644
--- a/apps/comments/l10n/zh_CN.js
+++ b/apps/comments/l10n/zh_CN.js
@@ -1,23 +1,39 @@
OC.L10N.register(
"comments",
{
- "Type in a new comment..." : "添加新评论...",
+ "Comments" : "评论",
+ "Unknown user" : "未知用户",
+ "New comment …" : "新评论 ...",
"Delete comment" : "删除评论",
"Post" : "发布",
"Cancel" : "取消",
"Edit comment" : "编辑评论",
- "[Deleted user]" : "[Deleted user]",
- "Comments" : "评论",
- "No other comments available" : "没有其他评论",
- "More comments..." : "更多评论...",
+ "[Deleted user]" : "[已删除用户]",
+ "No comments yet, start the conversation!" : "还没有评论,开始对话吧!",
+ "More comments …" : "更多评论 ...",
"Save" : "保存",
"Allowed characters {count} of {max}" : "当前字数: {count},最大允许:{max}",
- "{count} unread comments" : "{count} 条未读评论",
+ "Error occurred while retrieving comment with id {id}" : "检索 id 为 {id} 的评论出错",
+ "Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错",
+ "Error occurred while posting comment" : "发布评论出错",
+ "_%n unread comment_::_%n unread comments_" : ["%n 未读评论"],
"Comment" : "评论",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "文件的<strong>评论</strong><em>(始终在数据流中列出)</em>",
"You commented" : "您的评论",
"%1$s commented" : "%1$s 已评论",
- "You commented on %2$s" : "你评论了 %2$s",
- "%1$s commented on %2$s" : "%1$s 评论了 %2$s"
+ "{author} commented" : "{author} 评论了",
+ "You commented on %1$s" : "您在 %1$s 的评论",
+ "You commented on {file}" : "您对 {file} 的评论",
+ "%1$s commented on %2$s" : "%1$s 评论了 %2$s",
+ "{author} commented on {file}" : "{author} 对 {file} 的评论",
+ "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您",
+ "{user} mentioned you in a comment on “{file}”" : "{user} 在 “{file}” 的评论中提到了您",
+ "Type in a new comment..." : "添加新评论...",
+ "No other comments available" : "没有其他评论",
+ "More comments..." : "更多评论...",
+ "{count} unread comments" : "{count} 条未读评论",
+ "You commented on %2$s" : "您评论了 %2$s"
},
"nplurals=1; plural=0;");
diff --git a/apps/comments/l10n/zh_CN.json b/apps/comments/l10n/zh_CN.json
index 98aa243e1c2..be867c5b856 100644
--- a/apps/comments/l10n/zh_CN.json
+++ b/apps/comments/l10n/zh_CN.json
@@ -1,21 +1,37 @@
{ "translations": {
- "Type in a new comment..." : "添加新评论...",
+ "Comments" : "评论",
+ "Unknown user" : "未知用户",
+ "New comment …" : "新评论 ...",
"Delete comment" : "删除评论",
"Post" : "发布",
"Cancel" : "取消",
"Edit comment" : "编辑评论",
- "[Deleted user]" : "[Deleted user]",
- "Comments" : "评论",
- "No other comments available" : "没有其他评论",
- "More comments..." : "更多评论...",
+ "[Deleted user]" : "[已删除用户]",
+ "No comments yet, start the conversation!" : "还没有评论,开始对话吧!",
+ "More comments …" : "更多评论 ...",
"Save" : "保存",
"Allowed characters {count} of {max}" : "当前字数: {count},最大允许:{max}",
- "{count} unread comments" : "{count} 条未读评论",
+ "Error occurred while retrieving comment with id {id}" : "检索 id 为 {id} 的评论出错",
+ "Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错",
+ "Error occurred while posting comment" : "发布评论出错",
+ "_%n unread comment_::_%n unread comments_" : ["%n 未读评论"],
"Comment" : "评论",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "文件的<strong>评论</strong><em>(始终在数据流中列出)</em>",
"You commented" : "您的评论",
"%1$s commented" : "%1$s 已评论",
- "You commented on %2$s" : "你评论了 %2$s",
- "%1$s commented on %2$s" : "%1$s 评论了 %2$s"
+ "{author} commented" : "{author} 评论了",
+ "You commented on %1$s" : "您在 %1$s 的评论",
+ "You commented on {file}" : "您对 {file} 的评论",
+ "%1$s commented on %2$s" : "%1$s 评论了 %2$s",
+ "{author} commented on {file}" : "{author} 对 {file} 的评论",
+ "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您",
+ "{user} mentioned you in a comment on “{file}”" : "{user} 在 “{file}” 的评论中提到了您",
+ "Type in a new comment..." : "添加新评论...",
+ "No other comments available" : "没有其他评论",
+ "More comments..." : "更多评论...",
+ "{count} unread comments" : "{count} 条未读评论",
+ "You commented on %2$s" : "您评论了 %2$s"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/comments/lib/Activity/Provider.php b/apps/comments/lib/Activity/Provider.php
index 170b20d7c27..c55982827b3 100644
--- a/apps/comments/lib/Activity/Provider.php
+++ b/apps/comments/lib/Activity/Provider.php
@@ -206,7 +206,7 @@ class Provider implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/comments/lib/Notification/Listener.php b/apps/comments/lib/Notification/Listener.php
index d30c59c93d5..365f93ce8dd 100644
--- a/apps/comments/lib/Notification/Listener.php
+++ b/apps/comments/lib/Notification/Listener.php
@@ -23,7 +23,6 @@ namespace OCA\Comments\Notification;
use OCP\Comments\CommentsEvent;
use OCP\Comments\IComment;
-use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Notification\IManager;
@@ -34,25 +33,19 @@ class Listener {
/** @var IUserManager */
protected $userManager;
- /** @var IURLGenerator */
- protected $urlGenerator;
-
/**
* Listener constructor.
*
* @param IManager $notificationManager
* @param IUserManager $userManager
- * @param IURLGenerator $urlGenerator
*/
public function __construct(
IManager $notificationManager,
- IUserManager $userManager,
- IURLGenerator $urlGenerator
+ IUserManager $userManager
) {
$this->notificationManager = $notificationManager;
$this->userManager = $userManager;
- $this->urlGenerator = $urlGenerator;
}
/**
@@ -100,11 +93,7 @@ class Listener {
->setApp('comments')
->setObject('comment', $comment->getId())
->setSubject('mention', [ $comment->getObjectType(), $comment->getObjectId() ])
- ->setDateTime($comment->getCreationDateTime())
- ->setLink($this->urlGenerator->linkToRouteAbsolute(
- 'comments.Notifications.view',
- ['id' => $comment->getId()])
- );
+ ->setDateTime($comment->getCreationDateTime());
return $notification;
}
diff --git a/apps/comments/lib/Notification/Notifier.php b/apps/comments/lib/Notification/Notifier.php
index 170538512d8..a9daef3031f 100644
--- a/apps/comments/lib/Notification/Notifier.php
+++ b/apps/comments/lib/Notification/Notifier.php
@@ -139,7 +139,11 @@ class Notifier implements INotifier {
]
);
}
- $notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')));
+ $notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')))
+ ->setLink($this->url->linkToRouteAbsolute(
+ 'comments.Notifications.view',
+ ['id' => $comment->getId()])
+ );
return $notification;
break;
diff --git a/apps/comments/tests/Unit/Notification/ListenerTest.php b/apps/comments/tests/Unit/Notification/ListenerTest.php
index 3007b78cb3d..ef84d1c60de 100644
--- a/apps/comments/tests/Unit/Notification/ListenerTest.php
+++ b/apps/comments/tests/Unit/Notification/ListenerTest.php
@@ -46,14 +46,12 @@ class ListenerTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->notificationManager = $this->getMockBuilder('\OCP\Notification\IManager')->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock();
- $this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->getMock();
+ $this->notificationManager = $this->createMock(\OCP\Notification\IManager::class);
+ $this->userManager = $this->createMock(\OCP\IUserManager::class);
$this->listener = new Listener(
$this->notificationManager,
- $this->userManager,
- $this->urlGenerator
+ $this->userManager
);
}
diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml
index f362c882f97..4cd606007c3 100644
--- a/apps/dav/appinfo/info.xml
+++ b/apps/dav/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>WebDAV endpoint</description>
<licence>AGPL</licence>
<author>owncloud.org</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<default_enable/>
<types>
<filesystem/>
@@ -15,7 +15,7 @@
<webdav>appinfo/v1/publicwebdav.php</webdav>
</public>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<background-jobs>
<job>OCA\DAV\CardDAV\SyncJob</job>
@@ -23,6 +23,7 @@
<repair-steps>
<post-migration>
<step>OCA\DAV\Migration\FixBirthdayCalendarComponent</step>
+ <step>OCA\DAV\Migration\ValueFixInsert</step>
</post-migration>
</repair-steps>
<commands>
diff --git a/apps/dav/appinfo/v1/caldav.php b/apps/dav/appinfo/v1/caldav.php
index 9f12a92f4cd..f524c47a821 100644
--- a/apps/dav/appinfo/v1/caldav.php
+++ b/apps/dav/appinfo/v1/caldav.php
@@ -49,7 +49,7 @@ $db = \OC::$server->getDatabaseConnection();
$userManager = \OC::$server->getUserManager();
$random = \OC::$server->getSecureRandom();
$dispatcher = \OC::$server->getEventDispatcher();
-$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $random, $dispatcher);
+$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $random, $dispatcher, true);
$debugging = \OC::$server->getConfig()->getSystemValue('debug', false);
@@ -80,6 +80,7 @@ if ($debugging) {
$server->addPlugin(new Sabre\DAV\Browser\Plugin());
}
+$server->addPlugin(new \Sabre\DAV\Sync\Plugin());
$server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
$server->addPlugin(new \Sabre\CalDAV\Schedule\Plugin());
$server->addPlugin(new \OCA\DAV\CalDAV\Schedule\IMipPlugin( \OC::$server->getMailer(), \OC::$server->getLogger()));
diff --git a/apps/dav/appinfo/v1/carddav.php b/apps/dav/appinfo/v1/carddav.php
index e379707807f..b70045d420b 100644
--- a/apps/dav/appinfo/v1/carddav.php
+++ b/apps/dav/appinfo/v1/carddav.php
@@ -78,6 +78,7 @@ if ($debugging) {
$server->addPlugin(new Sabre\DAV\Browser\Plugin());
}
+$server->addPlugin(new \Sabre\DAV\Sync\Plugin());
$server->addPlugin(new \Sabre\CardDAV\VCFExportPlugin());
$server->addPlugin(new \OCA\DAV\CardDAV\ImageExportPlugin(\OC::$server->getLogger()));
$server->addPlugin(new ExceptionLoggerPlugin('carddav', \OC::$server->getLogger()));
diff --git a/apps/dav/appinfo/v1/webdav.php b/apps/dav/appinfo/v1/webdav.php
index f04bf406334..5ad11ceada8 100644
--- a/apps/dav/appinfo/v1/webdav.php
+++ b/apps/dav/appinfo/v1/webdav.php
@@ -25,6 +25,7 @@
// no php execution timeout for webdav
set_time_limit(0);
+ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();
diff --git a/apps/dav/appinfo/v2/remote.php b/apps/dav/appinfo/v2/remote.php
index ab05e376503..b4a6578a41a 100644
--- a/apps/dav/appinfo/v2/remote.php
+++ b/apps/dav/appinfo/v2/remote.php
@@ -21,6 +21,7 @@
*/
// no php execution timeout for webdav
set_time_limit(0);
+ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();
diff --git a/apps/dav/l10n/bg_BG.js b/apps/dav/l10n/bg_BG.js
new file mode 100644
index 00000000000..3f55af78124
--- /dev/null
+++ b/apps/dav/l10n/bg_BG.js
@@ -0,0 +1,49 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "Календар",
+ "Todos" : "Задачи",
+ "{actor} created calendar {calendar}" : "{actor} направи календар {calendar}",
+ "You created calendar {calendar}" : "Направихте календар {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} изтри календар {calendar}",
+ "You deleted calendar {calendar}" : "Изтрихте календар {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} обнови календар {calendar}",
+ "You updated calendar {calendar}" : "Обновихте календар {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} сподели календар {calendar} с теб",
+ "You shared calendar {calendar} with {user}" : "Споделихте календар {calendar} с {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} сподели календар {calendar} с {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} отказа споделяне на календар {calendar} с теб",
+ "You unshared calendar {calendar} from {user}" : "Отказахте споделяне на календар {calendar} от {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} отказа споделяне на календар {calendar} от {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} отказа споделяне на календар {calendar} от себеси",
+ "You shared calendar {calendar} with group {group}" : "Споделихте календар {calendar} с група {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} сподели календар {calendar} с група {group}",
+ "You unshared calendar {calendar} from group {group}" : "Отказахте споделяне на календар {calendar} от група {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} отказа споделяне с календар {calendar} от група {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} създаде събитие {event} в календар {calendar}",
+ "You created event {event} in calendar {calendar}" : "Създадохте събитие {event} в календар {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} изтри събитие {event} от календар {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Изтрихте събитие {event} от календар {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} обнови събитие {event} в календар {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Обновихте събитие {event} в календар {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} създаде задача {todo} в списък {calendar}",
+ "You created todo {todo} in list {calendar}" : "Създадохте задача {todo} в списък {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} изтри задача {todo} от списък {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Изтрихте задача {todo} от лист {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} актуализира задача {todo} в списък {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Променихте задача {todo} в списък {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} реши задача {todo} в списък {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Решихте задача {todo} в списък {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} възобнови задача {todo} в списък {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Възобновихте задача {todo} в списък {calendar}",
+ "A <strong>calendar</strong> was modified" : "<strong>Календар</strong> беше променен",
+ "A calendar <strong>event</strong> was modified" : "Календарно <strong>събитие</strong> беше променено",
+ "A calendar <strong>todo</strong> was modified" : "Календарна <strong>задача</strong> беше променена",
+ "Contact birthdays" : "Рождени дни на контакти",
+ "Personal" : "Личен",
+ "Contacts" : "Контакти",
+ "Technical details" : "Технически детайли",
+ "Remote Address: %s" : "Отдалечен адрес: %s",
+ "Request ID: %s" : "ID на заявка: %s"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/bg_BG.json b/apps/dav/l10n/bg_BG.json
new file mode 100644
index 00000000000..03238418d18
--- /dev/null
+++ b/apps/dav/l10n/bg_BG.json
@@ -0,0 +1,47 @@
+{ "translations": {
+ "Calendar" : "Календар",
+ "Todos" : "Задачи",
+ "{actor} created calendar {calendar}" : "{actor} направи календар {calendar}",
+ "You created calendar {calendar}" : "Направихте календар {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} изтри календар {calendar}",
+ "You deleted calendar {calendar}" : "Изтрихте календар {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} обнови календар {calendar}",
+ "You updated calendar {calendar}" : "Обновихте календар {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} сподели календар {calendar} с теб",
+ "You shared calendar {calendar} with {user}" : "Споделихте календар {calendar} с {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} сподели календар {calendar} с {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} отказа споделяне на календар {calendar} с теб",
+ "You unshared calendar {calendar} from {user}" : "Отказахте споделяне на календар {calendar} от {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} отказа споделяне на календар {calendar} от {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} отказа споделяне на календар {calendar} от себеси",
+ "You shared calendar {calendar} with group {group}" : "Споделихте календар {calendar} с група {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} сподели календар {calendar} с група {group}",
+ "You unshared calendar {calendar} from group {group}" : "Отказахте споделяне на календар {calendar} от група {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} отказа споделяне с календар {calendar} от група {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} създаде събитие {event} в календар {calendar}",
+ "You created event {event} in calendar {calendar}" : "Създадохте събитие {event} в календар {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} изтри събитие {event} от календар {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Изтрихте събитие {event} от календар {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} обнови събитие {event} в календар {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Обновихте събитие {event} в календар {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} създаде задача {todo} в списък {calendar}",
+ "You created todo {todo} in list {calendar}" : "Създадохте задача {todo} в списък {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} изтри задача {todo} от списък {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Изтрихте задача {todo} от лист {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} актуализира задача {todo} в списък {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Променихте задача {todo} в списък {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} реши задача {todo} в списък {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Решихте задача {todo} в списък {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} възобнови задача {todo} в списък {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Възобновихте задача {todo} в списък {calendar}",
+ "A <strong>calendar</strong> was modified" : "<strong>Календар</strong> беше променен",
+ "A calendar <strong>event</strong> was modified" : "Календарно <strong>събитие</strong> беше променено",
+ "A calendar <strong>todo</strong> was modified" : "Календарна <strong>задача</strong> беше променена",
+ "Contact birthdays" : "Рождени дни на контакти",
+ "Personal" : "Личен",
+ "Contacts" : "Контакти",
+ "Technical details" : "Технически детайли",
+ "Remote Address: %s" : "Отдалечен адрес: %s",
+ "Request ID: %s" : "ID на заявка: %s"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dav/l10n/cs_CZ.js b/apps/dav/l10n/cs_CZ.js
index 3ffe09c4fe3..acd0b85b03f 100644
--- a/apps/dav/l10n/cs_CZ.js
+++ b/apps/dav/l10n/cs_CZ.js
@@ -1,44 +1,44 @@
OC.L10N.register(
"dav",
{
+ "Calendar" : "Kalendář",
+ "Todos" : "Úkoly",
+ "{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
+ "You created calendar {calendar}" : "Vytvořil(a",
+ "{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
+ "You deleted calendar {calendar}" : "Smazal(a) jste kalendář {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} aktualizoval(a) kalendář {calendar}",
+ "You updated calendar {calendar}" : "Aktualizoval(a) jste kalendář {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} s vámi nasdílel(a) kalendář {calendar}",
+ "You shared calendar {calendar} with {user}" : "S uživatelem {user} jste začal(a) sdílet kalendář {calendar}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} začal sdílet kalendář {calendar} s uživatelem {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} s vámi přestal(a) sdílet kalendář {calendar}",
+ "You unshared calendar {calendar} from {user}" : "S uživatelem {user} jste přestal(a) sdílet kalendář {calendar}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} přestal(a) sdílet kalendář {calendar} s uživatelem {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} přestal sdílet kalendář {calendar} sám se sebou",
+ "You shared calendar {calendar} with group {group}" : "Se skupinou {group} jste začal(a) sdílet kalendář {calendar}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} nasdílel(a) kalendář {calendar} skupině {group}",
+ "You unshared calendar {calendar} from group {group}" : "Zrušil(a) jste sdílení kalendáře {calendar} skupině {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} přestal(a) sdílet kalendář {calendar} se skupinou {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} vytvořil(a) událost {event} v kalendáři {calendar}",
+ "You created event {event} in calendar {calendar}" : "V kalendáři {calendar} jste vytvořil(a) událost {event}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} z kalendáře {calendar} smazal(a) událost {event}",
+ "You deleted event {event} from calendar {calendar}" : "Smazal(a) jste událost {event} z kalendáře {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} aktualizoval(a) událost {event} v kalendáři {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Aktualizoval(a) jste událost {event} v kalendáři {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} vytvořil(a) v seznamu {calendar} vytvořila úkol {todo}",
+ "You created todo {todo} in list {calendar}" : "V seznamu {calendar} jste vytvořil(a) úkol {todo}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} smazal(a) úkol {todo} ze seznamu {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Ze seznamu {todo} jste smazal(a) úkol {todo}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} aktualizoval(a) úkol {todo} v seznamu {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Aktualizoval(a) jste úkol {todo} v seznamu {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} vyřešil(a) úkol {todo} v seznamu {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Vyřešil(a) jste úkol {todo} v seznamu {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} znovu otevřel(a) úkol {todo} v seznamu {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Znovu jste otevřel(a) úkol {todo} v seznamu {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Kalendář</strong> byl změněn",
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
- "%1$s created calendar %2$s" : "%1$s vytvořil(a) kalendář %2$s",
- "You created calendar %2$s" : "Vytvořili jste kalendář %2$s",
- "%1$s deleted calendar %2$s" : "%1$s vymazal(a) kalendář %2$s",
- "You deleted calendar %2$s" : "Smazali jste kalendář %2$s",
- "%1$s updated calendar %2$s" : "%1$s aktualizoval(a) kalendář %2$s",
- "You updated calendar %2$s" : "Aktualizovali jste kalendář %2$s",
- "%1$s shared calendar %2$s with you" : "%1$s s vámi začal(a) sdílet kalendář %2$s",
- "You shared calendar %2$s with %1$s" : "S uživatelem %1$s jste začal(a) sdílet kalendář %2$s",
- "%3$s shared calendar %2$s with %1$s" : "%3$s nasdílel(a) s %1$s kalendář %2$s",
- "%1$s unshared calendar %2$s from you" : "%1$s s vámi přestal(a) sdílet kalendář %2$s",
- "You unshared calendar %2$s from %1$s" : "S %1$s jste přestal(a) sdílet kalendář %2$s",
- "%3$s unshared calendar %2$s from %1$s" : "%3$s přestal s %1$s sdílet kalendář %2$s",
- "%1$s unshared calendar %2$s from themselves" : "%1$s přestal sám se sebou sdílet kalendář %2$s",
- "You shared calendar %2$s with group %1$s" : "Se skupinou %1$s jste nasdílel(a) kalendář %2$s",
- "%3$s shared calendar %2$s with group %1$s" : "%3$s se skupinou %1$s začal(a) sdílet kalendář %2$s",
- "You unshared calendar %2$s from group %1$s" : "Se skupinou %1$s jste přestal(a) sdílet kalendář %2$s",
- "%3$s unshared calendar %2$s from group %1$s" : "%3$s přestal ve skupině %1$s sdílet kalendář %2$s",
- "%1$s created event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s vytvořil událost %3$s",
- "You created event %3$s in calendar %2$s" : "V kalendáři %2$s jste vytvořil(a) událost %3$s",
- "%1$s deleted event %3$s from calendar %2$s" : "%1$s z kalendáře %2$s smazal(a) událost %3$s",
- "You deleted event %3$s from calendar %2$s" : "V kalendáři %2$s jste smazal(a) událost %3$s",
- "%1$s updated event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s aktualizoval(a) událost %3$s",
- "You updated event %3$s in calendar %2$s" : "Aktualizoval(a) jste událost %3$s v kalendáři %2$s",
- "%1$s created todo %3$s in list %2$s" : "%1$s v seznamu %2$s vytvořil(a) úkol %3$s",
- "You created todo %3$s in list %2$s" : "V seznamu %2$s jste vytvořil(a) úkol %3$s",
- "%1$s deleted todo %3$s from list %2$s" : "%1$s ze seznamu %2$s smazal(a) úkol %3$s",
- "You deleted todo %3$s from list %2$s" : "Ze seznamu %2$s jste odstranil(a) úkol %3$s",
- "%1$s updated todo %3$s in list %2$s" : "%1$s v seznamu %2$s aktualizoval(a) úkol %3$s",
- "You updated todo %3$s in list %2$s" : "Aktualizoval(a) jste úkol %3$s v seznamu %2$s",
- "%1$s solved todo %3$s in list %2$s" : "%1$s v seznamu %2$s vyřešil(a) úkol %3$s",
- "You solved todo %3$s in list %2$s" : "Vyřešil(a) jste úkol %3$s v seznamu %2$s",
- "%1$s reopened todo %3$s in list %2$s" : "%1$s znovu otevřel úkol %3$s v seznamu %2$s",
- "You reopened todo %3$s in list %2$s" : "Znovu jste otevřel(a) úkol %3$s v seznamu %2$s",
- "Calendar" : "Kalendář",
- "Todos" : "Úkoly",
"Contact birthdays" : "Narozeniny kontaktů",
"Personal" : "Osobní",
"Contacts" : "Kontakty",
diff --git a/apps/dav/l10n/cs_CZ.json b/apps/dav/l10n/cs_CZ.json
index abe873a2094..c1a25b3401e 100644
--- a/apps/dav/l10n/cs_CZ.json
+++ b/apps/dav/l10n/cs_CZ.json
@@ -1,42 +1,42 @@
{ "translations": {
+ "Calendar" : "Kalendář",
+ "Todos" : "Úkoly",
+ "{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
+ "You created calendar {calendar}" : "Vytvořil(a",
+ "{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
+ "You deleted calendar {calendar}" : "Smazal(a) jste kalendář {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} aktualizoval(a) kalendář {calendar}",
+ "You updated calendar {calendar}" : "Aktualizoval(a) jste kalendář {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} s vámi nasdílel(a) kalendář {calendar}",
+ "You shared calendar {calendar} with {user}" : "S uživatelem {user} jste začal(a) sdílet kalendář {calendar}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} začal sdílet kalendář {calendar} s uživatelem {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} s vámi přestal(a) sdílet kalendář {calendar}",
+ "You unshared calendar {calendar} from {user}" : "S uživatelem {user} jste přestal(a) sdílet kalendář {calendar}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} přestal(a) sdílet kalendář {calendar} s uživatelem {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} přestal sdílet kalendář {calendar} sám se sebou",
+ "You shared calendar {calendar} with group {group}" : "Se skupinou {group} jste začal(a) sdílet kalendář {calendar}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} nasdílel(a) kalendář {calendar} skupině {group}",
+ "You unshared calendar {calendar} from group {group}" : "Zrušil(a) jste sdílení kalendáře {calendar} skupině {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} přestal(a) sdílet kalendář {calendar} se skupinou {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} vytvořil(a) událost {event} v kalendáři {calendar}",
+ "You created event {event} in calendar {calendar}" : "V kalendáři {calendar} jste vytvořil(a) událost {event}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} z kalendáře {calendar} smazal(a) událost {event}",
+ "You deleted event {event} from calendar {calendar}" : "Smazal(a) jste událost {event} z kalendáře {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} aktualizoval(a) událost {event} v kalendáři {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Aktualizoval(a) jste událost {event} v kalendáři {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} vytvořil(a) v seznamu {calendar} vytvořila úkol {todo}",
+ "You created todo {todo} in list {calendar}" : "V seznamu {calendar} jste vytvořil(a) úkol {todo}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} smazal(a) úkol {todo} ze seznamu {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Ze seznamu {todo} jste smazal(a) úkol {todo}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} aktualizoval(a) úkol {todo} v seznamu {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Aktualizoval(a) jste úkol {todo} v seznamu {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} vyřešil(a) úkol {todo} v seznamu {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Vyřešil(a) jste úkol {todo} v seznamu {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} znovu otevřel(a) úkol {todo} v seznamu {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Znovu jste otevřel(a) úkol {todo} v seznamu {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Kalendář</strong> byl změněn",
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
- "%1$s created calendar %2$s" : "%1$s vytvořil(a) kalendář %2$s",
- "You created calendar %2$s" : "Vytvořili jste kalendář %2$s",
- "%1$s deleted calendar %2$s" : "%1$s vymazal(a) kalendář %2$s",
- "You deleted calendar %2$s" : "Smazali jste kalendář %2$s",
- "%1$s updated calendar %2$s" : "%1$s aktualizoval(a) kalendář %2$s",
- "You updated calendar %2$s" : "Aktualizovali jste kalendář %2$s",
- "%1$s shared calendar %2$s with you" : "%1$s s vámi začal(a) sdílet kalendář %2$s",
- "You shared calendar %2$s with %1$s" : "S uživatelem %1$s jste začal(a) sdílet kalendář %2$s",
- "%3$s shared calendar %2$s with %1$s" : "%3$s nasdílel(a) s %1$s kalendář %2$s",
- "%1$s unshared calendar %2$s from you" : "%1$s s vámi přestal(a) sdílet kalendář %2$s",
- "You unshared calendar %2$s from %1$s" : "S %1$s jste přestal(a) sdílet kalendář %2$s",
- "%3$s unshared calendar %2$s from %1$s" : "%3$s přestal s %1$s sdílet kalendář %2$s",
- "%1$s unshared calendar %2$s from themselves" : "%1$s přestal sám se sebou sdílet kalendář %2$s",
- "You shared calendar %2$s with group %1$s" : "Se skupinou %1$s jste nasdílel(a) kalendář %2$s",
- "%3$s shared calendar %2$s with group %1$s" : "%3$s se skupinou %1$s začal(a) sdílet kalendář %2$s",
- "You unshared calendar %2$s from group %1$s" : "Se skupinou %1$s jste přestal(a) sdílet kalendář %2$s",
- "%3$s unshared calendar %2$s from group %1$s" : "%3$s přestal ve skupině %1$s sdílet kalendář %2$s",
- "%1$s created event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s vytvořil událost %3$s",
- "You created event %3$s in calendar %2$s" : "V kalendáři %2$s jste vytvořil(a) událost %3$s",
- "%1$s deleted event %3$s from calendar %2$s" : "%1$s z kalendáře %2$s smazal(a) událost %3$s",
- "You deleted event %3$s from calendar %2$s" : "V kalendáři %2$s jste smazal(a) událost %3$s",
- "%1$s updated event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s aktualizoval(a) událost %3$s",
- "You updated event %3$s in calendar %2$s" : "Aktualizoval(a) jste událost %3$s v kalendáři %2$s",
- "%1$s created todo %3$s in list %2$s" : "%1$s v seznamu %2$s vytvořil(a) úkol %3$s",
- "You created todo %3$s in list %2$s" : "V seznamu %2$s jste vytvořil(a) úkol %3$s",
- "%1$s deleted todo %3$s from list %2$s" : "%1$s ze seznamu %2$s smazal(a) úkol %3$s",
- "You deleted todo %3$s from list %2$s" : "Ze seznamu %2$s jste odstranil(a) úkol %3$s",
- "%1$s updated todo %3$s in list %2$s" : "%1$s v seznamu %2$s aktualizoval(a) úkol %3$s",
- "You updated todo %3$s in list %2$s" : "Aktualizoval(a) jste úkol %3$s v seznamu %2$s",
- "%1$s solved todo %3$s in list %2$s" : "%1$s v seznamu %2$s vyřešil(a) úkol %3$s",
- "You solved todo %3$s in list %2$s" : "Vyřešil(a) jste úkol %3$s v seznamu %2$s",
- "%1$s reopened todo %3$s in list %2$s" : "%1$s znovu otevřel úkol %3$s v seznamu %2$s",
- "You reopened todo %3$s in list %2$s" : "Znovu jste otevřel(a) úkol %3$s v seznamu %2$s",
- "Calendar" : "Kalendář",
- "Todos" : "Úkoly",
"Contact birthdays" : "Narozeniny kontaktů",
"Personal" : "Osobní",
"Contacts" : "Kontakty",
diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js
index 5ee0af7dbaa..d5ebd166a29 100644
--- a/apps/dav/l10n/de.js
+++ b/apps/dav/l10n/de.js
@@ -6,10 +6,10 @@ OC.L10N.register(
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
- "You deleted calendar {calendar}" : "Du hast hat den Kalender {calendar} gelöscht",
+ "You deleted calendar {calendar}" : "Du hast den Kalender {calendar} gelöscht",
"{actor} updated calendar {calendar}" : "{actor} hat den Kalender {calendar} aktualisiert",
"You updated calendar {calendar}" : "Du hast den Kalender {calendar} aktualisiert",
- "{actor} shared calendar {calendar} with you" : "{actor} hat den Kalender {calendar} mit Ihnen geteilt",
+ "{actor} shared calendar {calendar} with you" : "{actor} hat den Kalender {calendar} mit dir geteilt",
"You shared calendar {calendar} with {user}" : "Du hast den Kalender {calendar} mit {user} geteilt",
"{actor} shared calendar {calendar} with {user}" : "{actor} hat den Kalender {calendar} mit {user} geteilt",
"{actor} unshared calendar {calendar} from you" : "{actor} teilt den Kalender {calendar} nicht mehr mit dir",
@@ -26,16 +26,16 @@ OC.L10N.register(
"You deleted event {event} from calendar {calendar}" : "Du hast das Ereignis {event} im Kalender {calendar} gelöscht",
"{actor} updated event {event} in calendar {calendar}" : "{actor} hat das Ereignis {event} im Kalender {calendar} aktualisiert",
"You updated event {event} in calendar {calendar}" : "Du hast das Ereignis {event} im Kalender {calendar} aktualisiert",
- "{actor} created todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erstellt",
- "You created todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} erstellt",
- "{actor} deleted todo {todo} from list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} gelöscht",
- "You deleted todo {todo} from list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} gelöscht",
- "{actor} updated todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} aktualisiert",
- "You updated todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} aktualisiert",
- "{actor} solved todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erledigt",
- "You solved todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} erledigt",
- "{actor} reopened todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} wieder geöffnet",
- "You reopened todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} wieder geöffnet",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "You created todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} gelöscht",
+ "You deleted todo {todo} from list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} gelöscht",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "You updated todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "You solved todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wieder geöffnet",
+ "You reopened todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} wieder geöffnet",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein <strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine <strong>Aufgabe</strong> wurde bearbeitet",
@@ -43,7 +43,7 @@ OC.L10N.register(
"Personal" : "Persönlich",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
- "Remote Address: %s" : "Entfernte Adresse: %s",
- "Request ID: %s" : "Anfragekennung: %s"
+ "Remote Address: %s" : "Remote-Adresse: %s",
+ "Request ID: %s" : "Anfrage-ID: %s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json
index 915c2cfb540..dbec1faa87b 100644
--- a/apps/dav/l10n/de.json
+++ b/apps/dav/l10n/de.json
@@ -4,10 +4,10 @@
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
- "You deleted calendar {calendar}" : "Du hast hat den Kalender {calendar} gelöscht",
+ "You deleted calendar {calendar}" : "Du hast den Kalender {calendar} gelöscht",
"{actor} updated calendar {calendar}" : "{actor} hat den Kalender {calendar} aktualisiert",
"You updated calendar {calendar}" : "Du hast den Kalender {calendar} aktualisiert",
- "{actor} shared calendar {calendar} with you" : "{actor} hat den Kalender {calendar} mit Ihnen geteilt",
+ "{actor} shared calendar {calendar} with you" : "{actor} hat den Kalender {calendar} mit dir geteilt",
"You shared calendar {calendar} with {user}" : "Du hast den Kalender {calendar} mit {user} geteilt",
"{actor} shared calendar {calendar} with {user}" : "{actor} hat den Kalender {calendar} mit {user} geteilt",
"{actor} unshared calendar {calendar} from you" : "{actor} teilt den Kalender {calendar} nicht mehr mit dir",
@@ -24,16 +24,16 @@
"You deleted event {event} from calendar {calendar}" : "Du hast das Ereignis {event} im Kalender {calendar} gelöscht",
"{actor} updated event {event} in calendar {calendar}" : "{actor} hat das Ereignis {event} im Kalender {calendar} aktualisiert",
"You updated event {event} in calendar {calendar}" : "Du hast das Ereignis {event} im Kalender {calendar} aktualisiert",
- "{actor} created todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erstellt",
- "You created todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} erstellt",
- "{actor} deleted todo {todo} from list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} gelöscht",
- "You deleted todo {todo} from list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} gelöscht",
- "{actor} updated todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} aktualisiert",
- "You updated todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} aktualisiert",
- "{actor} solved todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erledigt",
- "You solved todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} erledigt",
- "{actor} reopened todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} wieder geöffnet",
- "You reopened todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} wieder geöffnet",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "You created todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} gelöscht",
+ "You deleted todo {todo} from list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} gelöscht",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "You updated todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "You solved todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wieder geöffnet",
+ "You reopened todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} wieder geöffnet",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein <strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine <strong>Aufgabe</strong> wurde bearbeitet",
@@ -41,7 +41,7 @@
"Personal" : "Persönlich",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
- "Remote Address: %s" : "Entfernte Adresse: %s",
- "Request ID: %s" : "Anfragekennung: %s"
+ "Remote Address: %s" : "Remote-Adresse: %s",
+ "Request ID: %s" : "Anfrage-ID: %s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js
index 03da3d51f7c..07758a7b122 100644
--- a/apps/dav/l10n/de_DE.js
+++ b/apps/dav/l10n/de_DE.js
@@ -26,19 +26,19 @@ OC.L10N.register(
"You deleted event {event} from calendar {calendar}" : "Sie haben das Ereignis {event} im Kalender {calendar} gelöscht",
"{actor} updated event {event} in calendar {calendar}" : "{actor} hat das Ereignis {event} im Kalender {calendar} aktualisiert",
"You updated event {event} in calendar {calendar}" : "Sie haben das Ereignis {event} im Kalender {calendar} aktualisiert",
- "{actor} created todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erstellt",
- "You created todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} erstellt",
- "{actor} deleted todo {todo} from list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} gelöscht",
- "You deleted todo {todo} from list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} gelöscht",
- "{actor} updated todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} aktualisiert",
- "You updated todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} aktualisiert",
- "{actor} solved todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erledigt",
- "You solved todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} erledigt",
- "{actor} reopened todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} wieder geöffnet",
- "You reopened todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} wieder geöffnet",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "You created todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} gelöscht",
+ "You deleted todo {todo} from list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} gelöscht",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "You updated todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "You solved todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "You reopened todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
- "A calendar <strong>event</strong> was modified" : "Ein <strong>Ereignis</strong> wurde bearbeitet",
- "A calendar <strong>todo</strong> was modified" : "Eine <strong>Aufgabe</strong> wurde bearbeitet",
+ "A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
+ "A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
"Personal" : "Persönlich",
"Contacts" : "Kontakte",
diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json
index b7751ee32a4..8440fb0ca50 100644
--- a/apps/dav/l10n/de_DE.json
+++ b/apps/dav/l10n/de_DE.json
@@ -24,19 +24,19 @@
"You deleted event {event} from calendar {calendar}" : "Sie haben das Ereignis {event} im Kalender {calendar} gelöscht",
"{actor} updated event {event} in calendar {calendar}" : "{actor} hat das Ereignis {event} im Kalender {calendar} aktualisiert",
"You updated event {event} in calendar {calendar}" : "Sie haben das Ereignis {event} im Kalender {calendar} aktualisiert",
- "{actor} created todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erstellt",
- "You created todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} erstellt",
- "{actor} deleted todo {todo} from list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} gelöscht",
- "You deleted todo {todo} from list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} gelöscht",
- "{actor} updated todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} aktualisiert",
- "You updated todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} aktualisiert",
- "{actor} solved todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erledigt",
- "You solved todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} erledigt",
- "{actor} reopened todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} wieder geöffnet",
- "You reopened todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} wieder geöffnet",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "You created todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} gelöscht",
+ "You deleted todo {todo} from list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} gelöscht",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "You updated todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "You solved todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "You reopened todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
- "A calendar <strong>event</strong> was modified" : "Ein <strong>Ereignis</strong> wurde bearbeitet",
- "A calendar <strong>todo</strong> was modified" : "Eine <strong>Aufgabe</strong> wurde bearbeitet",
+ "A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
+ "A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
"Personal" : "Persönlich",
"Contacts" : "Kontakte",
diff --git a/apps/dav/l10n/nb_NO.js b/apps/dav/l10n/nb_NO.js
index 7c620457436..364f305189d 100644
--- a/apps/dav/l10n/nb_NO.js
+++ b/apps/dav/l10n/nb_NO.js
@@ -1,6 +1,44 @@
OC.L10N.register(
"dav",
{
+ "Calendar" : "Kalender",
+ "Todos" : "Gjøremål",
+ "{actor} created calendar {calendar}" : "{actor} opprettet kalenderen {calendar}",
+ "You created calendar {calendar}" : "Du opprettet kalenderen {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} slettet kalenderen {calendar}",
+ "You deleted calendar {calendar}" : "Du slettet kalenderen {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} oppdaterte kalenderen {calendar}",
+ "You updated calendar {calendar}" : "Du oppdaterte kalenderen {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} delte kalenderen {calendar} med deg",
+ "You shared calendar {calendar} with {user}" : "Du delte kalenderen {calendar} med {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} delte kalenderen {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} fjernet delingen av kalenderen {calendar} med deg",
+ "You unshared calendar {calendar} from {user}" : "Du fjernet delingen av kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} fjernet delingen av kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} fjernet delingen av kalender {calendar} med seg selv",
+ "You shared calendar {calendar} with group {group}" : "Du delte kalender {calendar} med gruppe {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} delte kalenderen {calendar} med gruppe {group}",
+ "You unshared calendar {calendar} from group {group}" : "Du fjernet deling av kalenderen {calendar} med gruppe {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} fjernet deling av kalenderen {calendar} med gruppe {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} opprettet en hendelse {event} i kalenderen {calendar}",
+ "You created event {event} in calendar {calendar}" : "Du opprettet en hendelse {event} i kalenderen {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} slettet hendelsen {event} fra kalenderen {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Du slettet hendelsen {event} fra kalenderen {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} oppdaterte hendelse {event} i kalenderen {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Du oppdaterte hendelse {event} i kalenderen {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} opprettet en oppgave {todo} i listen {calendar}",
+ "You created todo {todo} in list {calendar}" : "Du opprettet en oppgave {todo} i listen {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} slettet en oppgave {todo} fra listen {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Du slettet en oppgave {todo} fra listen {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} oppdaterte en oppgave {todo} i listen {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Du oppdaterte en oppgave {todo} i listen {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} ferdigstilte oppgaven {todo} i listen {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Du ferdigstilte oppgaven {todo} i listen {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} gjenåpnet oppgaven {todo} i listen {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Du gjenåpnet oppgaven {todo} i listen {calendar}",
+ "A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> ble endret",
+ "A calendar <strong>event</strong> was modified" : "En kalender <strong>hendelse</strong> ble endret",
+ "A calendar <strong>todo</strong> was modified" : "En kalende <strong>gjøremål</strong> ble endret",
"Contact birthdays" : "Kontakters fødelsdag",
"Personal" : "Personlig",
"Contacts" : "Kontakter",
diff --git a/apps/dav/l10n/nb_NO.json b/apps/dav/l10n/nb_NO.json
index 5c305db045c..3725ba697fa 100644
--- a/apps/dav/l10n/nb_NO.json
+++ b/apps/dav/l10n/nb_NO.json
@@ -1,4 +1,42 @@
{ "translations": {
+ "Calendar" : "Kalender",
+ "Todos" : "Gjøremål",
+ "{actor} created calendar {calendar}" : "{actor} opprettet kalenderen {calendar}",
+ "You created calendar {calendar}" : "Du opprettet kalenderen {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} slettet kalenderen {calendar}",
+ "You deleted calendar {calendar}" : "Du slettet kalenderen {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} oppdaterte kalenderen {calendar}",
+ "You updated calendar {calendar}" : "Du oppdaterte kalenderen {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} delte kalenderen {calendar} med deg",
+ "You shared calendar {calendar} with {user}" : "Du delte kalenderen {calendar} med {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} delte kalenderen {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} fjernet delingen av kalenderen {calendar} med deg",
+ "You unshared calendar {calendar} from {user}" : "Du fjernet delingen av kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} fjernet delingen av kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} fjernet delingen av kalender {calendar} med seg selv",
+ "You shared calendar {calendar} with group {group}" : "Du delte kalender {calendar} med gruppe {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} delte kalenderen {calendar} med gruppe {group}",
+ "You unshared calendar {calendar} from group {group}" : "Du fjernet deling av kalenderen {calendar} med gruppe {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} fjernet deling av kalenderen {calendar} med gruppe {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} opprettet en hendelse {event} i kalenderen {calendar}",
+ "You created event {event} in calendar {calendar}" : "Du opprettet en hendelse {event} i kalenderen {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} slettet hendelsen {event} fra kalenderen {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Du slettet hendelsen {event} fra kalenderen {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} oppdaterte hendelse {event} i kalenderen {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Du oppdaterte hendelse {event} i kalenderen {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} opprettet en oppgave {todo} i listen {calendar}",
+ "You created todo {todo} in list {calendar}" : "Du opprettet en oppgave {todo} i listen {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} slettet en oppgave {todo} fra listen {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Du slettet en oppgave {todo} fra listen {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} oppdaterte en oppgave {todo} i listen {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Du oppdaterte en oppgave {todo} i listen {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} ferdigstilte oppgaven {todo} i listen {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Du ferdigstilte oppgaven {todo} i listen {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} gjenåpnet oppgaven {todo} i listen {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Du gjenåpnet oppgaven {todo} i listen {calendar}",
+ "A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> ble endret",
+ "A calendar <strong>event</strong> was modified" : "En kalender <strong>hendelse</strong> ble endret",
+ "A calendar <strong>todo</strong> was modified" : "En kalende <strong>gjøremål</strong> ble endret",
"Contact birthdays" : "Kontakters fødelsdag",
"Personal" : "Personlig",
"Contacts" : "Kontakter",
diff --git a/apps/dav/l10n/ru.js b/apps/dav/l10n/ru.js
index 5cda18af266..e6749e7fb1b 100644
--- a/apps/dav/l10n/ru.js
+++ b/apps/dav/l10n/ru.js
@@ -1,10 +1,48 @@
OC.L10N.register(
"dav",
{
+ "Calendar" : "Календарь",
+ "Todos" : "Задачи",
+ "{actor} created calendar {calendar}" : "{actor} создал календарь {calendar}",
+ "You created calendar {calendar}" : "Вы создали календарь {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} удалил календарь {calendar}",
+ "You deleted calendar {calendar}" : "Вы удалили календарь {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} обновил календарь {calendar}",
+ "You updated calendar {calendar}" : "Вы обновили календарь {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} поделился календарем {calendar} с вами",
+ "You shared calendar {calendar} with {user}" : "Вы поделились календарем {calendar} с {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} поделился календарем {calendar} с {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} закрыл для вас доступ к календарю {calendar}",
+ "You unshared calendar {calendar} from {user}" : "Вы закрыли доступ к календарю {calendar} для {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} закрыл доступ к календарю {calendar} для {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} закрыл доступ к календарю {calendar} для себя",
+ "You shared calendar {calendar} with group {group}" : "Вы поделились календарем {calendar} с группой {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} поделился календарем {calendar} с группой {group}",
+ "You unshared calendar {calendar} from group {group}" : "Вы закрыли доступ к календарю {calendar} для группы {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} закрыл доступ к календарю {calendar} для группы {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} создал событие {event} в календаре {calendar}",
+ "You created event {event} in calendar {calendar}" : "Вы создали событие {event} в календаре {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} удалил событие {event} из календаря {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Вы удалили событие {event} из календаря {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} обновил событие {event} в календаре {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Вы обновили событие {event} в календаре {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} создал задачу {todo} в списке {calendar}",
+ "You created todo {todo} in list {calendar}" : "Вы создали задачу {todo} в списке {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} удалил задачу {todo} из списка {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Вы удалили задачу {todo} из списка {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} обновил задачу {todo} из списка {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Вы обновили задачу {todo} из списка {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} завершил задачу {todo} из списка {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Вы завершили задачу {todo} из списка {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} повторно открыл задачу {todo} из списка {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Вы повторно открыли задачу {todo} из списка {calendar}",
+ "A <strong>calendar</strong> was modified" : "<strong>Календарь</strong> был изменен",
+ "A calendar <strong>event</strong> was modified" : "<strong>Событие</strong> календаря была изменена",
+ "A calendar <strong>todo</strong> was modified" : "<strong>Задача</strong> календаря была изменена",
"Contact birthdays" : "Дни рождения контакта",
"Personal" : "Личное",
"Contacts" : "Контакты",
- "Technical details" : "Технические характеристики",
+ "Technical details" : "Технические подробности",
"Remote Address: %s" : "Удаленный адрес: %s",
"Request ID: %s" : "ID запроса: %s"
},
diff --git a/apps/dav/l10n/ru.json b/apps/dav/l10n/ru.json
index bdee4d3cca9..538be85207e 100644
--- a/apps/dav/l10n/ru.json
+++ b/apps/dav/l10n/ru.json
@@ -1,8 +1,46 @@
{ "translations": {
+ "Calendar" : "Календарь",
+ "Todos" : "Задачи",
+ "{actor} created calendar {calendar}" : "{actor} создал календарь {calendar}",
+ "You created calendar {calendar}" : "Вы создали календарь {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} удалил календарь {calendar}",
+ "You deleted calendar {calendar}" : "Вы удалили календарь {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} обновил календарь {calendar}",
+ "You updated calendar {calendar}" : "Вы обновили календарь {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} поделился календарем {calendar} с вами",
+ "You shared calendar {calendar} with {user}" : "Вы поделились календарем {calendar} с {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} поделился календарем {calendar} с {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} закрыл для вас доступ к календарю {calendar}",
+ "You unshared calendar {calendar} from {user}" : "Вы закрыли доступ к календарю {calendar} для {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} закрыл доступ к календарю {calendar} для {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} закрыл доступ к календарю {calendar} для себя",
+ "You shared calendar {calendar} with group {group}" : "Вы поделились календарем {calendar} с группой {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} поделился календарем {calendar} с группой {group}",
+ "You unshared calendar {calendar} from group {group}" : "Вы закрыли доступ к календарю {calendar} для группы {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} закрыл доступ к календарю {calendar} для группы {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} создал событие {event} в календаре {calendar}",
+ "You created event {event} in calendar {calendar}" : "Вы создали событие {event} в календаре {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} удалил событие {event} из календаря {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Вы удалили событие {event} из календаря {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} обновил событие {event} в календаре {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Вы обновили событие {event} в календаре {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} создал задачу {todo} в списке {calendar}",
+ "You created todo {todo} in list {calendar}" : "Вы создали задачу {todo} в списке {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} удалил задачу {todo} из списка {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Вы удалили задачу {todo} из списка {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} обновил задачу {todo} из списка {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Вы обновили задачу {todo} из списка {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} завершил задачу {todo} из списка {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Вы завершили задачу {todo} из списка {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} повторно открыл задачу {todo} из списка {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Вы повторно открыли задачу {todo} из списка {calendar}",
+ "A <strong>calendar</strong> was modified" : "<strong>Календарь</strong> был изменен",
+ "A calendar <strong>event</strong> was modified" : "<strong>Событие</strong> календаря была изменена",
+ "A calendar <strong>todo</strong> was modified" : "<strong>Задача</strong> календаря была изменена",
"Contact birthdays" : "Дни рождения контакта",
"Personal" : "Личное",
"Contacts" : "Контакты",
- "Technical details" : "Технические характеристики",
+ "Technical details" : "Технические подробности",
"Remote Address: %s" : "Удаленный адрес: %s",
"Request ID: %s" : "ID запроса: %s"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
diff --git a/apps/dav/l10n/sq.js b/apps/dav/l10n/sq.js
new file mode 100644
index 00000000000..e84a2e2354f
--- /dev/null
+++ b/apps/dav/l10n/sq.js
@@ -0,0 +1,40 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "Kalendar",
+ "{actor} created calendar {calendar}" : "{actor} krijoj kalendarin {calendar}",
+ "You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
+ "You deleted calendar {calendar}" : "Ju fshit kalendarin {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} përditësoi kalendarin {calendar}",
+ "You updated calendar {calendar}" : "Ju përditësuat kalendarin {calendar}",
+ "{actor} shared calendar {calendar} with you" : " {actor} ndau kalendarin {calendar} me ju",
+ "You shared calendar {calendar} with {user}" : "Ju ndat kalendarin {calendar} me {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} ndau kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ndaloj së ndari kalendarin {calendar} me ju",
+ "You unshared calendar {calendar} from {user}" : "Ju ndaluat së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} ndaloj së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} ndaloj së ndari kalendarin {calendar} me veten",
+ "You shared calendar {calendar} with group {group}" : "Ju ndat kalendarin {calendar} me grupin {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} ndau kalendarin {calendar} me grupin {group}",
+ "You unshared calendar {calendar} from group {group}" : "Ju ndaluat së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} ndaloj së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} krijoj eventin {event} në kalendarin {calendar}",
+ "You created event {event} in calendar {calendar}" : "Ju krijuat eventin {event} në kalendarin {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} fshiu eventin {event} nga kalendari {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Ju fshit eventin {event} nga kalndari {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} përditsoi eventin {event} në kalndarin {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Ju përditësuat eventin {event} në kalndarin {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} u krijua todo{todo} në listën {calendar}",
+ "You created todo {todo} in list {calendar}" : "Ju krijuat todo {todo} në listën {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} u fshi todo{ todo} nga lista{calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} u përditësua todo{todo} në listën{calendar}",
+ "A <strong>calendar</strong> was modified" : "Një <strong>kalendar</strong> u modifikua",
+ "A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
+ "Personal" : "Personale",
+ "Contacts" : "Kontaktet",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa remote: %s",
+ "Request ID: %s" : "ID e kërkesës: %s"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/sq.json b/apps/dav/l10n/sq.json
new file mode 100644
index 00000000000..922e7122069
--- /dev/null
+++ b/apps/dav/l10n/sq.json
@@ -0,0 +1,38 @@
+{ "translations": {
+ "Calendar" : "Kalendar",
+ "{actor} created calendar {calendar}" : "{actor} krijoj kalendarin {calendar}",
+ "You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
+ "You deleted calendar {calendar}" : "Ju fshit kalendarin {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} përditësoi kalendarin {calendar}",
+ "You updated calendar {calendar}" : "Ju përditësuat kalendarin {calendar}",
+ "{actor} shared calendar {calendar} with you" : " {actor} ndau kalendarin {calendar} me ju",
+ "You shared calendar {calendar} with {user}" : "Ju ndat kalendarin {calendar} me {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} ndau kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ndaloj së ndari kalendarin {calendar} me ju",
+ "You unshared calendar {calendar} from {user}" : "Ju ndaluat së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} ndaloj së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} ndaloj së ndari kalendarin {calendar} me veten",
+ "You shared calendar {calendar} with group {group}" : "Ju ndat kalendarin {calendar} me grupin {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} ndau kalendarin {calendar} me grupin {group}",
+ "You unshared calendar {calendar} from group {group}" : "Ju ndaluat së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} ndaloj së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} krijoj eventin {event} në kalendarin {calendar}",
+ "You created event {event} in calendar {calendar}" : "Ju krijuat eventin {event} në kalendarin {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} fshiu eventin {event} nga kalendari {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Ju fshit eventin {event} nga kalndari {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} përditsoi eventin {event} në kalndarin {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Ju përditësuat eventin {event} në kalndarin {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} u krijua todo{todo} në listën {calendar}",
+ "You created todo {todo} in list {calendar}" : "Ju krijuat todo {todo} në listën {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} u fshi todo{ todo} nga lista{calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} u përditësua todo{todo} në listën{calendar}",
+ "A <strong>calendar</strong> was modified" : "Një <strong>kalendar</strong> u modifikua",
+ "A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
+ "Personal" : "Personale",
+ "Contacts" : "Kontaktet",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa remote: %s",
+ "Request ID: %s" : "ID e kërkesës: %s"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dav/l10n/sv.js b/apps/dav/l10n/sv.js
index 07a5521092d..25cd0d797c8 100644
--- a/apps/dav/l10n/sv.js
+++ b/apps/dav/l10n/sv.js
@@ -1,11 +1,49 @@
OC.L10N.register(
"dav",
{
- "Contact birthdays" : "Kontaktfödelsedagar",
- "Personal" : "Personligt",
+ "Calendar" : "Kalender",
+ "Todos" : "Uppgifter",
+ "{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
+ "You created calendar {calendar}" : "Du skapade kalender {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
+ "You deleted calendar {calendar}" : "Du raderade kalender {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} uppdaterade kalender {calendar}",
+ "You updated calendar {calendar}" : "Du uppdaterade kalender {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} delade kalender {calendar} med dig",
+ "You shared calendar {calendar} with {user}" : "Du delade kalender {calendar} med {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} delade kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} slutade dela kalender {calendar} med dig",
+ "You unshared calendar {calendar} from {user}" : "Du slutade dela kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} slutade dela kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} slutade dela kalender {calendar} med sig själv",
+ "You shared calendar {calendar} with group {group}" : "Du delade kalender {calendar} med grupp {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} delade kalender {calendar} med grupp {group}",
+ "You unshared calendar {calendar} from group {group}" : "Du slutade dela kalender {calendar} med gruppen {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} slutade dela kalender {calendar} med gruppen {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} skapade händelse {event} i kalender {calendar}",
+ "You created event {event} in calendar {calendar}" : "Du skapade händelse {event} i kalender {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} raderade händelse {event} från kalender {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Du raderade händelse {event} från kalender {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} uppdaterade händelse {event} i kalender {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} i kalender {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} skapade uppgift {todo} i listan {calendar}",
+ "You created todo {todo} in list {calendar}" : "Du skapade uppgift {todo} i listan {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade uppgift {todo} från listan {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Du raderade uppgift {todo} från listan {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade uppgift {todo} i listan {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Du uppdaterade uppgift {todo} i listan {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} löste uppgift {todo} i listan {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Du löste uppgift {todo} i listan {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog uppgift {todo} i listan {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Du återupptog uppgift {todo} i listan {calendar}",
+ "A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> modifierades",
+ "A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
+ "A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
+ "Contact birthdays" : "Födelsedagar",
+ "Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
- "Remote Address: %s" : "Fjärradress: %s",
+ "Remote Address: %s" : "Extern adress: %s",
"Request ID: %s" : "Begär ID: %s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/sv.json b/apps/dav/l10n/sv.json
index 361e3131470..ba76ca55329 100644
--- a/apps/dav/l10n/sv.json
+++ b/apps/dav/l10n/sv.json
@@ -1,9 +1,47 @@
{ "translations": {
- "Contact birthdays" : "Kontaktfödelsedagar",
- "Personal" : "Personligt",
+ "Calendar" : "Kalender",
+ "Todos" : "Uppgifter",
+ "{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
+ "You created calendar {calendar}" : "Du skapade kalender {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
+ "You deleted calendar {calendar}" : "Du raderade kalender {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} uppdaterade kalender {calendar}",
+ "You updated calendar {calendar}" : "Du uppdaterade kalender {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} delade kalender {calendar} med dig",
+ "You shared calendar {calendar} with {user}" : "Du delade kalender {calendar} med {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} delade kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} slutade dela kalender {calendar} med dig",
+ "You unshared calendar {calendar} from {user}" : "Du slutade dela kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} slutade dela kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} slutade dela kalender {calendar} med sig själv",
+ "You shared calendar {calendar} with group {group}" : "Du delade kalender {calendar} med grupp {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} delade kalender {calendar} med grupp {group}",
+ "You unshared calendar {calendar} from group {group}" : "Du slutade dela kalender {calendar} med gruppen {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} slutade dela kalender {calendar} med gruppen {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} skapade händelse {event} i kalender {calendar}",
+ "You created event {event} in calendar {calendar}" : "Du skapade händelse {event} i kalender {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} raderade händelse {event} från kalender {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Du raderade händelse {event} från kalender {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} uppdaterade händelse {event} i kalender {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} i kalender {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} skapade uppgift {todo} i listan {calendar}",
+ "You created todo {todo} in list {calendar}" : "Du skapade uppgift {todo} i listan {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade uppgift {todo} från listan {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Du raderade uppgift {todo} från listan {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade uppgift {todo} i listan {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Du uppdaterade uppgift {todo} i listan {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} löste uppgift {todo} i listan {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Du löste uppgift {todo} i listan {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog uppgift {todo} i listan {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Du återupptog uppgift {todo} i listan {calendar}",
+ "A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> modifierades",
+ "A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
+ "A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
+ "Contact birthdays" : "Födelsedagar",
+ "Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
- "Remote Address: %s" : "Fjärradress: %s",
+ "Remote Address: %s" : "Extern adress: %s",
"Request ID: %s" : "Begär ID: %s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/lib/CalDAV/Activity/Backend.php b/apps/dav/lib/CalDAV/Activity/Backend.php
index 953fdcea832..f8cc82407fd 100644
--- a/apps/dav/lib/CalDAV/Activity/Backend.php
+++ b/apps/dav/lib/CalDAV/Activity/Backend.php
@@ -103,7 +103,7 @@ class Backend {
}
$principal = explode('/', $calendarData['principaluri']);
- $owner = $principal[2];
+ $owner = array_pop($principal);
$currentUser = $this->userSession->getUser();
if ($currentUser instanceof IUser) {
@@ -369,7 +369,7 @@ class Backend {
}
$principal = explode('/', $calendarData['principaluri']);
- $owner = $principal[2];
+ $owner = array_pop($principal);
$currentUser = $this->userSession->getUser();
if ($currentUser instanceof IUser) {
diff --git a/apps/dav/lib/CalDAV/Activity/Setting/Todo.php b/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
index 0c8215f4843..234774bfea4 100644
--- a/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
+++ b/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
@@ -42,7 +42,7 @@ class Todo implements ISetting {
* @since 11.0.0
*/
public function getIdentifier() {
- return 'calendar_todos';
+ return 'calendar_todo';
}
/**
diff --git a/apps/dav/lib/CalDAV/BirthdayService.php b/apps/dav/lib/CalDAV/BirthdayService.php
index 104eec6b496..702b74bf1b3 100644
--- a/apps/dav/lib/CalDAV/BirthdayService.php
+++ b/apps/dav/lib/CalDAV/BirthdayService.php
@@ -30,6 +30,11 @@ use Exception;
use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\DAV\GroupPrincipalBackend;
use Sabre\VObject\Component\VCalendar;
+use Sabre\VObject\Component\VCard;
+use Sabre\VObject\DateTimeParser;
+use Sabre\VObject\Document;
+use Sabre\VObject\InvalidDataException;
+use Sabre\VObject\Property\VCard\DateAndOrTime;
use Sabre\VObject\Reader;
class BirthdayService {
@@ -129,6 +134,12 @@ class BirthdayService {
}
try {
$doc = Reader::read($cardData);
+ // We're always converting to vCard 4.0 so we can rely on the
+ // VCardConverter handling the X-APPLE-OMIT-YEAR property for us.
+ if (!$doc instanceof VCard) {
+ return null;
+ }
+ $doc = $doc->convert(Document::VCARD40);
} catch (Exception $e) {
return null;
}
@@ -136,21 +147,43 @@ class BirthdayService {
if (!isset($doc->{$dateField})) {
return null;
}
+ if (!isset($doc->FN)) {
+ return null;
+ }
$birthday = $doc->{$dateField};
if (!(string)$birthday) {
return null;
}
- $title = str_replace('{name}',
- strtr((string)$doc->FN, array('\,' => ',', '\;' => ';')),
- '{name}'
- );
+ // Skip if the BDAY property is not of the right type.
+ if (!$birthday instanceof DateAndOrTime) {
+ return null;
+ }
+
+ // Skip if we can't parse the BDAY value.
+ try {
+ $dateParts = DateTimeParser::parseVCardDateTime($birthday->getValue());
+ } catch (InvalidDataException $e) {
+ return null;
+ }
+
+ $unknownYear = false;
+ if (!$dateParts['year']) {
+ $birthday = '1900-' . $dateParts['month'] . '-' . $dateParts['date'];
+
+ $unknownYear = true;
+ }
+
try {
$date = new \DateTime($birthday);
} catch (Exception $e) {
return null;
}
-
- $summary = $title . ' (' . $summarySymbol . $date->format('Y') . ')';
+ if ($unknownYear) {
+ $summary = $doc->FN->getValue() . ' ' . $summarySymbol;
+ } else {
+ $year = (int)$date->format('Y');
+ $summary = $doc->FN->getValue() . " ($summarySymbol$year)";
+ }
$vCal = new VCalendar();
$vCal->VERSION = '2.0';
$vEvent = $vCal->createComponent('VEVENT');
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index d77c761a2cf..dfef3111324 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -131,6 +131,9 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
/** @var EventDispatcherInterface */
private $dispatcher;
+ /** @var bool */
+ private $legacyEndpoint;
+
/**
* CalDavBackend constructor.
*
@@ -139,18 +142,21 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @param IUserManager $userManager
* @param ISecureRandom $random
* @param EventDispatcherInterface $dispatcher
+ * @param bool $legacyEndpoint
*/
public function __construct(IDBConnection $db,
Principal $principalBackend,
IUserManager $userManager,
ISecureRandom $random,
- EventDispatcherInterface $dispatcher) {
+ EventDispatcherInterface $dispatcher,
+ $legacyEndpoint = false) {
$this->db = $db;
$this->principalBackend = $principalBackend;
$this->userManager = $userManager;
$this->sharingBackend = new Backend($this->db, $principalBackend, 'calendar');
$this->random = $random;
$this->dispatcher = $dispatcher;
+ $this->legacyEndpoint = $legacyEndpoint;
}
/**
@@ -230,12 +236,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['uri'],
- 'principaluri' => $this->convertPrincipal($row['principaluri'], false),
+ 'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
- '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $principalUri,
+ '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->convertPrincipal($principalUri, !$this->legacyEndpoint),
];
foreach($this->propertyMap as $xmlName=>$dbName) {
@@ -282,12 +288,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $uri,
- 'principaluri' => $principalUri,
+ 'principaluri' => $this->convertPrincipal($principalUri, !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
- '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
+ '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ,
];
@@ -328,7 +334,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['uri'],
- 'principaluri' => $this->convertPrincipal($row['principaluri'], false),
+ 'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
@@ -392,12 +398,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['publicuri'],
- 'principaluri' => $row['principaluri'],
+ 'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
- '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
+ '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->convertPrincipal($row['principaluri'], $this->legacyEndpoint),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ,
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}public' => (int)$row['access'] === self::ACCESS_PUBLIC,
];
@@ -456,12 +462,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['publicuri'],
- 'principaluri' => $row['principaluri'],
+ 'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
- '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
+ '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ,
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}public' => (int)$row['access'] === self::ACCESS_PUBLIC,
];
@@ -510,7 +516,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['uri'],
- 'principaluri' => $row['principaluri'],
+ 'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
@@ -554,7 +560,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['uri'],
- 'principaluri' => $row['principaluri'],
+ 'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
@@ -581,7 +587,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
*/
function createCalendar($principalUri, $calendarUri, array $properties) {
$values = [
- 'principaluri' => $principalUri,
+ 'principaluri' => $this->convertPrincipal($principalUri, true),
'uri' => $calendarUri,
'synctoken' => 1,
'transparent' => 0,
diff --git a/apps/dav/lib/CalDAV/CalendarObject.php b/apps/dav/lib/CalDAV/CalendarObject.php
index 6d429fa6bf5..c5dc50650af 100644
--- a/apps/dav/lib/CalDAV/CalendarObject.php
+++ b/apps/dav/lib/CalDAV/CalendarObject.php
@@ -1,8 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2017, Georg Ehrke
*
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@@ -42,7 +44,11 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject {
}
private function isShared() {
- return isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal']);
+ if (!isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal'])) {
+ return false;
+ }
+
+ return $this->calendarInfo['{http://owncloud.org/ns}owner-principal'] !== $this->calendarInfo['principaluri'];
}
/**
diff --git a/apps/dav/lib/Connector/LegacyDAVACL.php b/apps/dav/lib/Connector/LegacyDAVACL.php
index 83b08ec44fb..d5185ecd03b 100644
--- a/apps/dav/lib/Connector/LegacyDAVACL.php
+++ b/apps/dav/lib/Connector/LegacyDAVACL.php
@@ -33,24 +33,9 @@ use Sabre\DAVACL\Xml\Property\Principal;
class LegacyDAVACL extends DavAclPlugin {
/**
- * Converts the v1 principal `principal/<username>` to the new v2
- * `principal/users/<username>` which is required for permission checks
- *
* @inheritdoc
*/
- function getCurrentUserPrincipal() {
- $principalV1 = parent::getCurrentUserPrincipal();
- if (is_null($principalV1)) {
- return $principalV1;
- }
- return $this->convertPrincipal($principalV1, true);
- }
-
-
- /**
- * @inheritdoc
- */
- function getCurrentUserPrincipals() {
+ public function getCurrentUserPrincipals() {
$principalV2 = $this->getCurrentUserPrincipal();
if (is_null($principalV2)) return [];
@@ -73,7 +58,7 @@ class LegacyDAVACL extends DavAclPlugin {
return "principals/$name";
}
- function propFind(PropFind $propFind, INode $node) {
+ public function propFind(PropFind $propFind, INode $node) {
/* Overload current-user-principal */
$propFind->handle('{DAV:}current-user-principal', function () {
if ($url = parent::getCurrentUserPrincipal()) {
diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
index 59b326243ee..5e401b88481 100644
--- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
@@ -247,8 +247,10 @@ class FilesPlugin extends ServerPlugin {
$node = $this->tree->getNodeForPath($request->getPath());
if (!($node instanceof IFile)) return;
- // adds a 'Content-Disposition: attachment' header
- if ($this->downloadAttachment) {
+ // adds a 'Content-Disposition: attachment' header in case no disposition
+ // header has been set before
+ if ($this->downloadAttachment &&
+ $response->getHeader('Content-Disposition') === null) {
$filename = $node->getName();
if ($this->request->isUserAgent(
[
@@ -326,6 +328,9 @@ class FilesPlugin extends ServerPlugin {
$propFind->handle(self::HAS_PREVIEW_PROPERTYNAME, function () use ($node) {
return json_encode($this->previewManager->isAvailable($node->getFileInfo()));
});
+ $propFind->handle(self::SIZE_PROPERTYNAME, function() use ($node) {
+ return $node->getSize();
+ });
}
if ($node instanceof \OCA\DAV\Connector\Sabre\Node) {
diff --git a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
index bc0c1c2f603..81c082b9105 100644
--- a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
@@ -24,9 +24,7 @@
namespace OCA\DAV\Connector\Sabre;
use OC\Files\View;
-use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\Exception\PreconditionFailed;
-use Sabre\DAV\Exception\ReportNotSupported;
use Sabre\DAV\Exception\BadRequest;
use Sabre\DAV\ServerPlugin;
use Sabre\DAV\Tree;
@@ -105,7 +103,7 @@ class FilesReportPlugin extends ServerPlugin {
* @param ITagManager $fileTagger manager for private tags
* @param IUserSession $userSession
* @param IGroupManager $groupManager
- * @param Folder $userfolder
+ * @param Folder $userFolder
*/
public function __construct(Tree $tree,
View $view,
@@ -161,11 +159,12 @@ class FilesReportPlugin extends ServerPlugin {
* REPORT operations to look for files
*
* @param string $reportName
- * @param [] $report
+ * @param $report
* @param string $uri
* @return bool
- * @throws NotFound
- * @throws ReportNotSupported
+ * @throws BadRequest
+ * @throws PreconditionFailed
+ * @internal param $ [] $report
*/
public function onReport($reportName, $report, $uri) {
$reportTargetNode = $this->server->tree->getNodeForPath($uri);
@@ -232,7 +231,6 @@ class FilesReportPlugin extends ServerPlugin {
private function getFilesBaseUri($uri, $subPath) {
$uri = trim($uri, '/');
$subPath = trim($subPath, '/');
- $filesUri = '';
if (empty($subPath)) {
$filesUri = $uri;
} else {
diff --git a/apps/dav/lib/Connector/Sabre/TagsPlugin.php b/apps/dav/lib/Connector/Sabre/TagsPlugin.php
index ef6bece58bc..59e4ab4546d 100644
--- a/apps/dav/lib/Connector/Sabre/TagsPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/TagsPlugin.php
@@ -250,7 +250,11 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin
if (is_null($isFav)) {
list(, $isFav) = $this->getTagsAndFav($node->getId());
}
- return $isFav;
+ if ($isFav) {
+ return 1;
+ } else {
+ return 0;
+ }
});
}
diff --git a/apps/dav/lib/Files/RootCollection.php b/apps/dav/lib/Files/RootCollection.php
index 345015530e2..c73d7c175ce 100644
--- a/apps/dav/lib/Files/RootCollection.php
+++ b/apps/dav/lib/Files/RootCollection.php
@@ -21,6 +21,7 @@
*/
namespace OCA\DAV\Files;
+use Sabre\DAV\INode;
use Sabre\DAVACL\AbstractPrincipalCollection;
use Sabre\HTTP\URLUtil;
use Sabre\DAV\SimpleCollection;
diff --git a/apps/dav/lib/Migration/ValueFix.php b/apps/dav/lib/Migration/ValueFix.php
new file mode 100644
index 00000000000..2ad043b409d
--- /dev/null
+++ b/apps/dav/lib/Migration/ValueFix.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\DAV\Migration;
+
+use OC\BackgroundJob\QueuedJob;
+use OCA\DAV\CalDAV\CalDavBackend;
+use OCP\ILogger;
+use Sabre\VObject\InvalidDataException;
+
+class ValueFix extends QueuedJob {
+
+ /** @var CalDavBackend */
+ private $calDavBackend;
+
+ /** @var ILogger */
+ private $logger;
+
+ public function __construct(CalDavBackend $calDavBackend, ILogger $logger) {
+ $this->calDavBackend = $calDavBackend;
+ $this->logger = $logger;
+ }
+
+ public function run($argument) {
+ $user = $argument['user'];
+
+ $pattern = '/;VALUE=:/';
+ $principal = 'principals/users/' . $user;
+ $calendars = $this->calDavBackend->getCalendarsForUser($principal);
+ foreach ($calendars as $calendar) {
+ $objects = $this->calDavBackend->getCalendarObjects($calendar['id']);
+ foreach ($objects as $object) {
+ $calObject = $this->calDavBackend->getCalendarObject($calendar['id'], $object['uri']);
+ $data = preg_replace($pattern, ':', $calObject['calendardata']);
+ if ($data !== $calObject['calendardata']) {
+ try {
+ $this->calDavBackend->getDenormalizedData($data);
+ } catch (InvalidDataException $e) {
+ $this->logger->info('Calendar object for calendar {cal} with uri {uri} still invalid', [
+ 'app'=> 'dav',
+ 'cal' => $calendar['id'],
+ 'uri' => $object['uri'],
+ ]);
+ continue;
+ }
+ $this->calDavBackend->updateCalendarObject($calendar['id'], $object['uri'], $data);
+ }
+ }
+ }
+ }
+
+}
diff --git a/apps/dav/lib/Migration/ValueFixInsert.php b/apps/dav/lib/Migration/ValueFixInsert.php
new file mode 100644
index 00000000000..25917691b20
--- /dev/null
+++ b/apps/dav/lib/Migration/ValueFixInsert.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\DAV\Migration;
+
+use OCP\BackgroundJob\IJobList;
+use OCP\IConfig;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class ValueFixInsert implements IRepairStep {
+
+ /** @var IUserManager */
+ private $userManager;
+
+ /** @var IJobList */
+ private $jobList;
+
+ /** @var IConfig */
+ private $config;
+
+ public function __construct(IUserManager $userManager,
+ IJobList $jobList,
+ IConfig $config) {
+ $this->userManager = $userManager;
+ $this->jobList = $jobList;
+ $this->config = $config;
+ }
+
+ public function getName() {
+ return 'Insert ValueFix background job for each user';
+ }
+
+ public function run(IOutput $output) {
+ if ($this->config->getAppValue('dav', self::class . '_ran', 'false') !== 'true') {
+ $this->userManager->callForSeenUsers(function (IUser $user) {
+ $this->jobList->add(ValueFix::class, ['user' => $user->getUID()]);
+ });
+ $this->config->setAppValue('dav', self::class . '_ran', 'true');
+ }
+ }
+}
diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php
index 1205d018241..79c4301a8d8 100644
--- a/apps/dav/lib/Server.php
+++ b/apps/dav/lib/Server.php
@@ -33,11 +33,14 @@ use OCA\DAV\CardDAV\ImageExportPlugin;
use OCA\DAV\Comments\CommentsPlugin;
use OCA\DAV\Connector\Sabre\Auth;
use OCA\DAV\Connector\Sabre\BlockLegacyClientPlugin;
+use OCA\DAV\Connector\Sabre\CommentPropertiesPlugin;
use OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin;
use OCA\DAV\Connector\Sabre\DavAclPlugin;
use OCA\DAV\Connector\Sabre\DummyGetResponsePlugin;
use OCA\DAV\Connector\Sabre\FakeLockerPlugin;
use OCA\DAV\Connector\Sabre\FilesPlugin;
+use OCA\DAV\Connector\Sabre\FilesReportPlugin;
+use OCA\DAV\Connector\Sabre\SharesPlugin;
use OCA\DAV\DAV\PublicAuth;
use OCA\DAV\Connector\Sabre\QuotaPlugin;
use OCA\DAV\Files\BrowserErrorPagePlugin;
@@ -85,7 +88,6 @@ class Server {
$this->server->addPlugin(new BlockLegacyClientPlugin(\OC::$server->getConfig()));
$authPlugin = new Plugin();
- $authPlugin->addBackend($authBackend);
$authPlugin->addBackend(new PublicAuth());
$this->server->addPlugin($authPlugin);
@@ -166,7 +168,7 @@ class Server {
// custom properties plugin must be the last one
$userSession = \OC::$server->getUserSession();
$user = $userSession->getUser();
- if (!is_null($user)) {
+ if ($user !== null) {
$view = \OC\Files\Filesystem::getView();
$this->server->addPlugin(
new FilesPlugin(
@@ -188,9 +190,10 @@ class Server {
)
)
);
- $this->server->addPlugin(
- new QuotaPlugin($view)
- );
+ if ($view !== null) {
+ $this->server->addPlugin(
+ new QuotaPlugin($view));
+ }
$this->server->addPlugin(
new TagsPlugin(
$this->server->tree, \OC::$server->getTagManager()
@@ -198,28 +201,29 @@ class Server {
);
// TODO: switch to LazyUserFolder
$userFolder = \OC::$server->getUserFolder();
- $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\SharesPlugin(
+ $this->server->addPlugin(new SharesPlugin(
$this->server->tree,
$userSession,
$userFolder,
\OC::$server->getShareManager()
));
- $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\CommentPropertiesPlugin(
+ $this->server->addPlugin(new CommentPropertiesPlugin(
\OC::$server->getCommentsManager(),
$userSession
));
- $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\FilesReportPlugin(
- $this->server->tree,
- $view,
- \OC::$server->getSystemTagManager(),
- \OC::$server->getSystemTagObjectMapper(),
- \OC::$server->getTagManager(),
- $userSession,
- \OC::$server->getGroupManager(),
- $userFolder
- ));
+ if ($view !== null) {
+ $this->server->addPlugin(new FilesReportPlugin(
+ $this->server->tree,
+ $view,
+ \OC::$server->getSystemTagManager(),
+ \OC::$server->getSystemTagObjectMapper(),
+ \OC::$server->getTagManager(),
+ $userSession,
+ \OC::$server->getGroupManager(),
+ $userFolder
+ ));
+ }
}
- $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin());
});
}
diff --git a/apps/dav/lib/SystemTag/SystemTagNode.php b/apps/dav/lib/SystemTag/SystemTagNode.php
index 36fddcd8240..bd21082f783 100644
--- a/apps/dav/lib/SystemTag/SystemTagNode.php
+++ b/apps/dav/lib/SystemTag/SystemTagNode.php
@@ -157,12 +157,13 @@ class SystemTagNode implements \Sabre\DAV\INode {
public function delete() {
try {
+ if (!$this->isAdmin) {
+ throw new Forbidden('No permission to delete tag ' . $this->tag->getId());
+ }
+
if (!$this->tagManager->canUserSeeTag($this->tag, $this->user)) {
throw new NotFound('Tag with id ' . $this->tag->getId() . ' not found');
}
- if (!$this->tagManager->canUserAssignTag($this->tag, $this->user)) {
- throw new Forbidden('No permission to delete tag ' . $this->tag->getId());
- }
$this->tagManager->deleteTags($this->tag->getId());
} catch (TagNotFoundException $e) {
diff --git a/apps/dav/tests/travis/caldav/script.sh b/apps/dav/tests/travis/caldav/script-new-endpoint.sh
index 636235349c5..c9bb7307c7c 100644
--- a/apps/dav/tests/travis/caldav/script.sh
+++ b/apps/dav/tests/travis/caldav/script-new-endpoint.sh
@@ -2,6 +2,9 @@
SCRIPT=`realpath $0`
SCRIPTPATH=`dirname $SCRIPT`
+# Move the endpoint to the serverinfo file
+cp "$SCRIPTPATH/../caldavtest/serverinfo-new-endpoint.xml" "$SCRIPTPATH/../caldavtest/serverinfo.xml"
+
# start the server
php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
diff --git a/apps/dav/tests/travis/caldav/script-old-endpoint.sh b/apps/dav/tests/travis/caldav/script-old-endpoint.sh
new file mode 100644
index 00000000000..6e08f27310b
--- /dev/null
+++ b/apps/dav/tests/travis/caldav/script-old-endpoint.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+# Move the endpoint to the serverinfo file
+cp "$SCRIPTPATH/../caldavtest/serverinfo-old-caldav-endpoint.xml" "$SCRIPTPATH/../caldavtest/serverinfo.xml"
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
+
+sleep 30
+
+# run the tests
+cd "$SCRIPTPATH/CalDAVTester"
+PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail --basedir "$SCRIPTPATH/../caldavtest/" -o cdt.txt \
+ "CalDAV/current-user-principal.xml" \
+ "CalDAV/sync-report.xml"
+
+RESULT=$?
+
+tail "$/../../../../../data-autotest/nextcloud.log"
+
+exit $RESULT
diff --git a/apps/dav/tests/travis/caldavtest/serverinfo.xml b/apps/dav/tests/travis/caldavtest/serverinfo-new-endpoint.xml
index c3ba99ee03d..c3ba99ee03d 100644
--- a/apps/dav/tests/travis/caldavtest/serverinfo.xml
+++ b/apps/dav/tests/travis/caldavtest/serverinfo-new-endpoint.xml
diff --git a/apps/dav/tests/travis/caldavtest/serverinfo-old-caldav-endpoint.xml b/apps/dav/tests/travis/caldavtest/serverinfo-old-caldav-endpoint.xml
new file mode 100644
index 00000000000..8ac822d8e4e
--- /dev/null
+++ b/apps/dav/tests/travis/caldavtest/serverinfo-old-caldav-endpoint.xml
@@ -0,0 +1,850 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE serverinfo SYSTEM
+ "/home/deepdiver/Development/ownCloud/master/apps/dav/tests/travis/caldavtest/serverinfo.dtd">
+
+<!--
+ Copyright (c) 2006-2015 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<serverinfo>
+ <host>localhost</host>
+ <nonsslport>8888</nonsslport>
+ <authtype>basic</authtype>
+ <!-- <unix>/tmp/caldavd_requests/unsecured.sock</unix> -->
+
+ <waitcount>120</waitcount>
+ <waitdelay>0.25</waitdelay>
+ <waitsuccess>30</waitsuccess>
+
+ <features>
+ <!-- Generic WebDAV extensions -->
+ <feature>COPY Method</feature> <!-- COPY method -->
+ <feature>MOVE Method</feature> <!-- MOVE method -->
+ <feature>Extended MKCOL</feature> <!-- Extended MKCOL -->
+
+ <!-- ACL related -->
+ <feature>ACL Method</feature> <!-- ACL method -->
+ <feature>acl-principal-prop-set REPORT</feature> <!-- ACL acl-principal-prop-set REPORT -->
+ <feature>principal-match REPORT</feature> <!-- ACL principal-match REPORT -->
+ <feature>principal-property-search REPORT</feature> <!-- ACL principal-property-search REPORT -->
+ <feature>principal-search-property-set REPORT</feature> <!-- ACL principal-search-property-set REPORT -->
+ <feature>calendarserver-principal-search REPORT</feature> <!-- ACL calendarserver-principal-search REPORT -->
+
+ <feature>add-member</feature> <!-- Add-member used to create resources -->
+ <!-- <feature>auth-on-root</feature> --> <!-- Whether the server requires authentication on the root URI -->
+ <feature>brief</feature> <!-- Brief header for PROPFIND, REPORT -->
+ <feature>bulk-post</feature> <!-- Bulk POST requests -->
+ <feature>ctag</feature> <!-- ctag extension -->
+ <feature>current-user-principal</feature> <!-- current-user-principal extension -->
+ <feature>directory listing</feature> <!-- GET on collection -->
+ <feature>extended-principal-search</feature> <!-- Extended principal-property-search REPORT extension -->
+ <feature>expand-property</feature> <!-- Expand property REPORT -->
+ <feature>only-proxy-groups</feature> <!-- Group-membership only includes delegated-to groups -->
+ <feature>limits</feature> <!-- max-collections and max-resources limits -->
+ <feature>own-root</feature> <!-- / is owned by this service -->
+ <feature>prefer</feature> <!-- Prefer header overall support -->
+ <feature>prefer-minimal</feature> <!-- Prefer header return=minimal -->
+ <feature>prefer-representation</feature> <!-- Prefer header return=representation -->
+ <feature>prefer-noroot</feature> <!-- Prefer header depth-noroot -->
+ <feature>quota</feature> <!-- WebDAV QUOTA -->
+ <!-- <feature>quota-on-resources</feature> --> <!-- WebDAV QUOTA on calendar and address book object resources -->
+ <feature>resource-id</feature> <!-- WebDAV BIND DAV:resource-id property -->
+ <feature>sync-report</feature> <!-- WebDAV collection sync REPORT -->
+ <!-- <feature>sync-report-limit</feature> --> <!-- WebDAV collection sync REPORT DAV:limit support -->
+ <!--<feature>sync-report-home</feature> &lt;!&ndash; WebDAV collection sync REPORT on Homes &ndash;&gt;-->
+ <feature>sync-report-config-token</feature> <!-- Sync REPORT token includes configuration component -->
+ <feature>well-known</feature> <!-- well-known feature -->
+
+ <!-- <feature>per-object-ACLs</feature> --> <!-- ACL for objects in calendar/address books -->
+ <!-- <feature>regular-collection</feature> --> <!-- Regular collections allowed in calendar/address book homes -->
+
+ <feature>json-data</feature> <!-- jCal and jCard support -->
+
+ <!-- CalendarServer specific extensions -->
+ <feature>control-api</feature> <!-- Control API support -->
+
+ <!-- CalDAV specific extension -->
+ <feature>caldav</feature> <!-- Basic CalDAV feature enabler -->
+ <feature>attachments-collection</feature> <!-- Server uses a collection in same WebDAV tree to store attachments -->
+ <feature>auto-accept</feature> <!-- Auto-accept for rooms & locations -->
+ <feature>auto-accept-modes</feature> <!-- Auto-accept modes -->
+ <feature>client-fix-TRANSP</feature> <!-- fix client TRANSP -->
+ <!-- <feature>dropbox</feature> --> <!-- dropbox extension -->
+ <feature>default-alarms</feature> <!-- default alarms extension -->
+ <feature>EMAIL parameter</feature> <!-- Server normalizes cuaddress and adds EMAIL parameter -->
+ <feature>extended-freebusy</feature> <!-- Extended freebusy response -->
+ <feature>freebusy-url</feature> <!-- Freebusy URL -->
+ <feature>group-attendee-expansion</feature> <!-- Auto-expansion of group attendees -->
+ <feature>implicit-scheduling</feature> <!-- CalDAV scheduling - implicit -->
+ <feature>location-resource-tracking</feature> <!-- Server tracks who makes unscheduled changes to locations and resources -->
+ <feature>managed-attachments</feature> <!-- CalDAV Managed Attachments -->
+ <feature>maskuid</feature> <!-- maskuid extension -->
+ <feature>no-duplicate-uids</feature> <!-- duplicate UIDs in same home not supported -->
+ <feature>partstat-timestamp</feature> <!-- Time stamps when PARTSTAT changes extension -->
+ <!-- <feature>podding</feature> --> <!-- Podded server -->
+ <feature>private-comments</feature> <!-- private-comments extension -->
+ <feature>private-events</feature> <!-- private-events extension -->
+ <feature>proxy</feature> <!-- calendar-user-proxy extension -->
+ <!-- <feature>proxy-authz</feature> --> <!-- sudo user extension -->
+ <feature>recurrence-splitting</feature> <!-- Recurring components can be split -->
+ <feature>remove-duplicate-alarms</feature> <!-- Server removes any duplicate alarms on PUT -->
+ <feature>query-extended</feature> <!-- calendar-query-extended extension -->
+ <feature>shared-calendars</feature> <!-- Shared calendars extension -->
+ <feature>share-calendars-to-groups</feature> <!-- Share calendars to groups extension -->
+ <feature>schedule-changes</feature> <!-- schedule-changes property extension -->
+ <feature>split-calendars</feature> <!-- Calendars are split by component type -->
+ <feature>supported-component-sets</feature> <!-- CALDAV:supported-calendar-component-sets on calendar homes -->
+ <feature>supported-component-sets-one</feature> <!-- Only single component calendars allowed to be created -->
+ <feature>timerange-low-limit</feature> <!-- Time-range only valid one year back -->
+ <feature>timerange-high-limit</feature> <!-- Time-range only valid 5 years ahead -->
+ <feature>timezones-by-reference</feature> <!-- Timezones by reference enabled -->
+ <feature>timezone-service</feature> <!-- Timezone service extension for Wiki -->
+ <feature>timezone-std-service</feature> <!-- Timezone standard service extension -->
+ <!-- <feature>trash-collection</feature> --> <!-- Trash collection enabled -->
+ <feature>travel-time-busy</feature> <!-- Travel time appears as busy -->
+ <feature>vavailability</feature> <!-- VAVAILABILITY on inbox -->
+ <!-- <feature>vpoll</feature> --> <!-- VPOLL support for store and scheduling -->
+ <feature>webcal</feature> <!-- Internet calendar subscription via GET on calendar collection -->
+
+ <!-- CardDAV specific extension -->
+ <feature>carddav</feature> <!-- Basic CardDAV feature enabler -->
+ <feature>default-addressbook</feature> <!-- Default address book behavior -->
+ <feature>shared-addressbooks</feature> <!-- Shared address books extension -->
+ <feature>shared-addressbook-groups</feature> <!-- Shared address book groups extension -->
+ <feature>directory-gateway</feature> <!-- Directory gateway extension -->
+
+ </features>
+
+ <substitutions>
+ <!-- Useful xpath shortcuts for verifiers -->
+ <substitution>
+ <key>$multistatus-response-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response</value>
+ </substitution>
+ <substitution>
+ <key>$multistatus-href-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
+ </substitution>
+ <substitution>
+ <key>$verify-response-prefix:</key>
+ <value>{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
+ </substitution>
+ <substitution>
+ <key>$verify-property-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
+ </substitution>
+ <substitution>
+ <key>$verify-bad-response:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}status</value>
+ </substitution>
+ <substitution>
+ <key>$verify-error-response:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}error</value>
+ </substitution>
+ <substitution>
+ <key>$CALDAV:</key>
+ <value>urn:ietf:params:xml:ns:caldav</value>
+ </substitution>
+ <substitution>
+ <key>$CARDDAV:</key>
+ <value>urn:ietf:params:xml:ns:carddav</value>
+ </substitution>
+ <substitution>
+ <key>$CS:</key>
+ <value>http://calendarserver.org/ns/</value>
+ </substitution>
+
+ <!-- Server configuration settings -->
+ <!-- $host: and $hostssl: are implicitly added by CalDAVTester based
+ on the host/nonsslport/sslport values and ssl command line switch -->
+
+ <!-- relative path to caldav root-->
+ <substitution>
+ <key>$root:</key>
+ <value>/remote.php/caldav/</value>
+ </substitution>
+
+ <!-- relative path to main principal collection-->
+ <substitution>
+ <key>$principalcollection:</key>
+ <value>$root:principals/</value>
+ </substitution>
+
+ <!-- the core recored type collections-->
+ <substitution>
+ <key>$uidstype:</key>
+ <value>__uids__</value>
+ </substitution>
+ <substitution>
+ <key>$groupstype:</key>
+ <value>groups</value>
+ </substitution>
+ <substitution>
+ <key>$locationstype:</key>
+ <value>locations</value>
+ </substitution>
+ <substitution>
+ <key>$resourcestype:</key>
+ <value>resources</value>
+ </substitution>
+
+ <!-- relative path to record type principal collections-->
+ <substitution>
+ <key>$principals_uids:</key>
+ <value>$principalcollection:$uidstype:/</value>
+ </substitution>
+ <substitution>
+ <key>$principals_users:</key>
+ <value>$principalcollection:</value>
+ </substitution>
+ <substitution>
+ <key>$principals_groups:</key>
+ <value>$principalcollection:$groupstype:/</value>
+ </substitution>
+ <substitution>
+ <key>$principals_resources:</key>
+ <value>$principalcollection:$resourcestype:/</value>
+ </substitution>
+ <substitution>
+ <key>$principals_locations:</key>
+ <value>$principalcollection:$locationstype:/</value>
+ </substitution>
+
+ <!-- relative path to calendars collection-->
+ <substitution>
+ <key>$calendars:</key>
+ <value>$root:calendars/</value>
+ </substitution>
+
+ <!-- relative path to record type calendar collections-->
+ <substitution>
+ <key>$calendars_uids:</key>
+ <value>$calendars:$uidstype:/</value>
+ </substitution>
+ <substitution>
+ <key>$calendars_users:</key>
+ <value>$calendars:/</value>
+ </substitution>
+ <substitution>
+ <key>$calendars_resources:</key>
+ <value>$calendars:$resourcestype:/</value>
+ </substitution>
+ <substitution>
+ <key>$calendars_locations:</key>
+ <value>$calendars:$locationstype:/</value>
+ </substitution>
+
+ <!-- primary calendar name-->
+ <substitution>
+ <key>$calendar:</key>
+ <value>calendar</value>
+ </substitution>
+
+ <!-- primary tasks-only calendar name-->
+ <substitution>
+ <key>$tasks:</key>
+ <value>tasks</value>
+ </substitution>
+
+ <!-- primary polls-only calendar name-->
+ <substitution>
+ <key>$polls:</key>
+ <value>polls</value>
+ </substitution>
+
+ <!-- inbox name-->
+ <substitution>
+ <key>$inbox:</key>
+ <value>inbox</value>
+ </substitution>
+
+ <!-- outbox name-->
+ <substitution>
+ <key>$outbox:</key>
+ <value>outbox</value>
+ </substitution>
+
+ <!-- dropbox name-->
+ <substitution>
+ <key>$dropbox:</key>
+ <value>dropbox</value>
+ </substitution>
+
+ <!-- attachments name-->
+ <substitution>
+ <key>$attachments:</key>
+ <value>dropbox</value>
+ </substitution>
+
+ <!-- notification name-->
+ <substitution>
+ <key>$notification:</key>
+ <value>notification</value>
+ </substitution>
+
+ <!-- freebusy name-->
+ <substitution>
+ <key>$freebusy:</key>
+ <value>freebusy</value>
+ </substitution>
+
+ <!-- Sync home collection items - use "-" to include the home resource-->
+ <substitution>
+ <key>$calendar_home_items_initial_sync:</key>
+ <value>[-,$calendar:/,$tasks:/,$inbox:/,$outbox:/,$freebusy:,$notification:/]</value>
+ </substitution>
+
+ <!-- Sync collection extra items - use "-" to include the collection-->
+ <substitution>
+ <key>$calendar_sync_extra_items:</key>
+ <value>[-]</value>
+ </substitution>
+
+ <!-- Sync collection extra count - gets added to the totalcount value-->
+ <substitution>
+ <key>$calendar_sync_extra_count:</key>
+ <value>1</value> <!-- the request-uri resource is returned when no token passed-->
+ </substitution>
+
+ <!-- server-to-server inbox-->
+ <substitution>
+ <key>$servertoserver:</key>
+ <value>$root:inbox</value>
+ </substitution>
+
+ <!-- timezone service-->
+ <substitution>
+ <key>$timezoneservice:</key>
+ <value>$root:timezones</value>
+ </substitution>
+
+ <!-- timezone std service-->
+ <substitution>
+ <key>$timezonestdservice:</key>
+ <value>$root:stdtimezones</value>
+ </substitution>
+
+ <!-- relative path to addressbooks collection-->
+ <substitution>
+ <key>$addressbooks:</key>
+ <value>$root:addressbooks/</value>
+ </substitution>
+
+ <!-- relative path to record type addressbook collections-->
+ <substitution>
+ <key>$addressbooks_uids:</key>
+ <value>$addressbooks:$uidstype:/</value>
+ </substitution>
+ <substitution>
+ <key>$addressbooks_users:</key>
+ <value>$addressbooks:/</value>
+ </substitution>
+
+ <!-- primary addressbook name -->
+ <substitution>
+ <key>$addressbook:</key>
+ <value>addressbook</value>
+ </substitution>
+
+ <!-- directory name -->
+ <substitution>
+ <key>$directory:</key>
+ <value>$root:directory/</value>
+ </substitution>
+
+ <!-- POST add-member URI suffix -->
+ <substitution>
+ <key>$add-member:</key>
+ <value>;add-member</value>
+ </substitution>
+
+ <!-- user id for admin user -->
+ <substitution>
+ <key>$useradmin:</key>
+ <value>admin</value>
+ </substitution>
+ <!-- guid for admin user -->
+ <substitution>
+ <key>$useradminguid:</key>
+ <value>0C8BDE62-E600-4696-83D3-8B5ECABDFD2E</value>
+ </substitution>
+ <!-- password for admin user -->
+ <substitution>
+ <key>$pswdadmin:</key>
+ <value>admin</value>
+ </substitution>
+
+ <!-- relative path to admin principal resource-->
+ <substitution>
+ <key>$principal_admin:</key>
+ <value>$principals_users:$useradmin:/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri_admin:</key>
+ <value>$principals_uids:$useradminguid:/</value>
+ </substitution>
+
+ <!-- user id for apprentice user -->
+ <substitution>
+ <key>$userapprentice:</key>
+ <value>apprentice</value>
+ </substitution>
+ <!-- guid for apprentice user -->
+ <substitution>
+ <key>$userapprenticeguid:</key>
+ <value>29B6C503-11DF-43EC-8CCA-40C7003149CE</value>
+ </substitution>
+ <!-- password for admin user -->
+ <substitution>
+ <key>$pswdapprentice:</key>
+ <value>apprentice</value>
+ </substitution>
+
+ <!-- relative path to apprentice principal resource-->
+ <substitution>
+ <key>$principal_apprentice:</key>
+ <value>$principals_users:$userapprentice:/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri_apprentice:</key>
+ <value>$principals_uids:$userapprenticeguid:/</value>
+ </substitution>
+
+ <!-- user id for proxy user -->
+ <substitution>
+ <key>$userproxy:</key>
+ <value>superuser</value>
+ </substitution>
+ <!-- password for proxy user -->
+ <substitution>
+ <key>$pswdproxy:</key>
+ <value>superuser</value>
+ </substitution>
+
+ <!-- Forty user accounts -->
+ <repeat count="40">
+ <!-- user id -->
+ <substitution>
+ <key>$userid%d:</key>
+ <value>user%02d</value>
+ </substitution>
+ <!-- user guid -->
+ <substitution>
+ <key>$userguid%d:</key>
+ <value>10000000-0000-0000-0000-000000000%03d</value>
+ </substitution>
+ <!-- user name -->
+ <substitution>
+ <key>$username%d:</key>
+ <value>User %02d</value>
+ </substitution>
+ <!-- user name URI encoded -->
+ <substitution>
+ <key>$username-encoded%d:</key>
+ <value>User%%20%02d</value>
+ </substitution>
+ <!-- first name -->
+ <substitution>
+ <key>$firstname%d:</key>
+ <value>User</value>
+ </substitution>
+ <!-- last name -->
+ <substitution>
+ <key>$lastname%d:</key>
+ <value>%02d</value>
+ </substitution>
+ <!-- password -->
+ <substitution>
+ <key>$pswd%d:</key>
+ <value>user%02d</value>
+ </substitution>
+ <!-- relative path to user principal resource-->
+ <substitution>
+ <key>$principal%d:</key>
+ <value>$principals_users:$userid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri%d:</key>
+ <value>$principals_users:$userid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$principal%dnoslash:</key>
+ <value>$principals_users:$userid%d:</value>
+ </substitution>
+
+ <!-- relative path to user calendar home-->
+ <substitution>
+ <key>$calendarhome%d:</key>
+ <value>$calendars:$userid%d:</value>
+ </substitution>
+ <!-- relative path to user alternate calendar home-->
+ <substitution>
+ <key>$calendarhomealt%d:</key>
+ <value>$calendars_users:$userid%d:</value>
+ </substitution>
+ <!-- relative path to user calendar-->
+ <substitution>
+ <key>$calendarpath%d:</key>
+ <value>$calendarhome%d:/$calendar:</value>
+ </substitution>
+ <!-- relative path to user alternate calendar-->
+ <substitution>
+ <key>$calendarpathalt%d:</key>
+ <value>$calendarhomealt%d:/$calendar:</value>
+ </substitution>
+ <!-- relative path to user tasks calendar-->
+ <substitution>
+ <key>$taskspath%d:</key>
+ <value>$calendarhome%d:/$tasks:</value>
+ </substitution>
+ <!-- relative path to user polls calendar-->
+ <substitution>
+ <key>$pollspath%d:</key>
+ <value>$calendarhome%d:/$polls:</value>
+ </substitution>
+ <!-- relative path to user inbox-->
+ <substitution>
+ <key>$inboxpath%d:</key>
+ <value>$calendarhome%d:/$inbox:</value>
+ </substitution>
+ <!-- relative path to user outbox-->
+ <substitution>
+ <key>$outboxpath%d:</key>
+ <value>$calendarhome%d:/$outbox:</value>
+ </substitution>
+ <!-- relative path to user dropbox-->
+ <substitution>
+ <key>$dropboxpath%d:</key>
+ <value>$calendarhome%d:/$dropbox:</value>
+ </substitution>
+ <!-- relative path to user notification-->
+ <substitution>
+ <key>$notificationpath%d:</key>
+ <value>$calendarhome%d:/$notification:</value>
+ </substitution>
+ <!-- relative path to user freebusy-->
+ <substitution>
+ <key>$freebusypath%d:</key>
+ <value>$calendarhome%d:/$freebusy:</value>
+ </substitution>
+ <substitution>
+ <key>$email%d:</key>
+ <value>$userid%d:@example.com</value>
+ </substitution>
+ <!-- calendar user address of user-->
+ <substitution>
+ <key>$cuaddr%d:</key>
+ <value>mailto:$email%d:</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddralt%d:</key>
+ <value>$cuaddr%d:</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddraltnoslash%d:</key>
+ <value>$cuaddr%d:</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddrurn%d:</key>
+ <value>urn:x-uid:$userguid%d:</value>
+ </substitution>
+
+ <!-- relative path to user addressbook home-->
+ <substitution>
+ <key>$addressbookhome%d:</key>
+ <value>$addressbooks:users/$userid%d:</value>
+ </substitution>
+ <!-- relative path to user addressbook-->
+ <substitution>
+ <key>$addressbookpath%d:</key>
+ <value>$addressbookhome%d:/$addressbook:</value>
+ </substitution>
+ </repeat>
+
+ <!-- Ten public accounts -->
+ <repeat count="10">
+ <!-- user id -->
+ <substitution>
+ <key>$publicuserid%d:</key>
+ <value>public%02d</value>
+ </substitution>
+ <!-- user guid -->
+ <substitution>
+ <key>$publicuserguid%d:</key>
+ <value>50000000-0000-0000-0000-0000000000%02d</value>
+ </substitution>
+ <!-- user name -->
+ <substitution>
+ <key>$publicusername%d:</key>
+ <value>Public %02d</value>
+ </substitution>
+ <!-- password -->
+ <substitution>
+ <key>$publicpswd%d:</key>
+ <value>public%02d</value>
+ </substitution>
+ <!-- relative path to user principal resource-->
+ <substitution>
+ <key>$publicprincipal%d:</key>
+ <value>$principals_users:$publicuserid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$publicprincipaluri%d:</key>
+ <value>$principals_uids:$publicuserguid%d:/</value>
+ </substitution>
+ <!-- relative path to user calendar home-->
+ <substitution>
+ <key>$publiccalendarhome%d:</key>
+ <value>$calendars_uids:$publicuserguid%d:</value>
+ </substitution>
+ <!-- relative path to user calendar-->
+ <substitution>
+ <key>$publiccalendarpath%d:</key>
+ <value>$calendars_uids:$publicuserguid%d:/$calendar:</value>
+ </substitution>
+ <substitution>
+ <key>$publicemail%d:</key>
+ <value>$publicuserid%d:@example.com</value>
+ </substitution>
+ <!-- calendar user address of user-->
+ <substitution>
+ <key>$publiccuaddr%d:</key>
+ <value>mailto:$publicemail%d:</value>
+ </substitution>
+ <substitution>
+ <key>$publiccuaddralt%d:</key>
+ <value>$publiccuaddr%d:</value>
+ </substitution>
+ <substitution>
+ <key>$publiccuaddrurn%d:</key>
+ <value>urn:x-uid:$publicuserguid%d:</value>
+ </substitution>
+ </repeat>
+
+ <!-- Twenty resource accounts -->
+ <repeat count="20">
+ <substitution>
+ <key>$resourceid%d:</key>
+ <value>resource%02d</value>
+ </substitution>
+ <!-- resource guid-->
+ <substitution>
+ <key>$resourceguid%d:</key>
+ <value>40000000-0000-0000-0000-000000000%03d</value>
+ </substitution>
+ <!-- resource name-->
+ <substitution>
+ <key>$resourcename%d:</key>
+ <value>Resource %02d</value>
+ </substitution>
+ <!-- relative path to first resource calendar home-->
+ <substitution>
+ <key>$rcalendarhome%d:</key>
+ <value>$calendars_uids:$resourceguid%d:</value>
+ </substitution>
+ <!-- relative path to first resource calendar home-->
+ <substitution>
+ <key>$rcalendarpath%d:</key>
+ <value>$calendars_uids:$resourceguid%d:/$calendar:</value>
+ </substitution>
+ <!-- relative path to first resource inbox-->
+ <substitution>
+ <key>$rinboxpath%d:</key>
+ <value>$calendars_uids:$resourceguid%d:/$inbox:</value>
+ </substitution>
+ <!-- relative path to first resource outbox-->
+ <substitution>
+ <key>$routboxpath%d:</key>
+ <value>$calendars_uids:$resourceguid%d:/$outbox:</value>
+ </substitution>
+ <!-- relative path to first resource principal resource-->
+ <substitution>
+ <key>$rprincipal%d:</key>
+ <value>$principals_resources:$resourceid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$rprincipaluri%d:</key>
+ <value>$principals_uids:$resourceguid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$rcuaddralt%d:</key>
+ <value>$rcuaddrurn%d:</value>
+ </substitution>
+ <substitution>
+ <key>$rcuaddrurn%d:</key>
+ <value>urn:x-uid:$resourceguid%d:</value>
+ </substitution>
+ </repeat>
+
+ <!-- Ten Location accounts -->
+ <repeat count="10">
+ <substitution>
+ <key>$locationid%d:</key>
+ <value>location%02d</value>
+ </substitution>
+ <!-- location guid-->
+ <substitution>
+ <key>$locationguid%d:</key>
+ <value>30000000-0000-0000-0000-000000000%03d</value>
+ </substitution>
+ <!-- location name-->
+ <substitution>
+ <key>$locationname%d:</key>
+ <value>Location %02d</value>
+ </substitution>
+ <!-- relative path to first location calendar home-->
+ <substitution>
+ <key>$lcalendarhome%d:</key>
+ <value>$calendars_uids:$locationguid%d:</value>
+ </substitution>
+ <!-- relative path to first location calendar home-->
+ <substitution>
+ <key>$lcalendarpath%d:</key>
+ <value>$calendars_uids:$locationguid%d:/$calendar:</value>
+ </substitution>
+ <!-- relative path to first location inbox-->
+ <substitution>
+ <key>$linboxpath%d:</key>
+ <value>$calendars_uids:$locationguid%d:/$inbox:</value>
+ </substitution>
+ <!-- relative path to first location outbox-->
+ <substitution>
+ <key>$loutboxpath%d:</key>
+ <value>$calendars_uids:$locationguid%d:/$outbox:</value>
+ </substitution>
+ <!-- relative path to first location principal resource-->
+ <substitution>
+ <key>$lprincipal%d:</key>
+ <value>$principals_resources:$locationid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$lprincipaluri%d:</key>
+ <value>$principals_uids:$locationguid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$lcuaddralt%d:</key>
+ <value>$lprincipaluri%d:</value>
+ </substitution>
+ <substitution>
+ <key>$lcuaddrurn%d:</key>
+ <value>urn:x-uid:$locationguid%d:</value>
+ </substitution>
+ </repeat>
+
+
+ <!-- Ten Group accounts -->
+ <repeat count="40">
+ <substitution>
+ <key>$groupid%d:</key>
+ <value>group%02d</value>
+ </substitution>
+ <!-- group guid-->
+ <substitution>
+ <key>$groupguid%d:</key>
+ <value>20000000-0000-0000-0000-000000000%03d</value>
+ </substitution>
+ <!-- group name-->
+ <substitution>
+ <key>$groupname%d:</key>
+ <value>Group %02d</value>
+ </substitution>
+ <!-- relative path to first group principal resource-->
+ <substitution>
+ <key>$gprincipal%d:</key>
+ <value>$principals_resources:$groupid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$gprincipaluri%d:</key>
+ <value>$principals_uids:$groupguid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$gemail%d:</key>
+ <value>$groupid%d:@example.com</value>
+ </substitution>
+ <substitution>
+ <key>$gcuaddralt%d:</key>
+ <value>$gprincipaluri%d:</value>
+ </substitution>
+ <substitution>
+ <key>$gcuaddrurn%d:</key>
+ <value>urn:x-uid:$groupguid%d:</value>
+ </substitution>
+ </repeat>
+
+ <!-- User with non-ascii name -->
+ <substitution>
+ <key>$i18nid:</key>
+ <value>i18nuser</value>
+ </substitution>
+ <!-- group guid-->
+ <substitution>
+ <key>$i18nguid:</key>
+ <value>860B3EE9-6D7C-4296-9639-E6B998074A78</value>
+ </substitution>
+ <!-- group name-->
+ <substitution>
+ <key>$i18nname:</key>
+ <value>まだ</value>
+ </substitution>
+ <!-- password -->
+ <substitution>
+ <key>$i18npswd:</key>
+ <value>i18nuser</value>
+ </substitution>
+ <!-- relative path to user calendar-->
+ <substitution>
+ <key>$i18ncalendarpath:</key>
+ <value>$calendars_uids:$i18nguid:/$calendar:</value>
+ </substitution>
+ <substitution>
+ <key>$i18nemail:</key>
+ <value>$i18nid:@example.com</value>
+ </substitution>
+ <!-- CUAddrs -->
+ <substitution>
+ <key>$i18ncuaddr:</key>
+ <value>mailto:$i18nemail:</value>
+ </substitution>
+ <substitution>
+ <key>$i18ncuaddrurn:</key>
+ <value>urn:x-uid:$i18nguid:</value>
+ </substitution>
+
+ <!-- relative path to disabled group principal resource-->
+ <substitution>
+ <key>$principaldisabled:</key>
+ <value>$principals_groups:disabledgroup/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluridisabled:</key>
+ <value>$principals_uids:disabledgroup/</value>
+ </substitution>
+ <!-- calendar user address of disabled group-->
+ <substitution>
+ <key>$cuaddrdisabled:</key>
+ <value>$principals_uids:disabledgroup/</value>
+ </substitution>
+
+ <!-- Override some of the above definitions for special cases -->
+
+ <!-- calendar user address of second user-->
+ <substitution>
+ <key>$cuaddr2:</key>
+ <value>MAILTO:$email2:</value>
+ </substitution>
+
+ </substitutions>
+</serverinfo>
diff --git a/apps/dav/tests/travis/caldavtest/serverinfo-old-carddav-endpoint.xml b/apps/dav/tests/travis/caldavtest/serverinfo-old-carddav-endpoint.xml
new file mode 100644
index 00000000000..bd9f83a4814
--- /dev/null
+++ b/apps/dav/tests/travis/caldavtest/serverinfo-old-carddav-endpoint.xml
@@ -0,0 +1,850 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE serverinfo SYSTEM
+ "/home/deepdiver/Development/ownCloud/master/apps/dav/tests/travis/caldavtest/serverinfo.dtd">
+
+<!--
+ Copyright (c) 2006-2015 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<serverinfo>
+ <host>localhost</host>
+ <nonsslport>8888</nonsslport>
+ <authtype>basic</authtype>
+ <!-- <unix>/tmp/caldavd_requests/unsecured.sock</unix> -->
+
+ <waitcount>120</waitcount>
+ <waitdelay>0.25</waitdelay>
+ <waitsuccess>30</waitsuccess>
+
+ <features>
+ <!-- Generic WebDAV extensions -->
+ <feature>COPY Method</feature> <!-- COPY method -->
+ <feature>MOVE Method</feature> <!-- MOVE method -->
+ <feature>Extended MKCOL</feature> <!-- Extended MKCOL -->
+
+ <!-- ACL related -->
+ <feature>ACL Method</feature> <!-- ACL method -->
+ <feature>acl-principal-prop-set REPORT</feature> <!-- ACL acl-principal-prop-set REPORT -->
+ <feature>principal-match REPORT</feature> <!-- ACL principal-match REPORT -->
+ <feature>principal-property-search REPORT</feature> <!-- ACL principal-property-search REPORT -->
+ <feature>principal-search-property-set REPORT</feature> <!-- ACL principal-search-property-set REPORT -->
+ <feature>calendarserver-principal-search REPORT</feature> <!-- ACL calendarserver-principal-search REPORT -->
+
+ <feature>add-member</feature> <!-- Add-member used to create resources -->
+ <!-- <feature>auth-on-root</feature> --> <!-- Whether the server requires authentication on the root URI -->
+ <feature>brief</feature> <!-- Brief header for PROPFIND, REPORT -->
+ <feature>bulk-post</feature> <!-- Bulk POST requests -->
+ <feature>ctag</feature> <!-- ctag extension -->
+ <feature>current-user-principal</feature> <!-- current-user-principal extension -->
+ <feature>directory listing</feature> <!-- GET on collection -->
+ <feature>extended-principal-search</feature> <!-- Extended principal-property-search REPORT extension -->
+ <feature>expand-property</feature> <!-- Expand property REPORT -->
+ <feature>only-proxy-groups</feature> <!-- Group-membership only includes delegated-to groups -->
+ <feature>limits</feature> <!-- max-collections and max-resources limits -->
+ <feature>own-root</feature> <!-- / is owned by this service -->
+ <feature>prefer</feature> <!-- Prefer header overall support -->
+ <feature>prefer-minimal</feature> <!-- Prefer header return=minimal -->
+ <feature>prefer-representation</feature> <!-- Prefer header return=representation -->
+ <feature>prefer-noroot</feature> <!-- Prefer header depth-noroot -->
+ <feature>quota</feature> <!-- WebDAV QUOTA -->
+ <!-- <feature>quota-on-resources</feature> --> <!-- WebDAV QUOTA on calendar and address book object resources -->
+ <feature>resource-id</feature> <!-- WebDAV BIND DAV:resource-id property -->
+ <feature>sync-report</feature> <!-- WebDAV collection sync REPORT -->
+ <!-- <feature>sync-report-limit</feature> --> <!-- WebDAV collection sync REPORT DAV:limit support -->
+ <!--<feature>sync-report-home</feature> &lt;!&ndash; WebDAV collection sync REPORT on Homes &ndash;&gt;-->
+ <feature>sync-report-config-token</feature> <!-- Sync REPORT token includes configuration component -->
+ <feature>well-known</feature> <!-- well-known feature -->
+
+ <!-- <feature>per-object-ACLs</feature> --> <!-- ACL for objects in calendar/address books -->
+ <!-- <feature>regular-collection</feature> --> <!-- Regular collections allowed in calendar/address book homes -->
+
+ <feature>json-data</feature> <!-- jCal and jCard support -->
+
+ <!-- CalendarServer specific extensions -->
+ <feature>control-api</feature> <!-- Control API support -->
+
+ <!-- CalDAV specific extension -->
+ <feature>caldav</feature> <!-- Basic CalDAV feature enabler -->
+ <feature>attachments-collection</feature> <!-- Server uses a collection in same WebDAV tree to store attachments -->
+ <feature>auto-accept</feature> <!-- Auto-accept for rooms & locations -->
+ <feature>auto-accept-modes</feature> <!-- Auto-accept modes -->
+ <feature>client-fix-TRANSP</feature> <!-- fix client TRANSP -->
+ <!-- <feature>dropbox</feature> --> <!-- dropbox extension -->
+ <feature>default-alarms</feature> <!-- default alarms extension -->
+ <feature>EMAIL parameter</feature> <!-- Server normalizes cuaddress and adds EMAIL parameter -->
+ <feature>extended-freebusy</feature> <!-- Extended freebusy response -->
+ <feature>freebusy-url</feature> <!-- Freebusy URL -->
+ <feature>group-attendee-expansion</feature> <!-- Auto-expansion of group attendees -->
+ <feature>implicit-scheduling</feature> <!-- CalDAV scheduling - implicit -->
+ <feature>location-resource-tracking</feature> <!-- Server tracks who makes unscheduled changes to locations and resources -->
+ <feature>managed-attachments</feature> <!-- CalDAV Managed Attachments -->
+ <feature>maskuid</feature> <!-- maskuid extension -->
+ <feature>no-duplicate-uids</feature> <!-- duplicate UIDs in same home not supported -->
+ <feature>partstat-timestamp</feature> <!-- Time stamps when PARTSTAT changes extension -->
+ <!-- <feature>podding</feature> --> <!-- Podded server -->
+ <feature>private-comments</feature> <!-- private-comments extension -->
+ <feature>private-events</feature> <!-- private-events extension -->
+ <feature>proxy</feature> <!-- calendar-user-proxy extension -->
+ <!-- <feature>proxy-authz</feature> --> <!-- sudo user extension -->
+ <feature>recurrence-splitting</feature> <!-- Recurring components can be split -->
+ <feature>remove-duplicate-alarms</feature> <!-- Server removes any duplicate alarms on PUT -->
+ <feature>query-extended</feature> <!-- calendar-query-extended extension -->
+ <feature>shared-calendars</feature> <!-- Shared calendars extension -->
+ <feature>share-calendars-to-groups</feature> <!-- Share calendars to groups extension -->
+ <feature>schedule-changes</feature> <!-- schedule-changes property extension -->
+ <feature>split-calendars</feature> <!-- Calendars are split by component type -->
+ <feature>supported-component-sets</feature> <!-- CALDAV:supported-calendar-component-sets on calendar homes -->
+ <feature>supported-component-sets-one</feature> <!-- Only single component calendars allowed to be created -->
+ <feature>timerange-low-limit</feature> <!-- Time-range only valid one year back -->
+ <feature>timerange-high-limit</feature> <!-- Time-range only valid 5 years ahead -->
+ <feature>timezones-by-reference</feature> <!-- Timezones by reference enabled -->
+ <feature>timezone-service</feature> <!-- Timezone service extension for Wiki -->
+ <feature>timezone-std-service</feature> <!-- Timezone standard service extension -->
+ <!-- <feature>trash-collection</feature> --> <!-- Trash collection enabled -->
+ <feature>travel-time-busy</feature> <!-- Travel time appears as busy -->
+ <feature>vavailability</feature> <!-- VAVAILABILITY on inbox -->
+ <!-- <feature>vpoll</feature> --> <!-- VPOLL support for store and scheduling -->
+ <feature>webcal</feature> <!-- Internet calendar subscription via GET on calendar collection -->
+
+ <!-- CardDAV specific extension -->
+ <feature>carddav</feature> <!-- Basic CardDAV feature enabler -->
+ <feature>default-addressbook</feature> <!-- Default address book behavior -->
+ <feature>shared-addressbooks</feature> <!-- Shared address books extension -->
+ <feature>shared-addressbook-groups</feature> <!-- Shared address book groups extension -->
+ <feature>directory-gateway</feature> <!-- Directory gateway extension -->
+
+ </features>
+
+ <substitutions>
+ <!-- Useful xpath shortcuts for verifiers -->
+ <substitution>
+ <key>$multistatus-response-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response</value>
+ </substitution>
+ <substitution>
+ <key>$multistatus-href-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
+ </substitution>
+ <substitution>
+ <key>$verify-response-prefix:</key>
+ <value>{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
+ </substitution>
+ <substitution>
+ <key>$verify-property-prefix:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
+ </substitution>
+ <substitution>
+ <key>$verify-bad-response:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}status</value>
+ </substitution>
+ <substitution>
+ <key>$verify-error-response:</key>
+ <value>/{DAV:}multistatus/{DAV:}response/{DAV:}error</value>
+ </substitution>
+ <substitution>
+ <key>$CALDAV:</key>
+ <value>urn:ietf:params:xml:ns:caldav</value>
+ </substitution>
+ <substitution>
+ <key>$CARDDAV:</key>
+ <value>urn:ietf:params:xml:ns:carddav</value>
+ </substitution>
+ <substitution>
+ <key>$CS:</key>
+ <value>http://calendarserver.org/ns/</value>
+ </substitution>
+
+ <!-- Server configuration settings -->
+ <!-- $host: and $hostssl: are implicitly added by CalDAVTester based
+ on the host/nonsslport/sslport values and ssl command line switch -->
+
+ <!-- relative path to caldav root-->
+ <substitution>
+ <key>$root:</key>
+ <value>/remote.php/carddav/</value>
+ </substitution>
+
+ <!-- relative path to main principal collection-->
+ <substitution>
+ <key>$principalcollection:</key>
+ <value>$root:principals/</value>
+ </substitution>
+
+ <!-- the core recored type collections-->
+ <substitution>
+ <key>$uidstype:</key>
+ <value>__uids__</value>
+ </substitution>
+ <substitution>
+ <key>$groupstype:</key>
+ <value>groups</value>
+ </substitution>
+ <substitution>
+ <key>$locationstype:</key>
+ <value>locations</value>
+ </substitution>
+ <substitution>
+ <key>$resourcestype:</key>
+ <value>resources</value>
+ </substitution>
+
+ <!-- relative path to record type principal collections-->
+ <substitution>
+ <key>$principals_uids:</key>
+ <value>$principalcollection:$uidstype:/</value>
+ </substitution>
+ <substitution>
+ <key>$principals_users:</key>
+ <value>$principalcollection:</value>
+ </substitution>
+ <substitution>
+ <key>$principals_groups:</key>
+ <value>$principalcollection:$groupstype:/</value>
+ </substitution>
+ <substitution>
+ <key>$principals_resources:</key>
+ <value>$principalcollection:$resourcestype:/</value>
+ </substitution>
+ <substitution>
+ <key>$principals_locations:</key>
+ <value>$principalcollection:$locationstype:/</value>
+ </substitution>
+
+ <!-- relative path to calendars collection-->
+ <substitution>
+ <key>$calendars:</key>
+ <value>$root:calendars/</value>
+ </substitution>
+
+ <!-- relative path to record type calendar collections-->
+ <substitution>
+ <key>$calendars_uids:</key>
+ <value>$calendars:$uidstype:/</value>
+ </substitution>
+ <substitution>
+ <key>$calendars_users:</key>
+ <value>$calendars:/</value>
+ </substitution>
+ <substitution>
+ <key>$calendars_resources:</key>
+ <value>$calendars:$resourcestype:/</value>
+ </substitution>
+ <substitution>
+ <key>$calendars_locations:</key>
+ <value>$calendars:$locationstype:/</value>
+ </substitution>
+
+ <!-- primary calendar name-->
+ <substitution>
+ <key>$calendar:</key>
+ <value>calendar</value>
+ </substitution>
+
+ <!-- primary tasks-only calendar name-->
+ <substitution>
+ <key>$tasks:</key>
+ <value>tasks</value>
+ </substitution>
+
+ <!-- primary polls-only calendar name-->
+ <substitution>
+ <key>$polls:</key>
+ <value>polls</value>
+ </substitution>
+
+ <!-- inbox name-->
+ <substitution>
+ <key>$inbox:</key>
+ <value>inbox</value>
+ </substitution>
+
+ <!-- outbox name-->
+ <substitution>
+ <key>$outbox:</key>
+ <value>outbox</value>
+ </substitution>
+
+ <!-- dropbox name-->
+ <substitution>
+ <key>$dropbox:</key>
+ <value>dropbox</value>
+ </substitution>
+
+ <!-- attachments name-->
+ <substitution>
+ <key>$attachments:</key>
+ <value>dropbox</value>
+ </substitution>
+
+ <!-- notification name-->
+ <substitution>
+ <key>$notification:</key>
+ <value>notification</value>
+ </substitution>
+
+ <!-- freebusy name-->
+ <substitution>
+ <key>$freebusy:</key>
+ <value>freebusy</value>
+ </substitution>
+
+ <!-- Sync home collection items - use "-" to include the home resource-->
+ <substitution>
+ <key>$calendar_home_items_initial_sync:</key>
+ <value>[-,$calendar:/,$tasks:/,$inbox:/,$outbox:/,$freebusy:,$notification:/]</value>
+ </substitution>
+
+ <!-- Sync collection extra items - use "-" to include the collection-->
+ <substitution>
+ <key>$calendar_sync_extra_items:</key>
+ <value>[-]</value>
+ </substitution>
+
+ <!-- Sync collection extra count - gets added to the totalcount value-->
+ <substitution>
+ <key>$calendar_sync_extra_count:</key>
+ <value>1</value> <!-- the request-uri resource is returned when no token passed-->
+ </substitution>
+
+ <!-- server-to-server inbox-->
+ <substitution>
+ <key>$servertoserver:</key>
+ <value>$root:inbox</value>
+ </substitution>
+
+ <!-- timezone service-->
+ <substitution>
+ <key>$timezoneservice:</key>
+ <value>$root:timezones</value>
+ </substitution>
+
+ <!-- timezone std service-->
+ <substitution>
+ <key>$timezonestdservice:</key>
+ <value>$root:stdtimezones</value>
+ </substitution>
+
+ <!-- relative path to addressbooks collection-->
+ <substitution>
+ <key>$addressbooks:</key>
+ <value>$root:addressbooks/</value>
+ </substitution>
+
+ <!-- relative path to record type addressbook collections-->
+ <substitution>
+ <key>$addressbooks_uids:</key>
+ <value>$addressbooks:$uidstype:/</value>
+ </substitution>
+ <substitution>
+ <key>$addressbooks_users:</key>
+ <value>$addressbooks:/</value>
+ </substitution>
+
+ <!-- primary addressbook name -->
+ <substitution>
+ <key>$addressbook:</key>
+ <value>addressbook</value>
+ </substitution>
+
+ <!-- directory name -->
+ <substitution>
+ <key>$directory:</key>
+ <value>$root:directory/</value>
+ </substitution>
+
+ <!-- POST add-member URI suffix -->
+ <substitution>
+ <key>$add-member:</key>
+ <value>;add-member</value>
+ </substitution>
+
+ <!-- user id for admin user -->
+ <substitution>
+ <key>$useradmin:</key>
+ <value>admin</value>
+ </substitution>
+ <!-- guid for admin user -->
+ <substitution>
+ <key>$useradminguid:</key>
+ <value>0C8BDE62-E600-4696-83D3-8B5ECABDFD2E</value>
+ </substitution>
+ <!-- password for admin user -->
+ <substitution>
+ <key>$pswdadmin:</key>
+ <value>admin</value>
+ </substitution>
+
+ <!-- relative path to admin principal resource-->
+ <substitution>
+ <key>$principal_admin:</key>
+ <value>$principals_users:$useradmin:/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri_admin:</key>
+ <value>$principals_uids:$useradminguid:/</value>
+ </substitution>
+
+ <!-- user id for apprentice user -->
+ <substitution>
+ <key>$userapprentice:</key>
+ <value>apprentice</value>
+ </substitution>
+ <!-- guid for apprentice user -->
+ <substitution>
+ <key>$userapprenticeguid:</key>
+ <value>29B6C503-11DF-43EC-8CCA-40C7003149CE</value>
+ </substitution>
+ <!-- password for admin user -->
+ <substitution>
+ <key>$pswdapprentice:</key>
+ <value>apprentice</value>
+ </substitution>
+
+ <!-- relative path to apprentice principal resource-->
+ <substitution>
+ <key>$principal_apprentice:</key>
+ <value>$principals_users:$userapprentice:/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri_apprentice:</key>
+ <value>$principals_uids:$userapprenticeguid:/</value>
+ </substitution>
+
+ <!-- user id for proxy user -->
+ <substitution>
+ <key>$userproxy:</key>
+ <value>superuser</value>
+ </substitution>
+ <!-- password for proxy user -->
+ <substitution>
+ <key>$pswdproxy:</key>
+ <value>superuser</value>
+ </substitution>
+
+ <!-- Forty user accounts -->
+ <repeat count="40">
+ <!-- user id -->
+ <substitution>
+ <key>$userid%d:</key>
+ <value>user%02d</value>
+ </substitution>
+ <!-- user guid -->
+ <substitution>
+ <key>$userguid%d:</key>
+ <value>10000000-0000-0000-0000-000000000%03d</value>
+ </substitution>
+ <!-- user name -->
+ <substitution>
+ <key>$username%d:</key>
+ <value>User %02d</value>
+ </substitution>
+ <!-- user name URI encoded -->
+ <substitution>
+ <key>$username-encoded%d:</key>
+ <value>User%%20%02d</value>
+ </substitution>
+ <!-- first name -->
+ <substitution>
+ <key>$firstname%d:</key>
+ <value>User</value>
+ </substitution>
+ <!-- last name -->
+ <substitution>
+ <key>$lastname%d:</key>
+ <value>%02d</value>
+ </substitution>
+ <!-- password -->
+ <substitution>
+ <key>$pswd%d:</key>
+ <value>user%02d</value>
+ </substitution>
+ <!-- relative path to user principal resource-->
+ <substitution>
+ <key>$principal%d:</key>
+ <value>$principals_users:$userid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri%d:</key>
+ <value>$principals_users:$userid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$principal%dnoslash:</key>
+ <value>$principals_users:$userid%d:</value>
+ </substitution>
+
+ <!-- relative path to user calendar home-->
+ <substitution>
+ <key>$calendarhome%d:</key>
+ <value>$calendars:$userid%d:</value>
+ </substitution>
+ <!-- relative path to user alternate calendar home-->
+ <substitution>
+ <key>$calendarhomealt%d:</key>
+ <value>$calendars_users:$userid%d:</value>
+ </substitution>
+ <!-- relative path to user calendar-->
+ <substitution>
+ <key>$calendarpath%d:</key>
+ <value>$calendarhome%d:/$calendar:</value>
+ </substitution>
+ <!-- relative path to user alternate calendar-->
+ <substitution>
+ <key>$calendarpathalt%d:</key>
+ <value>$calendarhomealt%d:/$calendar:</value>
+ </substitution>
+ <!-- relative path to user tasks calendar-->
+ <substitution>
+ <key>$taskspath%d:</key>
+ <value>$calendarhome%d:/$tasks:</value>
+ </substitution>
+ <!-- relative path to user polls calendar-->
+ <substitution>
+ <key>$pollspath%d:</key>
+ <value>$calendarhome%d:/$polls:</value>
+ </substitution>
+ <!-- relative path to user inbox-->
+ <substitution>
+ <key>$inboxpath%d:</key>
+ <value>$calendarhome%d:/$inbox:</value>
+ </substitution>
+ <!-- relative path to user outbox-->
+ <substitution>
+ <key>$outboxpath%d:</key>
+ <value>$calendarhome%d:/$outbox:</value>
+ </substitution>
+ <!-- relative path to user dropbox-->
+ <substitution>
+ <key>$dropboxpath%d:</key>
+ <value>$calendarhome%d:/$dropbox:</value>
+ </substitution>
+ <!-- relative path to user notification-->
+ <substitution>
+ <key>$notificationpath%d:</key>
+ <value>$calendarhome%d:/$notification:</value>
+ </substitution>
+ <!-- relative path to user freebusy-->
+ <substitution>
+ <key>$freebusypath%d:</key>
+ <value>$calendarhome%d:/$freebusy:</value>
+ </substitution>
+ <substitution>
+ <key>$email%d:</key>
+ <value>$userid%d:@example.com</value>
+ </substitution>
+ <!-- calendar user address of user-->
+ <substitution>
+ <key>$cuaddr%d:</key>
+ <value>mailto:$email%d:</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddralt%d:</key>
+ <value>$cuaddr%d:</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddraltnoslash%d:</key>
+ <value>$cuaddr%d:</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddrurn%d:</key>
+ <value>urn:x-uid:$userguid%d:</value>
+ </substitution>
+
+ <!-- relative path to user addressbook home-->
+ <substitution>
+ <key>$addressbookhome%d:</key>
+ <value>$addressbooks:$userid%d:</value>
+ </substitution>
+ <!-- relative path to user addressbook-->
+ <substitution>
+ <key>$addressbookpath%d:</key>
+ <value>$addressbookhome%d:/$addressbook:</value>
+ </substitution>
+ </repeat>
+
+ <!-- Ten public accounts -->
+ <repeat count="10">
+ <!-- user id -->
+ <substitution>
+ <key>$publicuserid%d:</key>
+ <value>public%02d</value>
+ </substitution>
+ <!-- user guid -->
+ <substitution>
+ <key>$publicuserguid%d:</key>
+ <value>50000000-0000-0000-0000-0000000000%02d</value>
+ </substitution>
+ <!-- user name -->
+ <substitution>
+ <key>$publicusername%d:</key>
+ <value>Public %02d</value>
+ </substitution>
+ <!-- password -->
+ <substitution>
+ <key>$publicpswd%d:</key>
+ <value>public%02d</value>
+ </substitution>
+ <!-- relative path to user principal resource-->
+ <substitution>
+ <key>$publicprincipal%d:</key>
+ <value>$principals_users:$publicuserid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$publicprincipaluri%d:</key>
+ <value>$principals_uids:$publicuserguid%d:/</value>
+ </substitution>
+ <!-- relative path to user calendar home-->
+ <substitution>
+ <key>$publiccalendarhome%d:</key>
+ <value>$calendars_uids:$publicuserguid%d:</value>
+ </substitution>
+ <!-- relative path to user calendar-->
+ <substitution>
+ <key>$publiccalendarpath%d:</key>
+ <value>$calendars_uids:$publicuserguid%d:/$calendar:</value>
+ </substitution>
+ <substitution>
+ <key>$publicemail%d:</key>
+ <value>$publicuserid%d:@example.com</value>
+ </substitution>
+ <!-- calendar user address of user-->
+ <substitution>
+ <key>$publiccuaddr%d:</key>
+ <value>mailto:$publicemail%d:</value>
+ </substitution>
+ <substitution>
+ <key>$publiccuaddralt%d:</key>
+ <value>$publiccuaddr%d:</value>
+ </substitution>
+ <substitution>
+ <key>$publiccuaddrurn%d:</key>
+ <value>urn:x-uid:$publicuserguid%d:</value>
+ </substitution>
+ </repeat>
+
+ <!-- Twenty resource accounts -->
+ <repeat count="20">
+ <substitution>
+ <key>$resourceid%d:</key>
+ <value>resource%02d</value>
+ </substitution>
+ <!-- resource guid-->
+ <substitution>
+ <key>$resourceguid%d:</key>
+ <value>40000000-0000-0000-0000-000000000%03d</value>
+ </substitution>
+ <!-- resource name-->
+ <substitution>
+ <key>$resourcename%d:</key>
+ <value>Resource %02d</value>
+ </substitution>
+ <!-- relative path to first resource calendar home-->
+ <substitution>
+ <key>$rcalendarhome%d:</key>
+ <value>$calendars_uids:$resourceguid%d:</value>
+ </substitution>
+ <!-- relative path to first resource calendar home-->
+ <substitution>
+ <key>$rcalendarpath%d:</key>
+ <value>$calendars_uids:$resourceguid%d:/$calendar:</value>
+ </substitution>
+ <!-- relative path to first resource inbox-->
+ <substitution>
+ <key>$rinboxpath%d:</key>
+ <value>$calendars_uids:$resourceguid%d:/$inbox:</value>
+ </substitution>
+ <!-- relative path to first resource outbox-->
+ <substitution>
+ <key>$routboxpath%d:</key>
+ <value>$calendars_uids:$resourceguid%d:/$outbox:</value>
+ </substitution>
+ <!-- relative path to first resource principal resource-->
+ <substitution>
+ <key>$rprincipal%d:</key>
+ <value>$principals_resources:$resourceid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$rprincipaluri%d:</key>
+ <value>$principals_uids:$resourceguid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$rcuaddralt%d:</key>
+ <value>$rcuaddrurn%d:</value>
+ </substitution>
+ <substitution>
+ <key>$rcuaddrurn%d:</key>
+ <value>urn:x-uid:$resourceguid%d:</value>
+ </substitution>
+ </repeat>
+
+ <!-- Ten Location accounts -->
+ <repeat count="10">
+ <substitution>
+ <key>$locationid%d:</key>
+ <value>location%02d</value>
+ </substitution>
+ <!-- location guid-->
+ <substitution>
+ <key>$locationguid%d:</key>
+ <value>30000000-0000-0000-0000-000000000%03d</value>
+ </substitution>
+ <!-- location name-->
+ <substitution>
+ <key>$locationname%d:</key>
+ <value>Location %02d</value>
+ </substitution>
+ <!-- relative path to first location calendar home-->
+ <substitution>
+ <key>$lcalendarhome%d:</key>
+ <value>$calendars_uids:$locationguid%d:</value>
+ </substitution>
+ <!-- relative path to first location calendar home-->
+ <substitution>
+ <key>$lcalendarpath%d:</key>
+ <value>$calendars_uids:$locationguid%d:/$calendar:</value>
+ </substitution>
+ <!-- relative path to first location inbox-->
+ <substitution>
+ <key>$linboxpath%d:</key>
+ <value>$calendars_uids:$locationguid%d:/$inbox:</value>
+ </substitution>
+ <!-- relative path to first location outbox-->
+ <substitution>
+ <key>$loutboxpath%d:</key>
+ <value>$calendars_uids:$locationguid%d:/$outbox:</value>
+ </substitution>
+ <!-- relative path to first location principal resource-->
+ <substitution>
+ <key>$lprincipal%d:</key>
+ <value>$principals_resources:$locationid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$lprincipaluri%d:</key>
+ <value>$principals_uids:$locationguid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$lcuaddralt%d:</key>
+ <value>$lprincipaluri%d:</value>
+ </substitution>
+ <substitution>
+ <key>$lcuaddrurn%d:</key>
+ <value>urn:x-uid:$locationguid%d:</value>
+ </substitution>
+ </repeat>
+
+
+ <!-- Ten Group accounts -->
+ <repeat count="40">
+ <substitution>
+ <key>$groupid%d:</key>
+ <value>group%02d</value>
+ </substitution>
+ <!-- group guid-->
+ <substitution>
+ <key>$groupguid%d:</key>
+ <value>20000000-0000-0000-0000-000000000%03d</value>
+ </substitution>
+ <!-- group name-->
+ <substitution>
+ <key>$groupname%d:</key>
+ <value>Group %02d</value>
+ </substitution>
+ <!-- relative path to first group principal resource-->
+ <substitution>
+ <key>$gprincipal%d:</key>
+ <value>$principals_resources:$groupid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$gprincipaluri%d:</key>
+ <value>$principals_uids:$groupguid%d:/</value>
+ </substitution>
+ <substitution>
+ <key>$gemail%d:</key>
+ <value>$groupid%d:@example.com</value>
+ </substitution>
+ <substitution>
+ <key>$gcuaddralt%d:</key>
+ <value>$gprincipaluri%d:</value>
+ </substitution>
+ <substitution>
+ <key>$gcuaddrurn%d:</key>
+ <value>urn:x-uid:$groupguid%d:</value>
+ </substitution>
+ </repeat>
+
+ <!-- User with non-ascii name -->
+ <substitution>
+ <key>$i18nid:</key>
+ <value>i18nuser</value>
+ </substitution>
+ <!-- group guid-->
+ <substitution>
+ <key>$i18nguid:</key>
+ <value>860B3EE9-6D7C-4296-9639-E6B998074A78</value>
+ </substitution>
+ <!-- group name-->
+ <substitution>
+ <key>$i18nname:</key>
+ <value>まだ</value>
+ </substitution>
+ <!-- password -->
+ <substitution>
+ <key>$i18npswd:</key>
+ <value>i18nuser</value>
+ </substitution>
+ <!-- relative path to user calendar-->
+ <substitution>
+ <key>$i18ncalendarpath:</key>
+ <value>$calendars_uids:$i18nguid:/$calendar:</value>
+ </substitution>
+ <substitution>
+ <key>$i18nemail:</key>
+ <value>$i18nid:@example.com</value>
+ </substitution>
+ <!-- CUAddrs -->
+ <substitution>
+ <key>$i18ncuaddr:</key>
+ <value>mailto:$i18nemail:</value>
+ </substitution>
+ <substitution>
+ <key>$i18ncuaddrurn:</key>
+ <value>urn:x-uid:$i18nguid:</value>
+ </substitution>
+
+ <!-- relative path to disabled group principal resource-->
+ <substitution>
+ <key>$principaldisabled:</key>
+ <value>$principals_groups:disabledgroup/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluridisabled:</key>
+ <value>$principals_uids:disabledgroup/</value>
+ </substitution>
+ <!-- calendar user address of disabled group-->
+ <substitution>
+ <key>$cuaddrdisabled:</key>
+ <value>$principals_uids:disabledgroup/</value>
+ </substitution>
+
+ <!-- Override some of the above definitions for special cases -->
+
+ <!-- calendar user address of second user-->
+ <substitution>
+ <key>$cuaddr2:</key>
+ <value>MAILTO:$email2:</value>
+ </substitution>
+
+ </substitutions>
+</serverinfo>
diff --git a/apps/dav/tests/travis/carddav/script-new-endpoint.sh b/apps/dav/tests/travis/carddav/script-new-endpoint.sh
new file mode 100644
index 00000000000..9140c37b45f
--- /dev/null
+++ b/apps/dav/tests/travis/carddav/script-new-endpoint.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+# Move the endpoint to the serverinfo file
+cp "$SCRIPTPATH/../caldavtest/serverinfo-new-endpoint.xml" "$SCRIPTPATH/../caldavtest/serverinfo.xml"
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
+
+sleep 30
+
+# run the tests
+cd "$SCRIPTPATH/CalDAVTester"
+PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail --basedir "$SCRIPTPATH/../caldavtest/" -o cdt.txt \
+ "CardDAV/current-user-principal.xml" \
+ "CardDAV/sync-report.xml" \
+ "CardDAV/sharing-addressbooks.xml"
+
+
+RESULT=$?
+
+tail "$/../../../../../data-autotest/nextcloud.log"
+
+exit $RESULT
diff --git a/apps/dav/tests/travis/carddav/script-old-endpoint.sh b/apps/dav/tests/travis/carddav/script-old-endpoint.sh
new file mode 100644
index 00000000000..216f2f5af31
--- /dev/null
+++ b/apps/dav/tests/travis/carddav/script-old-endpoint.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+# Move the endpoint to the serverinfo file
+cp "$SCRIPTPATH/../caldavtest/serverinfo-old-carddav-endpoint.xml" "$SCRIPTPATH/../caldavtest/serverinfo.xml"
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
+
+
+# run the tests
+cd "$SCRIPTPATH/CalDAVTester"
+PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail --basedir "$SCRIPTPATH/../caldavtest/" -o cdt.txt \
+ "CardDAV/current-user-principal.xml" \
+ "CardDAV/sync-report.xml"
+
+RESULT=$?
+
+tail "$/../../../../../data-autotest/nextcloud.log"
+
+exit $RESULT
diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php
index d0fb2d19243..70a072f04de 100644
--- a/apps/dav/tests/unit/CalDAV/CalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php
@@ -334,17 +334,15 @@ EOD;
->willReturn($calObject1)->with(666, 'event-1');
$calendarInfo = [
+ '{http://owncloud.org/ns}owner-principal' => $isShared ? 'user1' : 'user2',
'principaluri' => 'user2',
'id' => 666,
'uri' => 'cal',
];
-
- if ($isShared) {
- $calendarInfo['{http://owncloud.org/ns}owner-principal'] = 'user1';
-
- }
$c = new Calendar($backend, $calendarInfo, $this->l10n);
+ $this->assertEquals(count($c->getChildren()), $expectedChildren);
+
// test private event
$privateEvent = $c->getChild('event-1');
$calData = $privateEvent->get();
diff --git a/apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php b/apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php
index 5eeb6772a60..cecf07ef1d8 100644
--- a/apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php
+++ b/apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php
@@ -55,18 +55,18 @@ class BirthdayServiceTest extends TestCase {
/**
* @dataProvider providesVCards
- * @param boolean $nullExpected
+ * @param boolean $expectedSummary
* @param string | null $data
*/
- public function testBuildBirthdayFromContact($nullExpected, $data) {
+ public function testBuildBirthdayFromContact($expectedSummary, $data) {
$cal = $this->service->buildDateFromContact($data, 'BDAY', '*');
- if ($nullExpected) {
+ if ($expectedSummary === null) {
$this->assertNull($cal);
} else {
$this->assertInstanceOf('Sabre\VObject\Component\VCalendar', $cal);
$this->assertTrue(isset($cal->VEVENT));
$this->assertEquals('FREQ=YEARLY', $cal->VEVENT->RRULE->getValue());
- $this->assertEquals('12345 (*1900)', $cal->VEVENT->SUMMARY->getValue());
+ $this->assertEquals($expectedSummary, $cal->VEVENT->SUMMARY->getValue());
$this->assertEquals('TRANSPARENT', $cal->VEVENT->TRANSP->getValue());
}
}
@@ -233,14 +233,19 @@ class BirthdayServiceTest extends TestCase {
public function providesVCards() {
return [
- [true, null],
- [true, ''],
- [true, 'yasfewf'],
- [true, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
- [true, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
- [true, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:someday\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
- [false, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:1900-01-01\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
- [false, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:1900-12-31\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ [null, null],
+ [null, ''],
+ [null, 'yasfewf'],
+ [null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ [null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ [null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:someday\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ ['12345 (*1900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:19000101\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ ['12345 (*1900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:19001231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ ['12345 *', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:--1231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ ['12345 *', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY;X-APPLE-OMIT-YEAR=1604:16041231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ [null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:;VALUE=text:circa 1800\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ [null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nN:12345;;;;\r\nBDAY:20031231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
+ ['12345 (*900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:09001231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
];
}
}
diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
index c6e833033d5..1c9ebdd09b6 100644
--- a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
@@ -188,8 +188,6 @@ class FilesPluginTest extends TestCase {
$node->expects($this->exactly(2))
->method('getOwner')
->will($this->returnValue($user));
- $node->expects($this->never())
- ->method('getSize');
$this->plugin->handleGetProperties(
$propFind,
diff --git a/apps/dav/tests/unit/Migration/ValueFixInsertTest.php b/apps/dav/tests/unit/Migration/ValueFixInsertTest.php
new file mode 100644
index 00000000000..26152e7d01d
--- /dev/null
+++ b/apps/dav/tests/unit/Migration/ValueFixInsertTest.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\DAV\Tests\Unit\DAV\Migration;
+
+use OCA\DAV\Migration\ValueFix;
+use OCA\DAV\Migration\ValueFixInsert;
+use OCP\BackgroundJob\IJobList;
+use OCP\IConfig;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\Migration\IOutput;
+use Test\TestCase;
+
+class ValueFixInsertTest extends TestCase {
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+
+ /** @var IJobList|\PHPUnit_Framework_MockObject_MockObject */
+ private $jobList;
+
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+
+ /** @var ValueFixInsert */
+ private $job;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->jobList = $this->createMock(IJobList::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->job = new ValueFixInsert(
+ $this->userManager,
+ $this->jobList,
+ $this->config
+ );
+ }
+
+ public function testGetName() {
+ $this->assertSame('Insert ValueFix background job for each user', $this->job->getName());
+ }
+
+ public function testRun() {
+ $user1 = $this->createMock(IUser::class);
+ $user1->method('getUID')->willReturn('user1');
+ $user2 = $this->createMock(IUser::class);
+ $user2->method('getUID')->willReturn('user2');
+
+ $this->config->method('getAppValue')
+ ->with(
+ $this->equalTo('dav'),
+ $this->equalTo(ValueFixInsert::class.'_ran'),
+ $this->anything()
+ )->will($this->returnCallback(function($app, $key, $value) {
+ return $value;
+ }));
+
+ $this->userManager->method('callForSeenUsers')
+ ->will($this->returnCallback(function(\Closure $function) use ($user1, $user2) {
+ $function($user1);
+ $function($user2);
+ }));
+
+ $this->jobList->expects($this->at(0))
+ ->method('add')
+ ->with(
+ $this->equalTo(ValueFix::class),
+ $this->equalTo(['user' => 'user1'])
+ );
+ $this->jobList->expects($this->at(1))
+ ->method('add')
+ ->with(
+ $this->equalTo(ValueFix::class),
+ $this->equalTo(['user' => 'user2'])
+ );
+
+ $this->job->run($this->createMock(IOutput::class));
+ }
+
+ public function testRunOnlyOnce() {
+ $this->config->method('getAppValue')
+ ->with(
+ $this->equalTo('dav'),
+ $this->equalTo(ValueFixInsert::class.'_ran'),
+ $this->anything()
+ )->willReturn('true');
+
+ $this->userManager->expects($this->never())
+ ->method($this->anything());;
+
+ $this->jobList->expects($this->never())
+ ->method($this->anything());
+
+ $this->job->run($this->createMock(IOutput::class));
+ }
+}
diff --git a/apps/dav/tests/unit/Migration/ValueFixTest.php b/apps/dav/tests/unit/Migration/ValueFixTest.php
new file mode 100644
index 00000000000..58b6f79621f
--- /dev/null
+++ b/apps/dav/tests/unit/Migration/ValueFixTest.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\DAV\Tests\Unit\DAV\Migration;
+
+use OCA\DAV\CalDAV\CalDavBackend;
+use OCA\DAV\Migration\ValueFix;
+use OCP\ILogger;
+use Sabre\VObject\InvalidDataException;
+use Test\TestCase;
+
+class ValueFixTest extends TestCase {
+
+ /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ /** @var CalDavBackend|\PHPUnit_Framework_MockObject_MockObject */
+ private $backend;
+
+ /** @var string */
+ private $invalid = 'BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//Mac OS X 10.11.2//EN
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+TRANSP:OPAQUE
+DTEND;VALUE=:20151223T223000Z
+LAST-MODIFIED:20151214T091032Z
+ORGANIZER;CN="User 1":mailto:user1@example.com
+UID:1234567890@example.com
+DTSTAMP:20151214T091032Z
+STATUS:CONFIRMED
+SEQUENCE:0
+SUMMARY:Ein Geburtstag
+DTSTART;VALUE=:20151223T173000Z
+X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
+CREATED;VALUE=:20151214T091032Z
+END:VEVENT
+END:VCALENDAR';
+
+ /** @var string */
+ private $valid = 'BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//Mac OS X 10.11.2//EN
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+TRANSP:OPAQUE
+DTEND:20151223T223000Z
+LAST-MODIFIED:20151214T091032Z
+ORGANIZER;CN="User 1":mailto:user1@example.com
+UID:1234567890@example.com
+DTSTAMP:20151214T091032Z
+STATUS:CONFIRMED
+SEQUENCE:0
+SUMMARY:Ein Geburtstag
+DTSTART:20151223T173000Z
+X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
+CREATED:20151214T091032Z
+END:VEVENT
+END:VCALENDAR';
+
+ /** @var ValueFix */
+ private $job;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->logger = $this->createMock(ILogger::class);
+ $this->backend = $this->createMock(CalDavBackend::class);
+ $this->job = new ValueFix(
+ $this->backend,
+ $this->logger
+ );
+ }
+
+ public function testRunInvalid() {
+ $calendars = [['id' => 42]];
+ $objects = [['uri' => 'myuri']];
+
+ $this->backend->method('getCalendarsForUser')
+ ->with($this->equalTo('principals/users/u1'))
+ ->willReturn($calendars);
+
+ $this->backend->method('getCalendarObjects')
+ ->with($this->equalTo(42))
+ ->willReturn($objects);
+
+ $this->backend->method('getCalendarObject')
+ ->with(
+ $this->equalTo(42),
+ $this->equalTo('myuri')
+ )->willReturn([
+ 'calendardata' => $this->invalid
+ ]);
+
+ $this->backend->expects($this->once())
+ ->method('getDenormalizedData')
+ ->with($this->valid);
+
+ $this->backend->expects($this->once())
+ ->method('updateCalendarObject')
+ ->with(
+ $this->equalTo(42),
+ $this->equalTo('myuri'),
+ $this->equalTo($this->valid)
+ );
+
+ $this->job->run(['user' => 'u1']);
+ }
+
+ public function testRunValid() {
+ $calendars = [['id' => 42]];
+ $objects = [['uri' => 'myuri']];
+
+ $this->backend->method('getCalendarsForUser')
+ ->with($this->equalTo('principals/users/u1'))
+ ->willReturn($calendars);
+
+ $this->backend->method('getCalendarObjects')
+ ->with($this->equalTo(42))
+ ->willReturn($objects);
+
+ $this->backend->method('getCalendarObject')
+ ->with(
+ $this->equalTo(42),
+ $this->equalTo('myuri')
+ )->willReturn([
+ 'calendardata' => $this->valid
+ ]);
+
+ $this->backend->expects($this->never())
+ ->method('getDenormalizedData');
+
+ $this->backend->expects($this->never())
+ ->method('updateCalendarObject');
+
+ $this->job->run(['user' => 'u1']);
+ }
+
+ public function testRunStillInvalid() {
+ $calendars = [['id' => 42]];
+ $objects = [['uri' => 'myuri']];
+
+ $this->backend->method('getCalendarsForUser')
+ ->with($this->equalTo('principals/users/u1'))
+ ->willReturn($calendars);
+
+ $this->backend->method('getCalendarObjects')
+ ->with($this->equalTo(42))
+ ->willReturn($objects);
+
+ $this->backend->method('getCalendarObject')
+ ->with(
+ $this->equalTo(42),
+ $this->equalTo('myuri')
+ )->willReturn([
+ 'calendardata' => $this->invalid
+ ]);
+
+ $this->backend->expects($this->once())
+ ->method('getDenormalizedData')
+ ->with($this->valid)
+ ->willThrowException(new InvalidDataException());
+
+ $this->logger->expects($this->once())
+ ->method('info')
+ ->with(
+ $this->equalTo('Calendar object for calendar {cal} with uri {uri} still invalid'),
+ $this->equalTo([
+ 'app'=> 'dav',
+ 'cal' => 42,
+ 'uri' => 'myuri',
+ ])
+ );
+
+ $this->backend->expects($this->never())
+ ->method('updateCalendarObject');
+
+ $this->job->run(['user' => 'u1']);
+ }
+}
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php
index 43674f4b795..3722bd9d25a 100644
--- a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php
+++ b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php
@@ -24,19 +24,17 @@
namespace OCA\DAV\Tests\unit\SystemTag;
-use Sabre\DAV\Exception\NotFound;
-use Sabre\DAV\Exception\MethodNotAllowed;
-use Sabre\DAV\Exception\Conflict;
use OC\SystemTag\SystemTag;
use OCP\SystemTag\TagNotFoundException;
use OCP\SystemTag\TagAlreadyExistsException;
use OCP\SystemTag\ISystemTag;
+use Sabre\DAV\Exception\Forbidden;
class SystemTagNodeTest extends \Test\TestCase {
/**
- * @var \OCP\SystemTag\ISystemTagManager
+ * @var \OCP\SystemTag\ISystemTagManager|\PHPUnit_Framework_MockObject_MockObject
*/
private $tagManager;
@@ -113,7 +111,7 @@ class SystemTagNodeTest extends \Test\TestCase {
/**
* @dataProvider tagNodeProvider
*/
- public function testUpdateTag($isAdmin, $originalTag, $changedArgs) {
+ public function testUpdateTag($isAdmin, ISystemTag $originalTag, $changedArgs) {
$this->tagManager->expects($this->once())
->method('canUserSeeTag')
->with($originalTag)
@@ -173,7 +171,7 @@ class SystemTagNodeTest extends \Test\TestCase {
/**
* @dataProvider tagNodeProviderPermissionException
*/
- public function testUpdateTagPermissionException($originalTag, $changedArgs, $expectedException = null) {
+ public function testUpdateTagPermissionException(ISystemTag $originalTag, $changedArgs, $expectedException = null) {
$this->tagManager->expects($this->any())
->method('canUserSeeTag')
->with($originalTag)
@@ -242,17 +240,16 @@ class SystemTagNodeTest extends \Test\TestCase {
*/
public function testDeleteTag($isAdmin) {
$tag = new SystemTag(1, 'tag1', true, true);
- $this->tagManager->expects($this->once())
+ $this->tagManager->expects($isAdmin ? $this->once() : $this->never())
->method('canUserSeeTag')
->with($tag)
->will($this->returnValue(true));
- $this->tagManager->expects($this->once())
- ->method('canUserAssignTag')
- ->with($tag)
- ->will($this->returnValue(true));
- $this->tagManager->expects($this->once())
+ $this->tagManager->expects($isAdmin ? $this->once() : $this->never())
->method('deleteTags')
->with('1');
+ if (!$isAdmin) {
+ $this->setExpectedException(Forbidden::class);
+ }
$this->getTagNode($isAdmin, $tag)->delete();
}
@@ -261,7 +258,7 @@ class SystemTagNodeTest extends \Test\TestCase {
[
// cannot delete invisible tag
new SystemTag(1, 'Original', false, true),
- 'Sabre\DAV\Exception\NotFound',
+ 'Sabre\DAV\Exception\Forbidden',
],
[
// cannot delete non-assignable tag
@@ -279,20 +276,11 @@ class SystemTagNodeTest extends \Test\TestCase {
->method('canUserSeeTag')
->with($tag)
->will($this->returnValue($tag->isUserVisible()));
- $this->tagManager->expects($this->any())
- ->method('canUserAssignTag')
- ->with($tag)
- ->will($this->returnValue($tag->isUserAssignable()));
$this->tagManager->expects($this->never())
->method('deleteTags');
- try {
- $this->getTagNode(false, $tag)->delete();
- } catch (\Exception $e) {
- $thrown = $e;
- }
-
- $this->assertInstanceOf($expectedException, $thrown);
+ $this->setExpectedException($expectedException);
+ $this->getTagNode(false, $tag)->delete();
}
/**
@@ -304,14 +292,10 @@ class SystemTagNodeTest extends \Test\TestCase {
->method('canUserSeeTag')
->with($tag)
->will($this->returnValue($tag->isUserVisible()));
- $this->tagManager->expects($this->any())
- ->method('canUserAssignTag')
- ->with($tag)
- ->will($this->returnValue($tag->isUserAssignable()));
$this->tagManager->expects($this->once())
->method('deleteTags')
->with('1')
->will($this->throwException(new TagNotFoundException()));
- $this->getTagNode(false, $tag)->delete();
+ $this->getTagNode(true, $tag)->delete();
}
}
diff --git a/apps/encryption/appinfo/info.xml b/apps/encryption/appinfo/info.xml
index 0bb3efebf5f..307fef4ad8a 100644
--- a/apps/encryption/appinfo/info.xml
+++ b/apps/encryption/appinfo/info.xml
@@ -18,14 +18,13 @@
<user>user-encryption</user>
<admin>admin-encryption</admin>
</documentation>
- <rememberlogin>false</rememberlogin>
- <version>1.4.1</version>
+ <version>1.6.0</version>
<types>
<filesystem/>
</types>
<dependencies>
<lib>openssl</lib>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
<admin>OCA\Encryption\Settings\Admin</admin>
diff --git a/apps/encryption/css/settings-personal.css b/apps/encryption/css/settings-personal.css
index 8eb5bedcb06..4bab1a8d46b 100644
--- a/apps/encryption/css/settings-personal.css
+++ b/apps/encryption/css/settings-personal.css
@@ -8,3 +8,8 @@
, #recoveryEnabledSuccess {
display: none;
}
+
+/* icons for sidebar */
+.nav-icon-basic-encryption-module {
+ background-image: url('../img/app.svg?v=1');
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/cs_CZ.js b/apps/encryption/l10n/cs_CZ.js
index 5dfabbe8ec2..6539f76e69b 100644
--- a/apps/encryption/l10n/cs_CZ.js
+++ b/apps/encryption/l10n/cs_CZ.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Povolit obnovu hesla:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Enabled" : "Povoleno",
- "Disabled" : "Zakázáno",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (Nextcloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče v osobním nastavení, abyste znovu získali přístup ke svým zašifrovaným souborům.",
- "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena a připravena",
- "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 'Nextcloud 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" : "Ahoj!\n\nAdministrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla '%s'.\n\nPřihlašte se do webového rozhraní, přejděte do nastavení 'základního šifrovacího modulu Nextcloud' a aktualizujte šifrovací heslo zadáním hesla výše do pole 'původní přihlašovací heslo' a svého aktuálního přihlašovacího hesla.\n\n",
- "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 \"Nextcloud 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>" : "Ahoj!<br><br>Administrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla <strong>%s<strong>.<br><br>Přihlašte se do webového rozhraní, přejděte do nastavení \"základního šifrovacího modulu Nextcloud\" a aktualizujte šifrovací heslo zadáním hesla výše do pole \"původní přihlašovací heslo\" a svého aktuálního přihlašovacího hesla.<br><br>",
- "Nextcloud basic encryption module" : "Základní šifrovací modul Nextcloud"
+ "Disabled" : "Zakázáno"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/encryption/l10n/cs_CZ.json b/apps/encryption/l10n/cs_CZ.json
index 41b8a26fd3e..c45606bbe17 100644
--- a/apps/encryption/l10n/cs_CZ.json
+++ b/apps/encryption/l10n/cs_CZ.json
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Povolit obnovu hesla:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Enabled" : "Povoleno",
- "Disabled" : "Zakázáno",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (Nextcloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče v osobním nastavení, abyste znovu získali přístup ke svým zašifrovaným souborům.",
- "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena a připravena",
- "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 'Nextcloud 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" : "Ahoj!\n\nAdministrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla '%s'.\n\nPřihlašte se do webového rozhraní, přejděte do nastavení 'základního šifrovacího modulu Nextcloud' a aktualizujte šifrovací heslo zadáním hesla výše do pole 'původní přihlašovací heslo' a svého aktuálního přihlašovacího hesla.\n\n",
- "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 \"Nextcloud 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>" : "Ahoj!<br><br>Administrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla <strong>%s<strong>.<br><br>Přihlašte se do webového rozhraní, přejděte do nastavení \"základního šifrovacího modulu Nextcloud\" a aktualizujte šifrovací heslo zadáním hesla výše do pole \"původní přihlašovací heslo\" a svého aktuálního přihlašovacího hesla.<br><br>",
- "Nextcloud basic encryption module" : "Základní šifrovací modul Nextcloud"
+ "Disabled" : "Zakázáno"
},"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/de.js b/apps/encryption/l10n/de.js
index 8f7cb476085..ab78c42e81d 100644
--- a/apps/encryption/l10n/de.js
+++ b/apps/encryption/l10n/de.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Passwortwiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Wenn Du diese Option aktivierst, kannst Du Deine verschlüsselten Dateien wiederherstellen, falls Du Dein Passwort vergisst",
"Enabled" : "Aktiviert",
- "Disabled" : "Deaktiviert",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du musst Deine Verschlüsselungs-Schlüssel von der Alten Vershlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führe 'occ encryption:migrate' aus oder kontaktiere den Administrator",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte Ihr privates Schlüssel-Passwort aktualisieren, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
- "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit.",
- "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 'Nextcloud 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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n\n",
- "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 \"Nextcloud 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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melde dich im Web-Interface an, gehe in deine persönlichen Einstellungen. Dort findest du die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisiere dort dein Verschlüsselungspasswort indem du das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingibst.<br><br>",
- "Nextcloud basic encryption module" : "Nextcloud-Basisverschlüsselungsmodul"
+ "Disabled" : "Deaktiviert"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json
index b1ba0ec586d..e326123e21b 100644
--- a/apps/encryption/l10n/de.json
+++ b/apps/encryption/l10n/de.json
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Passwortwiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Wenn Du diese Option aktivierst, kannst Du Deine verschlüsselten Dateien wiederherstellen, falls Du Dein Passwort vergisst",
"Enabled" : "Aktiviert",
- "Disabled" : "Deaktiviert",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du musst Deine Verschlüsselungs-Schlüssel von der Alten Vershlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führe 'occ encryption:migrate' aus oder kontaktiere den Administrator",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte Ihr privates Schlüssel-Passwort aktualisieren, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
- "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit.",
- "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 'Nextcloud 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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n\n",
- "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 \"Nextcloud 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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melde dich im Web-Interface an, gehe in deine persönlichen Einstellungen. Dort findest du die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisiere dort dein Verschlüsselungspasswort indem du das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingibst.<br><br>",
- "Nextcloud basic encryption module" : "Nextcloud-Basisverschlüsselungsmodul"
+ "Disabled" : "Deaktiviert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/de_DE.js b/apps/encryption/l10n/de_DE.js
index 5580dc11a64..2a90f6eaf1e 100644
--- a/apps/encryption/l10n/de_DE.js
+++ b/apps/encryption/l10n/de_DE.js
@@ -33,7 +33,7 @@ OC.L10N.register(
"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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte melden Sie sich im Web-Interface an, gehen Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.\n\n",
"The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
"Cheers!" : "Noch einen schönen Tag!",
- "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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<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>" : "Hollo,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an und gehen Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Login-Passwort-' und in das 'aktuelles Login-Passwort' Feld eingeben.<br><br>",
"Default encryption module" : "Standard Verschlüsselungsmodul",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsslen",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Enabled" : "Aktiviert",
- "Disabled" : "Deaktiviert",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (Nextcloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator. ",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
- "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit",
- "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 'Nextcloud 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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n",
- "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 \"Nextcloud 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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>",
- "Nextcloud basic encryption module" : "Nextcloud Basisverschlüsselungsmodul"
+ "Disabled" : "Deaktiviert"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/de_DE.json b/apps/encryption/l10n/de_DE.json
index 49f7a677fcc..00964f8eabf 100644
--- a/apps/encryption/l10n/de_DE.json
+++ b/apps/encryption/l10n/de_DE.json
@@ -31,7 +31,7 @@
"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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte melden Sie sich im Web-Interface an, gehen Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.\n\n",
"The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
"Cheers!" : "Noch einen schönen Tag!",
- "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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<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>" : "Hollo,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an und gehen Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Login-Passwort-' und in das 'aktuelles Login-Passwort' Feld eingeben.<br><br>",
"Default encryption module" : "Standard Verschlüsselungsmodul",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsslen",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Enabled" : "Aktiviert",
- "Disabled" : "Deaktiviert",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (Nextcloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator. ",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
- "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit",
- "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 'Nextcloud 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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n",
- "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 \"Nextcloud 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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>",
- "Nextcloud basic encryption module" : "Nextcloud Basisverschlüsselungsmodul"
+ "Disabled" : "Deaktiviert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/el.js b/apps/encryption/l10n/el.js
index 5ca8b383e04..346520235b3 100644
--- a/apps/encryption/l10n/el.js
+++ b/apps/encryption/l10n/el.js
@@ -22,8 +22,11 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.",
"Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
"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" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε εκτελέστε την εντολή 'occ encryption:migrate' ή επικοινωνήστε με το διαχειριστή σας.",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδιού σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Encryption app is enabled and ready" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη",
"Bad Signature" : "Κακή υπογραφή",
+ "Missing Signature" : "Ελλιπής υπογραφή",
"one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.",
@@ -31,6 +34,7 @@ OC.L10N.register(
"The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
"Cheers!" : "Χαιρετισμούς!",
"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>" : "Χαίρετε,<br><br>ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό <strong>%s</strong>.<br><br>Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.",
+ "Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτή της επιλογής κρυπτογραφεί όλα τα αρχεία που βρίσκονται στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν.",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
@@ -43,6 +47,7 @@ OC.L10N.register(
"New recovery key password" : "Νέος κωδικός κλειδιού ανάκτησης",
"Repeat new recovery key password" : "Επαναλάβετε το νέο κωδικό κλειδιού ανάκτησης",
"Change Password" : "Αλλαγή Κωδικού Πρόσβασης",
+ "Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Your private key password no longer matches your log-in password." : "Ο κωδικός του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας κωδικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης.",
@@ -53,7 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Ενεργοποιήστε την ανάκτηση κωδικού πρόσβασης",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
- "Disabled" : "Απενεργοποιημένο",
- "Nextcloud basic encryption module" : "Βασικό άρθρωμα κρυπτογράφησης Netcloud"
+ "Disabled" : "Απενεργοποιημένο"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/el.json b/apps/encryption/l10n/el.json
index f668f535ea1..c94d56a61f1 100644
--- a/apps/encryption/l10n/el.json
+++ b/apps/encryption/l10n/el.json
@@ -20,8 +20,11 @@
"The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.",
"Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
"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" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε εκτελέστε την εντολή 'occ encryption:migrate' ή επικοινωνήστε με το διαχειριστή σας.",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδιού σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Encryption app is enabled and ready" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη",
"Bad Signature" : "Κακή υπογραφή",
+ "Missing Signature" : "Ελλιπής υπογραφή",
"one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.",
@@ -29,6 +32,7 @@
"The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
"Cheers!" : "Χαιρετισμούς!",
"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>" : "Χαίρετε,<br><br>ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό <strong>%s</strong>.<br><br>Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.",
+ "Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτή της επιλογής κρυπτογραφεί όλα τα αρχεία που βρίσκονται στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν.",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
@@ -41,6 +45,7 @@
"New recovery key password" : "Νέος κωδικός κλειδιού ανάκτησης",
"Repeat new recovery key password" : "Επαναλάβετε το νέο κωδικό κλειδιού ανάκτησης",
"Change Password" : "Αλλαγή Κωδικού Πρόσβασης",
+ "Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Your private key password no longer matches your log-in password." : "Ο κωδικός του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας κωδικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης.",
@@ -51,7 +56,6 @@
"Enable password recovery:" : "Ενεργοποιήστε την ανάκτηση κωδικού πρόσβασης",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
- "Disabled" : "Απενεργοποιημένο",
- "Nextcloud basic encryption module" : "Βασικό άρθρωμα κρυπτογράφησης Netcloud"
+ "Disabled" : "Απενεργοποιημένο"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js
index ea00c610b8f..e8ee7f52b9f 100644
--- a/apps/encryption/l10n/es.js
+++ b/apps/encryption/l10n/es.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"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",
"Enabled" : "Habilitar",
- "Disabled" : "Deshabilitado",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesita migrar sus claves de cifrado desde el antiguo modelo de cifrado (Nextcloud <= 8.0) al nuevo. Por favor ejecute 'occ encryption:migrate' o contáctese con su administrador.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualice la contraseña de su clave privada en sus ajustes personales para recuperar el acceso a sus archivos cifrados.",
- "Encryption App is enabled and ready" : "La app de cifrado esta habilitada y preparada",
- "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 'Nextcloud 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" : "Hola,\n\nel administrador ha activado el cifrado de datos en servidor. Tus archivos han sido cifrados usando la contraseña '%s'.\n\nPor favor, inicia tu sesión desde la interfaz web, ve a la sección 'módulo de cifrado básico' de tu área de ajustes personales y actualiza la contraseña de cifrado. Para ello, deberás introducir esta contraseña en el campo 'contraseña de acceso antigua' junto con tu actual contraseña de acceso.\n\n",
- "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 \"Nextcloud 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>" : "¡Hola!<br><br> El administrador ha habilitado el cifrado en el servidor. Sus archivos han sido cifrados usando la contraseña <strong>%s</strong>.<br><br>Por favor, regístrese en la interfaz web, vaya a la sección \"Módulo de cifrado básico de Nextcloud\" de sus configuraciones personales y actualice su contraseña de cifrado introduciendo esta contraseña en el campo \"contraseña de acceso antigua\" y su contraseña de acceso actual.<br><br>",
- "Nextcloud basic encryption module" : "Modulo básico de cifrado de Nextcloud "
+ "Disabled" : "Deshabilitado"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json
index b5a8ede960c..6b0656f808a 100644
--- a/apps/encryption/l10n/es.json
+++ b/apps/encryption/l10n/es.json
@@ -56,12 +56,6 @@
"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",
"Enabled" : "Habilitar",
- "Disabled" : "Deshabilitado",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesita migrar sus claves de cifrado desde el antiguo modelo de cifrado (Nextcloud <= 8.0) al nuevo. Por favor ejecute 'occ encryption:migrate' o contáctese con su administrador.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualice la contraseña de su clave privada en sus ajustes personales para recuperar el acceso a sus archivos cifrados.",
- "Encryption App is enabled and ready" : "La app de cifrado esta habilitada y preparada",
- "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 'Nextcloud 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" : "Hola,\n\nel administrador ha activado el cifrado de datos en servidor. Tus archivos han sido cifrados usando la contraseña '%s'.\n\nPor favor, inicia tu sesión desde la interfaz web, ve a la sección 'módulo de cifrado básico' de tu área de ajustes personales y actualiza la contraseña de cifrado. Para ello, deberás introducir esta contraseña en el campo 'contraseña de acceso antigua' junto con tu actual contraseña de acceso.\n\n",
- "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 \"Nextcloud 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>" : "¡Hola!<br><br> El administrador ha habilitado el cifrado en el servidor. Sus archivos han sido cifrados usando la contraseña <strong>%s</strong>.<br><br>Por favor, regístrese en la interfaz web, vaya a la sección \"Módulo de cifrado básico de Nextcloud\" de sus configuraciones personales y actualice su contraseña de cifrado introduciendo esta contraseña en el campo \"contraseña de acceso antigua\" y su contraseña de acceso actual.<br><br>",
- "Nextcloud basic encryption module" : "Modulo básico de cifrado de Nextcloud "
+ "Disabled" : "Deshabilitado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js
index 326466c8e04..14b693baa28 100644
--- a/apps/encryption/l10n/fr.js
+++ b/apps/encryption/l10n/fr.js
@@ -12,7 +12,7 @@ OC.L10N.register(
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
- "Password successfully changed." : "Mot de passe changé avec succès.",
+ "Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Activer la récupération du mot de passe :",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Activer cette option vous permettra d'obtenir à nouveau l'accès à vos fichiers chiffrés en cas de perte de mot de passe",
"Enabled" : "Activé",
- "Disabled" : "Désactivé",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (NextCloud <= 8.0) vers la nouvelle. Veuillez exécuter 'occ encryption:migrate' ou contacter votre administrateur",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour Encryption App est invalide. Veuillez mettre à jour votre mot de passe de la clef privée dans vos paramètres personnels afin de retrouver l'accès à vos fichiers chiffrés.",
- "Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête",
- "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 'Nextcloud 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" : "Bonjour\n\nL'administrateur du serveur à activé le chiffrement côté serveur. Vos fichiers seront chiffrés en utilisant le mot de passe '%s'.\n\nMerci de vous connecter à l'interface web, aller dans la section 'Module de chiffrement basique' dans vos paramètres personnes et mettez à jour votre mot de passe de chiffrement en entrant se mot de passe dans le champs 'ancien mot de passe de connexion' et vos identifiant mots de passe actuels.\n\n",
- "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 \"Nextcloud 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>" : "Bonjour, <br><br>l'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe suivant : <strong>%s</strong>.<br><br>Veuillez vous connectez à l'interface web, allez à la section \"Module de chiffrement basique Nextcloud\" dans vos paramètres personnels et entrez le mot de passe fourni ci-dessus dans le champ \"Ancien mot de passe de connexion\", entrez votre mot de passe que vous utilisez actuellement pour vous connecter dans le champ \"Actuel mot de passe de connexion\".<br><br>",
- "Nextcloud basic encryption module" : "Module de chiffrement Nextcloud"
+ "Disabled" : "Désactivé"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json
index 209991c3869..74c0b7492a8 100644
--- a/apps/encryption/l10n/fr.json
+++ b/apps/encryption/l10n/fr.json
@@ -10,7 +10,7 @@
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
- "Password successfully changed." : "Mot de passe changé avec succès.",
+ "Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Activer la récupération du mot de passe :",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Activer cette option vous permettra d'obtenir à nouveau l'accès à vos fichiers chiffrés en cas de perte de mot de passe",
"Enabled" : "Activé",
- "Disabled" : "Désactivé",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (NextCloud <= 8.0) vers la nouvelle. Veuillez exécuter 'occ encryption:migrate' ou contacter votre administrateur",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour Encryption App est invalide. Veuillez mettre à jour votre mot de passe de la clef privée dans vos paramètres personnels afin de retrouver l'accès à vos fichiers chiffrés.",
- "Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête",
- "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 'Nextcloud 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" : "Bonjour\n\nL'administrateur du serveur à activé le chiffrement côté serveur. Vos fichiers seront chiffrés en utilisant le mot de passe '%s'.\n\nMerci de vous connecter à l'interface web, aller dans la section 'Module de chiffrement basique' dans vos paramètres personnes et mettez à jour votre mot de passe de chiffrement en entrant se mot de passe dans le champs 'ancien mot de passe de connexion' et vos identifiant mots de passe actuels.\n\n",
- "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 \"Nextcloud 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>" : "Bonjour, <br><br>l'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe suivant : <strong>%s</strong>.<br><br>Veuillez vous connectez à l'interface web, allez à la section \"Module de chiffrement basique Nextcloud\" dans vos paramètres personnels et entrez le mot de passe fourni ci-dessus dans le champ \"Ancien mot de passe de connexion\", entrez votre mot de passe que vous utilisez actuellement pour vous connecter dans le champ \"Actuel mot de passe de connexion\".<br><br>",
- "Nextcloud basic encryption module" : "Module de chiffrement Nextcloud"
+ "Disabled" : "Désactivé"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/hu_HU.js b/apps/encryption/l10n/hu_HU.js
index eaa09295111..620bcb8bd62 100644
--- a/apps/encryption/l10n/hu_HU.js
+++ b/apps/encryption/l10n/hu_HU.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Jelszó-visszaállítás bekapcsolása",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított fájlok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
"Enabled" : "Bekapcsolva",
- "Disabled" : "Kikapcsolva",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Migrálni kell a titkosítási kulcsaidat a rég titkosításról (Nextcloud <= 8.0) az újra. Kérlek futtasd az 'occ encryption:migrate' parancsot, vagy lépj kapcsolatba az adminisztrátorral",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A titkosító alkalmazás privát kulcsa érvénytelen. A titkosított fájljaidhoz való hozzáféréshez frissítsd a privát kulcsod jelszavát a személyes beállításoknál.",
- "Encryption App is enabled and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
- "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 'Nextcloud 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" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\n",
- "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 \"Nextcloud 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>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
- "Nextcloud basic encryption module" : "Nextcloud alap titkosítási modul"
+ "Disabled" : "Kikapcsolva"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/hu_HU.json b/apps/encryption/l10n/hu_HU.json
index a4d3de9da44..fd3595fdfa0 100644
--- a/apps/encryption/l10n/hu_HU.json
+++ b/apps/encryption/l10n/hu_HU.json
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Jelszó-visszaállítás bekapcsolása",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított fájlok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
"Enabled" : "Bekapcsolva",
- "Disabled" : "Kikapcsolva",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Migrálni kell a titkosítási kulcsaidat a rég titkosításról (Nextcloud <= 8.0) az újra. Kérlek futtasd az 'occ encryption:migrate' parancsot, vagy lépj kapcsolatba az adminisztrátorral",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A titkosító alkalmazás privát kulcsa érvénytelen. A titkosított fájljaidhoz való hozzáféréshez frissítsd a privát kulcsod jelszavát a személyes beállításoknál.",
- "Encryption App is enabled and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
- "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 'Nextcloud 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" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\n",
- "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 \"Nextcloud 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>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
- "Nextcloud basic encryption module" : "Nextcloud alap titkosítási modul"
+ "Disabled" : "Kikapcsolva"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js
index 3a8a7369397..41a6cfd74a7 100644
--- a/apps/encryption/l10n/id.js
+++ b/apps/encryption/l10n/id.js
@@ -34,6 +34,7 @@ OC.L10N.register(
"The share will expire on %s." : "Pembagian akan berakhir pada %s.",
"Cheers!" : "Horee!",
"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>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>",
+ "Default encryption module" : "Modul bawaan enkripsi",
"Encrypt the home storage" : "Enkripsi penyimpanan rumah",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Mengaktifkan opsi ini akan mengenkripsi semua berkas yang disimpan pada penyimpanan utama, jika tidak diaktifkan maka hanya berkas pada penyimpanan eksternal saja yang akan dienkripsi.",
"Enable recovery key" : "Aktifkan kunci pemulihan",
@@ -57,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Aktifkan sandi pemulihan:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi",
"Enabled" : "Diaktifkan",
- "Disabled" : "Dinonaktifkan",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Anda perlu mengganti kunci enkripsi Anda dari enkripsi lama (Nextcloud <= 8.0) ke yang baru. Mohon jalankan 'occ encryption:migrate' atau hubungi administrator Anda",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk aplikasi enkripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienkripsi.",
- "Encryption App is enabled and ready" : "Apl enkripsi aktif dan siap",
- "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 'Nextcloud 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" : "Hai,\n\nadmin telah mengaktifkan enkripsi server-side. Berkas Anda dienkripsi dengan menggunakan sandi '%s'.\n\nMogon log masuk ke tampilan web, masuk ke bagian 'modul enkripsi dasar Nextcloud' dalam pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini ke 'sandi masuk yang lama' dan sandi masuk yang sekarang.\n\n",
- "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 \"Nextcloud 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>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar Nextcloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>",
- "Nextcloud basic encryption module" : "Modul enkripsi dasar Nextcloud"
+ "Disabled" : "Dinonaktifkan"
},
"nplurals=1; plural=0;");
diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json
index be04544f582..e653db4f950 100644
--- a/apps/encryption/l10n/id.json
+++ b/apps/encryption/l10n/id.json
@@ -32,6 +32,7 @@
"The share will expire on %s." : "Pembagian akan berakhir pada %s.",
"Cheers!" : "Horee!",
"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>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>",
+ "Default encryption module" : "Modul bawaan enkripsi",
"Encrypt the home storage" : "Enkripsi penyimpanan rumah",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Mengaktifkan opsi ini akan mengenkripsi semua berkas yang disimpan pada penyimpanan utama, jika tidak diaktifkan maka hanya berkas pada penyimpanan eksternal saja yang akan dienkripsi.",
"Enable recovery key" : "Aktifkan kunci pemulihan",
@@ -55,12 +56,6 @@
"Enable password recovery:" : "Aktifkan sandi pemulihan:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi",
"Enabled" : "Diaktifkan",
- "Disabled" : "Dinonaktifkan",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Anda perlu mengganti kunci enkripsi Anda dari enkripsi lama (Nextcloud <= 8.0) ke yang baru. Mohon jalankan 'occ encryption:migrate' atau hubungi administrator Anda",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk aplikasi enkripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienkripsi.",
- "Encryption App is enabled and ready" : "Apl enkripsi aktif dan siap",
- "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 'Nextcloud 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" : "Hai,\n\nadmin telah mengaktifkan enkripsi server-side. Berkas Anda dienkripsi dengan menggunakan sandi '%s'.\n\nMogon log masuk ke tampilan web, masuk ke bagian 'modul enkripsi dasar Nextcloud' dalam pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini ke 'sandi masuk yang lama' dan sandi masuk yang sekarang.\n\n",
- "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 \"Nextcloud 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>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar Nextcloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>",
- "Nextcloud basic encryption module" : "Modul enkripsi dasar Nextcloud"
+ "Disabled" : "Dinonaktifkan"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/it.js b/apps/encryption/l10n/it.js
index 6a5c7450ed3..f8a88ee68ce 100644
--- a/apps/encryption/l10n/it.js
+++ b/apps/encryption/l10n/it.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Abilita il ripristino della password:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "L'abilitazione di questa opzione ti consentirà di accedere nuovamente ai file cifrati in caso di perdita della password",
"Enabled" : "Abilitata",
- "Disabled" : "Disabilitata",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (Nextcloud <= 8.0) alla nuova. Esegui 'occ encryption:migrate' o contatta il tuo amministratore",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
- "Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta",
- "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 'Nextcloud 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" : "Ciao,\n\nl'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati\ncifrati utilizzando la password '%s'.\n\nAccedi all'interfaccia web, vai alla sezione 'modulo di cifratura base di Nextcloud' dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo 'vecchia password di accesso' e la tua nuova password.\n\n",
- "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 \"Nextcloud 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>" : "Ciao,<br><br>l'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati cifrati utilizzando la password <strong>%s</strong>.<br><br>Accedi all'interfaccia web, vai alla sezione \"modulo di cifratura base di Nextcloud\" dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo \"vecchia password di accesso\" e la tua nuova password.<br><br>",
- "Nextcloud basic encryption module" : "Modulo di cifratura base di Nextcloud"
+ "Disabled" : "Disabilitata"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/it.json b/apps/encryption/l10n/it.json
index f7bf9bc9f46..78c47025416 100644
--- a/apps/encryption/l10n/it.json
+++ b/apps/encryption/l10n/it.json
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Abilita il ripristino della password:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "L'abilitazione di questa opzione ti consentirà di accedere nuovamente ai file cifrati in caso di perdita della password",
"Enabled" : "Abilitata",
- "Disabled" : "Disabilitata",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (Nextcloud <= 8.0) alla nuova. Esegui 'occ encryption:migrate' o contatta il tuo amministratore",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
- "Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta",
- "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 'Nextcloud 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" : "Ciao,\n\nl'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati\ncifrati utilizzando la password '%s'.\n\nAccedi all'interfaccia web, vai alla sezione 'modulo di cifratura base di Nextcloud' dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo 'vecchia password di accesso' e la tua nuova password.\n\n",
- "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 \"Nextcloud 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>" : "Ciao,<br><br>l'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati cifrati utilizzando la password <strong>%s</strong>.<br><br>Accedi all'interfaccia web, vai alla sezione \"modulo di cifratura base di Nextcloud\" dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo \"vecchia password di accesso\" e la tua nuova password.<br><br>",
- "Nextcloud basic encryption module" : "Modulo di cifratura base di Nextcloud"
+ "Disabled" : "Disabilitata"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/ja.js b/apps/encryption/l10n/ja.js
index 8f2a9e0253c..5121897cc05 100644
--- a/apps/encryption/l10n/ja.js
+++ b/apps/encryption/l10n/ja.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "パスワードリカバリを有効に:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "このオプションを有効にすると、パスワードを紛失した場合も、暗号化されたファイルに再度アクセスすることができるようになります。",
"Enabled" : "有効",
- "Disabled" : "無効",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "古い暗号化(Nextcloud 8.0以前)から新しい方へ、暗号化キーを移行する必要があります。'occ encryption:migrate' を実行するか、管理者に問い合わせてください。",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。",
- "Encryption App is enabled and ready" : "暗号化アプリは有効になっており、準備が整いました",
- "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 'Nextcloud 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" : "こんにちは、\n\n管理者がサーバーサイド暗号化を有効にしました。'%s'というパスワードであなたのファイルが暗号化されました。\n\nWeb画面からログインして、個人設定画面の'Nextcloud基本暗号化モジュール' セクションにいき、暗号化パスワードの更新をお願いします。 '旧ログインパスワード'部分に上記パスワードを入力し、現在のログインパスワードで更新します。\n",
- "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 \"Nextcloud 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>" : "こんにちは、<br><br>管理者がサーバーサイド暗号化を有効にしました。<strong>%s</strong>というパスワードであなたのファイルが暗号化されました。<br><br>Web画面からログインして、個人設定画面の\"Nextcloud基本暗号化モジュール\"のセクションにいき、暗号化パスワードの更新をお願いします。 \"旧ログインパスワード”部分に上記パスワードを入力し、現在のログインパスワードで更新します。<br><br>",
- "Nextcloud basic encryption module" : "Nextcloud 基本暗号化モジュール"
+ "Disabled" : "無効"
},
"nplurals=1; plural=0;");
diff --git a/apps/encryption/l10n/ja.json b/apps/encryption/l10n/ja.json
index 28c4a528a94..072e9fbf612 100644
--- a/apps/encryption/l10n/ja.json
+++ b/apps/encryption/l10n/ja.json
@@ -56,12 +56,6 @@
"Enable password recovery:" : "パスワードリカバリを有効に:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "このオプションを有効にすると、パスワードを紛失した場合も、暗号化されたファイルに再度アクセスすることができるようになります。",
"Enabled" : "有効",
- "Disabled" : "無効",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "古い暗号化(Nextcloud 8.0以前)から新しい方へ、暗号化キーを移行する必要があります。'occ encryption:migrate' を実行するか、管理者に問い合わせてください。",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。",
- "Encryption App is enabled and ready" : "暗号化アプリは有効になっており、準備が整いました",
- "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 'Nextcloud 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" : "こんにちは、\n\n管理者がサーバーサイド暗号化を有効にしました。'%s'というパスワードであなたのファイルが暗号化されました。\n\nWeb画面からログインして、個人設定画面の'Nextcloud基本暗号化モジュール' セクションにいき、暗号化パスワードの更新をお願いします。 '旧ログインパスワード'部分に上記パスワードを入力し、現在のログインパスワードで更新します。\n",
- "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 \"Nextcloud 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>" : "こんにちは、<br><br>管理者がサーバーサイド暗号化を有効にしました。<strong>%s</strong>というパスワードであなたのファイルが暗号化されました。<br><br>Web画面からログインして、個人設定画面の\"Nextcloud基本暗号化モジュール\"のセクションにいき、暗号化パスワードの更新をお願いします。 \"旧ログインパスワード”部分に上記パスワードを入力し、現在のログインパスワードで更新します。<br><br>",
- "Nextcloud basic encryption module" : "Nextcloud 基本暗号化モジュール"
+ "Disabled" : "無効"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/ko.js b/apps/encryption/l10n/ko.js
index 6f2ccc3ca52..acce11543d1 100644
--- a/apps/encryption/l10n/ko.js
+++ b/apps/encryption/l10n/ko.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Missing recovery key password" : "잊어버린 복구 키 암호 복구",
"Please repeat the recovery key password" : "복구 키 암호를 다시 입력하십시오",
- "Repeated recovery key password does not match the provided recovery key password" : "입력한 복구 키 암호가 서로 다릅니다",
+ "Repeated recovery key password does not match the provided recovery key password" : "입력한 복구 키 암호가 일치하지 않습니다",
"Recovery key successfully enabled" : "복구 키가 성공적으로 활성화되었습니다",
"Could not enable recovery key. Please check your recovery key password!" : "복구 키를 활성화 할 수 없습니다. 복구 키의 암호를 확인해 주십시오!",
"Recovery key successfully disabled" : "복구 키가 성공적으로 비활성화 되었습니다",
@@ -22,6 +22,9 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "현재 로그인 암호가 잘못되었습니다. 다시 시도하십시오.",
"Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 되었습니다.",
"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" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. 'occ encryption:migrate'를 실행하거나 시스템 관리자에게 연락하십시오",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
+ "Encryption app is enabled and ready" : "암호화 앱이 활성화되었고 준비됨",
"Bad Signature" : "잘못된 서명",
"Missing Signature" : "서명 없음",
"one-time password for server-side-encryption" : "서버 측 암호화용 일회용 암호",
@@ -31,6 +34,7 @@ OC.L10N.register(
"The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.",
"Cheers!" : "감사합니다!",
"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>" : "안녕하세요,<br><br>시스템 관리자가 서버 측 암호화를 활성화했습니다. 저장된 파일이 암호 <strong>%s</strong>으(로) 암호화되었습니다.<br><br>웹 인터페이스에 로그인하여 개인 설정의 '기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.<br><br>",
+ "Default encryption module" : "기본 암호화 모듈",
"Encrypt the home storage" : "홈 저장소 암호화",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "이 옵션을 사용하면 주 저장소에 있는 모드 파일을 암호화하며, 사용하지 않으면 외부 저장소의 파일만 암호화합니다",
"Enable recovery key" : "복구 키 활성화",
@@ -43,6 +47,7 @@ OC.L10N.register(
"New recovery key password" : "새 복구 키 암호",
"Repeat new recovery key password" : "새 복구 키 암호 확인",
"Change Password" : "암호 변경",
+ "Basic encryption module" : "기본 암호화 모듈",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
"Your private key password no longer matches your log-in password." : "개인 키 암호와 로그인 암호가 일치하지 않습니다.",
"Set your old private key password to your current log-in password:" : "기존 개인 키 암호를 로그인 암호와 동일하게 설정하십시오:",
diff --git a/apps/encryption/l10n/ko.json b/apps/encryption/l10n/ko.json
index ee3ccce2869..9d708c55e68 100644
--- a/apps/encryption/l10n/ko.json
+++ b/apps/encryption/l10n/ko.json
@@ -1,7 +1,7 @@
{ "translations": {
"Missing recovery key password" : "잊어버린 복구 키 암호 복구",
"Please repeat the recovery key password" : "복구 키 암호를 다시 입력하십시오",
- "Repeated recovery key password does not match the provided recovery key password" : "입력한 복구 키 암호가 서로 다릅니다",
+ "Repeated recovery key password does not match the provided recovery key password" : "입력한 복구 키 암호가 일치하지 않습니다",
"Recovery key successfully enabled" : "복구 키가 성공적으로 활성화되었습니다",
"Could not enable recovery key. Please check your recovery key password!" : "복구 키를 활성화 할 수 없습니다. 복구 키의 암호를 확인해 주십시오!",
"Recovery key successfully disabled" : "복구 키가 성공적으로 비활성화 되었습니다",
@@ -20,6 +20,9 @@
"The current log-in password was not correct, please try again." : "현재 로그인 암호가 잘못되었습니다. 다시 시도하십시오.",
"Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 되었습니다.",
"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" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. 'occ encryption:migrate'를 실행하거나 시스템 관리자에게 연락하십시오",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
+ "Encryption app is enabled and ready" : "암호화 앱이 활성화되었고 준비됨",
"Bad Signature" : "잘못된 서명",
"Missing Signature" : "서명 없음",
"one-time password for server-side-encryption" : "서버 측 암호화용 일회용 암호",
@@ -29,6 +32,7 @@
"The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.",
"Cheers!" : "감사합니다!",
"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>" : "안녕하세요,<br><br>시스템 관리자가 서버 측 암호화를 활성화했습니다. 저장된 파일이 암호 <strong>%s</strong>으(로) 암호화되었습니다.<br><br>웹 인터페이스에 로그인하여 개인 설정의 '기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.<br><br>",
+ "Default encryption module" : "기본 암호화 모듈",
"Encrypt the home storage" : "홈 저장소 암호화",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "이 옵션을 사용하면 주 저장소에 있는 모드 파일을 암호화하며, 사용하지 않으면 외부 저장소의 파일만 암호화합니다",
"Enable recovery key" : "복구 키 활성화",
@@ -41,6 +45,7 @@
"New recovery key password" : "새 복구 키 암호",
"Repeat new recovery key password" : "새 복구 키 암호 확인",
"Change Password" : "암호 변경",
+ "Basic encryption module" : "기본 암호화 모듈",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
"Your private key password no longer matches your log-in password." : "개인 키 암호와 로그인 암호가 일치하지 않습니다.",
"Set your old private key password to your current log-in password:" : "기존 개인 키 암호를 로그인 암호와 동일하게 설정하십시오:",
diff --git a/apps/encryption/l10n/lt_LT.js b/apps/encryption/l10n/lt_LT.js
index ea6154366fc..125d8bf8e76 100644
--- a/apps/encryption/l10n/lt_LT.js
+++ b/apps/encryption/l10n/lt_LT.js
@@ -2,26 +2,26 @@ OC.L10N.register(
"encryption",
{
"Missing recovery key password" : "Nėra atstatymo rakto slaptažodžio",
- "Please repeat the recovery key password" : "Pakartokite atstatymo rakto slaptažodį",
+ "Please repeat the recovery key password" : "Prašome pakartoti atkūrimo rakto slaptažodį",
"Repeated recovery key password does not match the provided recovery key password" : "Pakartotas atstatymo rakto slaptažodis nesutampa su atstatymo rakto slaptažodžiu",
"Recovery key successfully enabled" : "Atkūrimo raktas sėkmingai įjungtas",
- "Could not enable recovery key. Please check your recovery key password!" : "Neišėjo įjungti jūsų atkūrimo rakto. Prašome jį patikrinti!",
+ "Could not enable recovery key. Please check your recovery key password!" : "Nepavyko įjungti atkūrimo rakto. Prašome patikrinti savo atkūrimo rakto slaptažodį!",
"Recovery key successfully disabled" : "Atkūrimo raktas sėkmingai išjungtas",
- "Could not disable recovery key. Please check your recovery key password!" : "Neišėjo išjungti jūsų atkūrimo rakto. Prašome jį patikrinti!",
+ "Could not disable recovery key. Please check your recovery key password!" : "Nepavyko išjungti atkūrimo rakto. Prašome patikrinti savo atkūrimo rakto slaptažodį!",
"Missing parameters" : "Trūksta parametrų",
"Please provide the old recovery password" : "Įveskite seną atstatymo slaptažodį",
- "Please provide a new recovery password" : "Įveskite naują atstatymo slaptažodį",
+ "Please provide a new recovery password" : "Prašome pateikti naują atkūrimo slaptažodį",
"Please repeat the new recovery password" : "Pakartokite naują atstatymo slaptažodį",
- "Password successfully changed." : "Slaptažodis sėkmingai pakeistas",
- "Could not change the password. Maybe the old password was not correct." : "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.",
- "Recovery Key disabled" : "Atstatymo raktas išjungtas",
+ "Password successfully changed." : "Slaptažodis sėkmingai pakeistas.",
+ "Could not change the password. Maybe the old password was not correct." : "Nepavyko pakeisti slaptažodžio. Galbūt, buvo neteisingai įvestas senas slaptažodis.",
+ "Recovery Key disabled" : "Atkūrimo raktas išjungtas",
"Recovery Key enabled" : "Atstatymo raktas įjungtas",
- "Could not enable the recovery key, please try again or contact your administrator" : "Nepavyko įjungti atstatymo rakto, bandykite dar kartą arba susisiekite su administratoriumi",
- "Could not update the private key password." : "Nepavyko atnaujinti privataus rakto slaptažodžio.",
- "The old password was not correct, please try again." : "Neteisingas senas slaptažodis, pakartokite.",
- "The current log-in password was not correct, please try again." : "Esamas prisijungimo slaptažodis neteisingas, bandykite dar kartą.",
- "Private key password successfully updated." : "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.",
- "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" : "Reikalinga šifravimo raktų migracija iš senos versijos ( ownCloud <= 8.0) į naują. Įvykdykite komanda 'occ encryption:migrate' arba susisiekite su adminstratoriumi",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Nepavyko įjungti atkūrimo rakto, prašome bandyti dar kartą arba susisiekti su savo administratoriumi",
+ "Could not update the private key password." : "Nepavyko atnaujinti privačiojo rakto slaptažodžio.",
+ "The old password was not correct, please try again." : "Neteisingas senas slaptažodis, prašome bandyti dar kartą.",
+ "The current log-in password was not correct, please try again." : "Esamas prisijungimo slaptažodis buvo neteisingas, prašome bandyti dar kartą.",
+ "Private key password successfully updated." : "Privačiojo rakto slaptažodis sėkmingai atnaujintas.",
+ "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" : "Jūs turite perkelti savo šifravimo raktus iš senojo šifravimo (ownCloud <= 8.0) į naująjį. Prašome vykdyti \"occ encryption:migrate\" arba susisiekti su savo administratoriumi",
"one-time password for server-side-encryption" : "Vienkartinis slaptažodis šifravimui serverio pusėje",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.",
"The share will expire on %s." : "Bendrinimo laikas baigsis %s.",
@@ -36,14 +36,14 @@ OC.L10N.register(
"Repeat new recovery key password" : "Pakartokite naują atstatymo rakto slaptažodį",
"Change Password" : "Pakeisti slaptažodį",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti",
- "Your private key password no longer matches your log-in password." : "Privataus rakto slaptažodis nebe sutampa su prisijungimo slaptažodžiu.",
+ "Your private key password no longer matches your log-in password." : "Jūsų privačiojo rakto slaptažodis daugiau nebesutampa su jūsų prisijungimo slaptažodžiu.",
"Set your old private key password to your current log-in password:" : "Nustatyti Jūsų privataus rakto slaptažodį į Jūsų dabartinį slaptažodį.",
" If you don't remember your old password you can ask your administrator to recover your files." : "Jei nepamenate savo seno slaptažodžio, galite paprašyti administratoriaus atkurti Jūsų failus.",
"Old log-in password" : "Senas prisijungimo slaptažodis",
"Current log-in password" : "Dabartinis prisijungimo slaptažodis",
"Update Private Key Password" : "Atnaujinti privataus rakto slaptažodį",
"Enable password recovery:" : "Įjungti slaptažodžio atkūrimą:",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Įjungus šią funkciją jums bus suteiktas pakartotinis priėjimas prie Jūsų šifruotų failų pamiršus slaptažodį.",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Šios parinkties įjungimas leis jums iš naujo gauti prieigą prie savo užšifruotų failų tuo atveju, jei prarasite slaptažodį",
"Enabled" : "Įjungta",
"Disabled" : "Išjungta"
},
diff --git a/apps/encryption/l10n/lt_LT.json b/apps/encryption/l10n/lt_LT.json
index e7e56b656aa..58bbc459067 100644
--- a/apps/encryption/l10n/lt_LT.json
+++ b/apps/encryption/l10n/lt_LT.json
@@ -1,25 +1,25 @@
{ "translations": {
"Missing recovery key password" : "Nėra atstatymo rakto slaptažodžio",
- "Please repeat the recovery key password" : "Pakartokite atstatymo rakto slaptažodį",
+ "Please repeat the recovery key password" : "Prašome pakartoti atkūrimo rakto slaptažodį",
"Repeated recovery key password does not match the provided recovery key password" : "Pakartotas atstatymo rakto slaptažodis nesutampa su atstatymo rakto slaptažodžiu",
"Recovery key successfully enabled" : "Atkūrimo raktas sėkmingai įjungtas",
- "Could not enable recovery key. Please check your recovery key password!" : "Neišėjo įjungti jūsų atkūrimo rakto. Prašome jį patikrinti!",
+ "Could not enable recovery key. Please check your recovery key password!" : "Nepavyko įjungti atkūrimo rakto. Prašome patikrinti savo atkūrimo rakto slaptažodį!",
"Recovery key successfully disabled" : "Atkūrimo raktas sėkmingai išjungtas",
- "Could not disable recovery key. Please check your recovery key password!" : "Neišėjo išjungti jūsų atkūrimo rakto. Prašome jį patikrinti!",
+ "Could not disable recovery key. Please check your recovery key password!" : "Nepavyko išjungti atkūrimo rakto. Prašome patikrinti savo atkūrimo rakto slaptažodį!",
"Missing parameters" : "Trūksta parametrų",
"Please provide the old recovery password" : "Įveskite seną atstatymo slaptažodį",
- "Please provide a new recovery password" : "Įveskite naują atstatymo slaptažodį",
+ "Please provide a new recovery password" : "Prašome pateikti naują atkūrimo slaptažodį",
"Please repeat the new recovery password" : "Pakartokite naują atstatymo slaptažodį",
- "Password successfully changed." : "Slaptažodis sėkmingai pakeistas",
- "Could not change the password. Maybe the old password was not correct." : "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.",
- "Recovery Key disabled" : "Atstatymo raktas išjungtas",
+ "Password successfully changed." : "Slaptažodis sėkmingai pakeistas.",
+ "Could not change the password. Maybe the old password was not correct." : "Nepavyko pakeisti slaptažodžio. Galbūt, buvo neteisingai įvestas senas slaptažodis.",
+ "Recovery Key disabled" : "Atkūrimo raktas išjungtas",
"Recovery Key enabled" : "Atstatymo raktas įjungtas",
- "Could not enable the recovery key, please try again or contact your administrator" : "Nepavyko įjungti atstatymo rakto, bandykite dar kartą arba susisiekite su administratoriumi",
- "Could not update the private key password." : "Nepavyko atnaujinti privataus rakto slaptažodžio.",
- "The old password was not correct, please try again." : "Neteisingas senas slaptažodis, pakartokite.",
- "The current log-in password was not correct, please try again." : "Esamas prisijungimo slaptažodis neteisingas, bandykite dar kartą.",
- "Private key password successfully updated." : "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.",
- "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" : "Reikalinga šifravimo raktų migracija iš senos versijos ( ownCloud <= 8.0) į naują. Įvykdykite komanda 'occ encryption:migrate' arba susisiekite su adminstratoriumi",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Nepavyko įjungti atkūrimo rakto, prašome bandyti dar kartą arba susisiekti su savo administratoriumi",
+ "Could not update the private key password." : "Nepavyko atnaujinti privačiojo rakto slaptažodžio.",
+ "The old password was not correct, please try again." : "Neteisingas senas slaptažodis, prašome bandyti dar kartą.",
+ "The current log-in password was not correct, please try again." : "Esamas prisijungimo slaptažodis buvo neteisingas, prašome bandyti dar kartą.",
+ "Private key password successfully updated." : "Privačiojo rakto slaptažodis sėkmingai atnaujintas.",
+ "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" : "Jūs turite perkelti savo šifravimo raktus iš senojo šifravimo (ownCloud <= 8.0) į naująjį. Prašome vykdyti \"occ encryption:migrate\" arba susisiekti su savo administratoriumi",
"one-time password for server-side-encryption" : "Vienkartinis slaptažodis šifravimui serverio pusėje",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.",
"The share will expire on %s." : "Bendrinimo laikas baigsis %s.",
@@ -34,14 +34,14 @@
"Repeat new recovery key password" : "Pakartokite naują atstatymo rakto slaptažodį",
"Change Password" : "Pakeisti slaptažodį",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti",
- "Your private key password no longer matches your log-in password." : "Privataus rakto slaptažodis nebe sutampa su prisijungimo slaptažodžiu.",
+ "Your private key password no longer matches your log-in password." : "Jūsų privačiojo rakto slaptažodis daugiau nebesutampa su jūsų prisijungimo slaptažodžiu.",
"Set your old private key password to your current log-in password:" : "Nustatyti Jūsų privataus rakto slaptažodį į Jūsų dabartinį slaptažodį.",
" If you don't remember your old password you can ask your administrator to recover your files." : "Jei nepamenate savo seno slaptažodžio, galite paprašyti administratoriaus atkurti Jūsų failus.",
"Old log-in password" : "Senas prisijungimo slaptažodis",
"Current log-in password" : "Dabartinis prisijungimo slaptažodis",
"Update Private Key Password" : "Atnaujinti privataus rakto slaptažodį",
"Enable password recovery:" : "Įjungti slaptažodžio atkūrimą:",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Įjungus šią funkciją jums bus suteiktas pakartotinis priėjimas prie Jūsų šifruotų failų pamiršus slaptažodį.",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Šios parinkties įjungimas leis jums iš naujo gauti prieigą prie savo užšifruotų failų tuo atveju, jei prarasite slaptažodį",
"Enabled" : "Įjungta",
"Disabled" : "Išjungta"
},"pluralForm" :"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/encryption/l10n/nb_NO.js b/apps/encryption/l10n/nb_NO.js
index 5d279a493b5..3862b035fcb 100644
--- a/apps/encryption/l10n/nb_NO.js
+++ b/apps/encryption/l10n/nb_NO.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Aktiver gjenoppretting av passord:",
"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",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 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 (Nextcloud <= 8.0) til den nye. Vennligst 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 Krypterings-app. 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",
- "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 'Nextcloud 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,<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 \"Nextcloud 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>",
- "Nextcloud basic encryption module" : "Nextcloud grunnleggende krypteringsmodul"
+ "Disabled" : "Inaktiv"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/nb_NO.json b/apps/encryption/l10n/nb_NO.json
index da8182789ae..af83288309c 100644
--- a/apps/encryption/l10n/nb_NO.json
+++ b/apps/encryption/l10n/nb_NO.json
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Aktiver gjenoppretting av passord:",
"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",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 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 (Nextcloud <= 8.0) til den nye. Vennligst 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 Krypterings-app. 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",
- "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 'Nextcloud 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,<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 \"Nextcloud 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>",
- "Nextcloud basic encryption module" : "Nextcloud grunnleggende krypteringsmodul"
+ "Disabled" : "Inaktiv"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/nl.js b/apps/encryption/l10n/nl.js
index 190424b9041..b071020af66 100644
--- a/apps/encryption/l10n/nl.js
+++ b/apps/encryption/l10n/nl.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Activeren wachtwoord herstel:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Het activeren van deze optie maakt het mogelijk om je versleutelde bestanden te benaderen als je wachtwoord kwijt is",
"Enabled" : "Geactiveerd",
- "Disabled" : "Gedeactiveerd",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Je moet je cryptosleutels van de oude versleuteling (Nextcloud <= 8.0) migreren naar de nieuwe. Start 'occ encryption:migrate' of neem contact op met je beheerder",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor de crypto app. Werk het privésleutel wachtwoord bij in je persoonlijke instellingen om opnieuw toegang te krijgen tot je versleutelde bestanden.",
- "Encryption App is enabled and ready" : "Encryptie app is geactiveerd en gereed",
- "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 'Nextcloud 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" : "Hallo daar,\n\nde beheerder heeft server-side versleuteling ingeschakeld. Je bestanden werden versleuteld met het wachtwoord '%s'.\n\nLogin op de webinterface, ga naar de sectie 'Nextcloud basis cryptomodule' in je persoonlijke instellingen en pas je cryptowachtwoord aan door dit wachtwoord in het 'oude inlog wachtwoord' veld in te vullen alsmede in je huidige inlogwachtwoord.\n",
- "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 \"Nextcloud 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>" : "Hallo daar,<br><br>de beheerder heeft server-side versleuteling ingeschakeld. Je bestanden werden versleuteld met het wachtwoord <strong>%s</strong>.<br><br>Login op de webinterface, ga naar 'Nextcloud basis cryptomodule' in je persoonlijke instellingen en pas je cryptowachtwoord aan door dit wachtwoord in het \"oude inlog wachtwoord\" veld in te vullen alsmede in je huidige inlogwachtwoord.<br><br>",
- "Nextcloud basic encryption module" : "Nextc;oud basis versleutelingsmodule"
+ "Disabled" : "Gedeactiveerd"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/nl.json b/apps/encryption/l10n/nl.json
index f28ec926b3b..1940a92b797 100644
--- a/apps/encryption/l10n/nl.json
+++ b/apps/encryption/l10n/nl.json
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Activeren wachtwoord herstel:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Het activeren van deze optie maakt het mogelijk om je versleutelde bestanden te benaderen als je wachtwoord kwijt is",
"Enabled" : "Geactiveerd",
- "Disabled" : "Gedeactiveerd",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Je moet je cryptosleutels van de oude versleuteling (Nextcloud <= 8.0) migreren naar de nieuwe. Start 'occ encryption:migrate' of neem contact op met je beheerder",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor de crypto app. Werk het privésleutel wachtwoord bij in je persoonlijke instellingen om opnieuw toegang te krijgen tot je versleutelde bestanden.",
- "Encryption App is enabled and ready" : "Encryptie app is geactiveerd en gereed",
- "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 'Nextcloud 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" : "Hallo daar,\n\nde beheerder heeft server-side versleuteling ingeschakeld. Je bestanden werden versleuteld met het wachtwoord '%s'.\n\nLogin op de webinterface, ga naar de sectie 'Nextcloud basis cryptomodule' in je persoonlijke instellingen en pas je cryptowachtwoord aan door dit wachtwoord in het 'oude inlog wachtwoord' veld in te vullen alsmede in je huidige inlogwachtwoord.\n",
- "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 \"Nextcloud 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>" : "Hallo daar,<br><br>de beheerder heeft server-side versleuteling ingeschakeld. Je bestanden werden versleuteld met het wachtwoord <strong>%s</strong>.<br><br>Login op de webinterface, ga naar 'Nextcloud basis cryptomodule' in je persoonlijke instellingen en pas je cryptowachtwoord aan door dit wachtwoord in het \"oude inlog wachtwoord\" veld in te vullen alsmede in je huidige inlogwachtwoord.<br><br>",
- "Nextcloud basic encryption module" : "Nextc;oud basis versleutelingsmodule"
+ "Disabled" : "Gedeactiveerd"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/pl.js b/apps/encryption/l10n/pl.js
index 640f925426a..2b0e29b7c48 100644
--- a/apps/encryption/l10n/pl.js
+++ b/apps/encryption/l10n/pl.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Włącz hasło odzyskiwania:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Włączenie tej opcji umożliwia otrzymać dostęp do zaszyfrowanych plików w przypadku utraty hasła",
"Enabled" : "Włączone",
- "Disabled" : "Wyłączone",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musisz przenieść swoje klucze szyfrowania ze starego sposobu szyfrowania (Nextcloud <= 8,0) na nowy. Proszę uruchomić 'occ encryption:migrate' lub skontaktować się z administratorem",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Nieprawidłowy klucz prywatny do szyfrowania aplikacji. Należy zaktualizować hasło klucza prywatnego w ustawieniach osobistych, aby odzyskać dostęp do zaszyfrowanych plików.",
- "Encryption App is enabled and ready" : "Szyfrowanie aplikacji jest włączone i gotowe",
- "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 'Nextcloud 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" : "Hej tam, \n\nadmin włączył szyfrowanie po stronie serwera. Twoje pliki zostały zaszyfrowane przy użyciu hasła '%s'.\n\nProszę zalogować się do interfejsu internetowego, przejdź do sekcji Nextcloud podstawowy moduł szyfrowania, następnie osobiste ustawienia i zaktualizuj hasło szyfrowania wpisując aktualny login, w polu stare hasło logowania wpisz stare hasło, a następnie aktualne hasło.\n\n",
- "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 \"Nextcloud 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>" : "Hej tam,<br><br>admin włączył szyfrowanie po stronie serwera. Twoje pliki zostały zaszyfrowane przy użyciu hasła <strong>%s</strong>.<br><br>Proszę zalogować się do interfejsu internetowego, przejdź do sekcji Nextcloud podstawowy moduł szyfrowania, następnie osobiste ustawienia i zaktualizuj hasło szyfrowania wpisując aktualny login, w polu stare hasło logowania wpisz stare hasło, a następnie aktualne hasło.<br><br>",
- "Nextcloud basic encryption module" : "Podstawowy moduł szyfrujący Nextcloud"
+ "Disabled" : "Wyłączone"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/encryption/l10n/pl.json b/apps/encryption/l10n/pl.json
index eb1b709b2b2..f9f76af7555 100644
--- a/apps/encryption/l10n/pl.json
+++ b/apps/encryption/l10n/pl.json
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Włącz hasło odzyskiwania:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Włączenie tej opcji umożliwia otrzymać dostęp do zaszyfrowanych plików w przypadku utraty hasła",
"Enabled" : "Włączone",
- "Disabled" : "Wyłączone",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musisz przenieść swoje klucze szyfrowania ze starego sposobu szyfrowania (Nextcloud <= 8,0) na nowy. Proszę uruchomić 'occ encryption:migrate' lub skontaktować się z administratorem",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Nieprawidłowy klucz prywatny do szyfrowania aplikacji. Należy zaktualizować hasło klucza prywatnego w ustawieniach osobistych, aby odzyskać dostęp do zaszyfrowanych plików.",
- "Encryption App is enabled and ready" : "Szyfrowanie aplikacji jest włączone i gotowe",
- "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 'Nextcloud 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" : "Hej tam, \n\nadmin włączył szyfrowanie po stronie serwera. Twoje pliki zostały zaszyfrowane przy użyciu hasła '%s'.\n\nProszę zalogować się do interfejsu internetowego, przejdź do sekcji Nextcloud podstawowy moduł szyfrowania, następnie osobiste ustawienia i zaktualizuj hasło szyfrowania wpisując aktualny login, w polu stare hasło logowania wpisz stare hasło, a następnie aktualne hasło.\n\n",
- "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 \"Nextcloud 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>" : "Hej tam,<br><br>admin włączył szyfrowanie po stronie serwera. Twoje pliki zostały zaszyfrowane przy użyciu hasła <strong>%s</strong>.<br><br>Proszę zalogować się do interfejsu internetowego, przejdź do sekcji Nextcloud podstawowy moduł szyfrowania, następnie osobiste ustawienia i zaktualizuj hasło szyfrowania wpisując aktualny login, w polu stare hasło logowania wpisz stare hasło, a następnie aktualne hasło.<br><br>",
- "Nextcloud basic encryption module" : "Podstawowy moduł szyfrujący Nextcloud"
+ "Disabled" : "Wyłączone"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js
index 0e9f0d2b003..76feda658a5 100644
--- a/apps/encryption/l10n/pt_BR.js
+++ b/apps/encryption/l10n/pt_BR.js
@@ -58,12 +58,6 @@ OC.L10N.register(
"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",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Voce precisará migrar suas chaves de criptografia de uma chave antiga (Nextcloud <=8.0) para uma nova. Por favor execute 'occ encryption:migrate' ou contate seu 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 criptografia do App. Por favor, atualize a senha da sua chave privada no menu de configurações pessoais para recuperar o acesso dos seus arquivos criptografamos",
- "Encryption App is enabled and ready" : "Criptografia de App esta habilitada e pronta",
- "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 'Nextcloud 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" : "Ola\n\nO admin habilitou a criptografia do lado-servidor. Seus arquivos serão criptografados usando a senha '%s'\n\nPor favor, acessa a interface web, vá até a sessão criptografia básica Nexcloud, atualize seus dados e senha\n",
- "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 \"Nextcloud 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>" : "Ola<br><br>,O admin habilitou a criptografia do lado-servidor. Seus arquivos serão criptografados usando a senha<strong> '%s'</strong>. Por favor, acessa a interface web, vá até a sessão criptografia básica Nexcloud, atualize seus dados e senha.<br><br>",
- "Nextcloud basic encryption module" : "Módulo de criptografia básico"
+ "Disabled" : "Desabilitado"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json
index 26228df954e..d38b7b2dfa5 100644
--- a/apps/encryption/l10n/pt_BR.json
+++ b/apps/encryption/l10n/pt_BR.json
@@ -56,12 +56,6 @@
"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",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Voce precisará migrar suas chaves de criptografia de uma chave antiga (Nextcloud <=8.0) para uma nova. Por favor execute 'occ encryption:migrate' ou contate seu 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 criptografia do App. Por favor, atualize a senha da sua chave privada no menu de configurações pessoais para recuperar o acesso dos seus arquivos criptografamos",
- "Encryption App is enabled and ready" : "Criptografia de App esta habilitada e pronta",
- "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 'Nextcloud 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" : "Ola\n\nO admin habilitou a criptografia do lado-servidor. Seus arquivos serão criptografados usando a senha '%s'\n\nPor favor, acessa a interface web, vá até a sessão criptografia básica Nexcloud, atualize seus dados e senha\n",
- "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 \"Nextcloud 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>" : "Ola<br><br>,O admin habilitou a criptografia do lado-servidor. Seus arquivos serão criptografados usando a senha<strong> '%s'</strong>. Por favor, acessa a interface web, vá até a sessão criptografia básica Nexcloud, atualize seus dados e senha.<br><br>",
- "Nextcloud basic encryption module" : "Módulo de criptografia básico"
+ "Disabled" : "Desabilitado"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/ru.js b/apps/encryption/l10n/ru.js
index 7fcda371f07..a20e361bc61 100644
--- a/apps/encryption/l10n/ru.js
+++ b/apps/encryption/l10n/ru.js
@@ -14,8 +14,8 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Повторите новый пароль восстановления",
"Password successfully changed." : "Пароль успешно изменен.",
"Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно, указанный старый пароль не верен.",
- "Recovery Key disabled" : "Ключ Восстановления отключен",
- "Recovery Key enabled" : "Ключ Восстановления включен",
+ "Recovery Key disabled" : "Ключ восстановления отключен",
+ "Recovery Key enabled" : "Ключ восстановления включен",
"Could not enable the recovery key, please try again or contact your administrator" : "Не возможно задействовать ключ восстановления, попробуйте снова или обратитесь к вашему системному администатору",
"Could not update the private key password." : "Невозможно обновить пароль закрытого ключа.",
"The old password was not correct, please try again." : "Указан неверный старый пароль, повторите попытку.",
@@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Включить восстановление пароля:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Включение этой опции позволит вам получить доступ к своим зашифрованным файлам в случае утери пароля",
"Enabled" : "Включено",
- "Disabled" : "Отключено",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста, запустите команду 'occ encryption:migrate' или обратитесь к администратору",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
- "Encryption App is enabled and ready" : "Приложение шифрования включено и готово к использованию",
- "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 'Nextcloud 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" : "Обратите внимание,\n\nадминистратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы паролем '%s'.\n\nВойдите в веб-приложение, найдите в личных настройках раздел 'простой модуль шифрования Nextcloud' и обновите ваш пароль шифрования.\n\n",
- "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 \"Nextcloud 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>" : "Обратите внимание,<br><br>администратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы паролем <strong>%s</strong>.<br><br>Войдите в веб-приложение, найдите в личных настройках раздел 'простой модуль шифрования Nextcloud' и обновите ваш пароль шифрования.<br><br>",
- "Nextcloud basic encryption module" : "Простой модуль шифрования Nextcloud"
+ "Disabled" : "Отключено"
},
"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/encryption/l10n/ru.json b/apps/encryption/l10n/ru.json
index 95f69c395a8..1c1c3abb0de 100644
--- a/apps/encryption/l10n/ru.json
+++ b/apps/encryption/l10n/ru.json
@@ -12,8 +12,8 @@
"Please repeat the new recovery password" : "Повторите новый пароль восстановления",
"Password successfully changed." : "Пароль успешно изменен.",
"Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно, указанный старый пароль не верен.",
- "Recovery Key disabled" : "Ключ Восстановления отключен",
- "Recovery Key enabled" : "Ключ Восстановления включен",
+ "Recovery Key disabled" : "Ключ восстановления отключен",
+ "Recovery Key enabled" : "Ключ восстановления включен",
"Could not enable the recovery key, please try again or contact your administrator" : "Не возможно задействовать ключ восстановления, попробуйте снова или обратитесь к вашему системному администатору",
"Could not update the private key password." : "Невозможно обновить пароль закрытого ключа.",
"The old password was not correct, please try again." : "Указан неверный старый пароль, повторите попытку.",
@@ -56,12 +56,6 @@
"Enable password recovery:" : "Включить восстановление пароля:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Включение этой опции позволит вам получить доступ к своим зашифрованным файлам в случае утери пароля",
"Enabled" : "Включено",
- "Disabled" : "Отключено",
- "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста, запустите команду 'occ encryption:migrate' или обратитесь к администратору",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
- "Encryption App is enabled and ready" : "Приложение шифрования включено и готово к использованию",
- "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 'Nextcloud 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" : "Обратите внимание,\n\nадминистратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы паролем '%s'.\n\nВойдите в веб-приложение, найдите в личных настройках раздел 'простой модуль шифрования Nextcloud' и обновите ваш пароль шифрования.\n\n",
- "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 \"Nextcloud 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>" : "Обратите внимание,<br><br>администратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы паролем <strong>%s</strong>.<br><br>Войдите в веб-приложение, найдите в личных настройках раздел 'простой модуль шифрования Nextcloud' и обновите ваш пароль шифрования.<br><br>",
- "Nextcloud basic encryption module" : "Простой модуль шифрования Nextcloud"
+ "Disabled" : "Отключено"
},"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/encryption/l10n/sk_SK.js b/apps/encryption/l10n/sk_SK.js
index 798a5939ff9..7678ed60ac7 100644
--- a/apps/encryption/l10n/sk_SK.js
+++ b/apps/encryption/l10n/sk_SK.js
@@ -22,11 +22,19 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.",
"Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte migrovať vaše šifrovacie kľúče zo starého šifrovania (ownCloud <= 8,0) na nové. Spustite „occ encryption:migrate“ alebo sa obráťte na správcu",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neplatný súkromný kľúč pre šifrovanie. Aktualizujte prosím heslo vášho súkromného kľúča v osobných nastaveniach pre obnovenie prístupu k vaším šifrovaným súborom.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia pre šifrovanie je povolená, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
+ "Encryption app is enabled and ready" : "Aplikácia pre šifrovanie je povolená a pripravená",
+ "Bad Signature" : "Zlý podpis",
+ "Missing Signature" : "Chýbajúci podpis",
"one-time password for server-side-encryption" : "jednorazové heslo na šifrovanie na strane servera",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor nie je možné rozšifrovať, môže ísť o súbor sprístupnený iným používateľom. Požiadajte majiteľa súboru, aby vám ho sprístupnil ešte raz.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor nie je možné prečítať, môže ísť o súbor sprístupnený iným používateľom. Požiadajte majiteľa súboru, aby vám ho sprístupnil ešte raz.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Dobrý deň,\n\nAdministrátor povolil šifrovanie na strane servera. Vaše súbory boli zašifrované pomocou hesla '%s'.\n\nPrihláste sa prosím cez webový prehliadač, choďte do sekcie základného šifrovacieho modulu v osobných nastaveniach a zadajte horeuvedené heslo do políčka 'staré prihlasovacie heslo' a vaše súčasné prihlasovacie heslo.\n\n",
"The share will expire on %s." : "Sprístupnenie vyprší %s.",
"Cheers!" : "Pekný deň!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Dobrý deň,<br><br>Administrátor povolil šifrovanie na strane servera. Vaše súbory boli zašifrované pomocou hesla <strong>%s</strong>.<br><br>Prihláste sa prosím cez webový prehliadač, choďte do sekcie základného šifrovacieho modulu v osobných nastaveniach a zadajte horeuvedené heslo do políčka 'staré prihlasovacie heslo' a vaše súčasné prihlasovacie heslo.<br><br>",
+ "Default encryption module" : "Predvolený šifrovací modul",
"Encrypt the home storage" : "Šifrovať domáce úložisko",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Zapnutím tejto voľby zašifrujete všetky súbory v hlavnom úložisku, v opačnom prípade zašifrujete iba súbory na externom úložisku.",
"Enable recovery key" : "Povoliť obnovovací kľúč",
@@ -39,6 +47,7 @@ OC.L10N.register(
"New recovery key password" : "Nové heslo obnovovacieho kľúča",
"Repeat new recovery key password" : "Zopakujte nové heslo obnovovacieho kľúča",
"Change Password" : "Zmeniť heslo",
+ "Basic encryption module" : "Základný šifrovací modul",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Your private key password no longer matches your log-in password." : "Heslo vášho súkromného kľúča sa nezhoduje v vašim prihlasovacím heslom.",
"Set your old private key password to your current log-in password:" : "Zmeňte si vaše staré heslo súkromného kľúča na rovnaké, aké je vaše aktuálne prihlasovacie heslo:",
diff --git a/apps/encryption/l10n/sk_SK.json b/apps/encryption/l10n/sk_SK.json
index cf259c2223d..91fbf2aa577 100644
--- a/apps/encryption/l10n/sk_SK.json
+++ b/apps/encryption/l10n/sk_SK.json
@@ -20,11 +20,19 @@
"The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.",
"Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte migrovať vaše šifrovacie kľúče zo starého šifrovania (ownCloud <= 8,0) na nové. Spustite „occ encryption:migrate“ alebo sa obráťte na správcu",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neplatný súkromný kľúč pre šifrovanie. Aktualizujte prosím heslo vášho súkromného kľúča v osobných nastaveniach pre obnovenie prístupu k vaším šifrovaným súborom.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia pre šifrovanie je povolená, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
+ "Encryption app is enabled and ready" : "Aplikácia pre šifrovanie je povolená a pripravená",
+ "Bad Signature" : "Zlý podpis",
+ "Missing Signature" : "Chýbajúci podpis",
"one-time password for server-side-encryption" : "jednorazové heslo na šifrovanie na strane servera",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor nie je možné rozšifrovať, môže ísť o súbor sprístupnený iným používateľom. Požiadajte majiteľa súboru, aby vám ho sprístupnil ešte raz.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor nie je možné prečítať, môže ísť o súbor sprístupnený iným používateľom. Požiadajte majiteľa súboru, aby vám ho sprístupnil ešte raz.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Dobrý deň,\n\nAdministrátor povolil šifrovanie na strane servera. Vaše súbory boli zašifrované pomocou hesla '%s'.\n\nPrihláste sa prosím cez webový prehliadač, choďte do sekcie základného šifrovacieho modulu v osobných nastaveniach a zadajte horeuvedené heslo do políčka 'staré prihlasovacie heslo' a vaše súčasné prihlasovacie heslo.\n\n",
"The share will expire on %s." : "Sprístupnenie vyprší %s.",
"Cheers!" : "Pekný deň!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Dobrý deň,<br><br>Administrátor povolil šifrovanie na strane servera. Vaše súbory boli zašifrované pomocou hesla <strong>%s</strong>.<br><br>Prihláste sa prosím cez webový prehliadač, choďte do sekcie základného šifrovacieho modulu v osobných nastaveniach a zadajte horeuvedené heslo do políčka 'staré prihlasovacie heslo' a vaše súčasné prihlasovacie heslo.<br><br>",
+ "Default encryption module" : "Predvolený šifrovací modul",
"Encrypt the home storage" : "Šifrovať domáce úložisko",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Zapnutím tejto voľby zašifrujete všetky súbory v hlavnom úložisku, v opačnom prípade zašifrujete iba súbory na externom úložisku.",
"Enable recovery key" : "Povoliť obnovovací kľúč",
@@ -37,6 +45,7 @@
"New recovery key password" : "Nové heslo obnovovacieho kľúča",
"Repeat new recovery key password" : "Zopakujte nové heslo obnovovacieho kľúča",
"Change Password" : "Zmeniť heslo",
+ "Basic encryption module" : "Základný šifrovací modul",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Your private key password no longer matches your log-in password." : "Heslo vášho súkromného kľúča sa nezhoduje v vašim prihlasovacím heslom.",
"Set your old private key password to your current log-in password:" : "Zmeňte si vaše staré heslo súkromného kľúča na rovnaké, aké je vaše aktuálne prihlasovacie heslo:",
diff --git a/apps/encryption/l10n/sq.js b/apps/encryption/l10n/sq.js
index 814cf35f52f..f730f904533 100644
--- a/apps/encryption/l10n/sq.js
+++ b/apps/encryption/l10n/sq.js
@@ -22,6 +22,9 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "Fjalëkalimi i tanishëm i hyrjeve s’qe i saktë, ju lutemi, riprovoni.",
"Private key password successfully updated." : "Fjalëkalimi për kyçin privat u përditësua me sukses.",
"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" : "Lypset të kaloni kyçet tuaj të fshehtëzimeve nga versioni i vjetër i fshehtëzimeve (ownCloud <= 8.0) te i riu. Ju lutemi, ekzekutoni run 'occ encryption:migrate' ose lidhuni me përgjegjësin tuaj",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kyç privat i pavlefshëm për aplikacionin e fshehtëzimeve. Ju lutemi, përditësoni fjalëkalimin tuaj të kyçit privat te rregullimet tuaja personale që të rimerrni hyrje te kartelat tuaja të fshehtëzuara.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i fshehtëzimeve është i aktivizuar, por kyçet tuaj s’janë vënë në punë, ju lutemi, dilni dhe ribëni hyrjen",
+ "Encryption app is enabled and ready" : "Aplikacioni i Fshehtëzimeve u aktivizua dhe është gati",
"Bad Signature" : "Nënshkrim i Keq",
"Missing Signature" : "Mungon Nënshkrimi",
"one-time password for server-side-encryption" : "fjalëkalim vetëm për një herë, për fshehtëzim-më-anë-shërbyesi",
@@ -31,6 +34,7 @@ OC.L10N.register(
"The share will expire on %s." : "Ndarja do të skadojë më %s.",
"Cheers!" : "Gëzuar!",
"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>" : "Njatjeta,<br><br>përgjegjësi aktivizoi fshehtëzim më anë shërbyesi. Kartelat tuaja qenë fshehtëzuar duke përdorur fjalëkalimin <strong>%s</strong>.<br><br>Ju lutemi, bëni hyrjen te ndërfaqja web, kaloni te ndarja \"modul i thjeshtëpër fshehtëzime\" e rregullimeve tuaja personale dhe përditësoni fjalëkalimin tuaj për fshehtëzime duke dhënë këtë fjalëkalim te fusha \"old log-in password\" dhe fjalëkalimin tuaj të tanishëm për hyrjet.<br><br>",
+ "Default encryption module" : "Modul i parazgjedhur fshehtëzimi",
"Encrypt the home storage" : "Fshehtëzo depozitën bazë",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivizimi i kësaj mundësie fshehtëzon krejt kartelat e depozituara në depon bazë, përndryshe do të fshehtëzohen vetëm kartelat në depozitën e jashtme",
"Enable recovery key" : "Aktivizo kyç rimarrjesh",
@@ -43,6 +47,7 @@ OC.L10N.register(
"New recovery key password" : "Fjalëkalimi i ri kyçi rimarrjesh",
"Repeat new recovery key password" : "Rijepni fjalëkalimin e ri kyçi rimarrjesh",
"Change Password" : "Ndryshoni Fjalëkalimin",
+ "Basic encryption module" : "Modul i thjeshtë fshehtëzimesh",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i fshehtëzimeve është i aktivizuar, por kyçet tuaj s’janë vënë në punë, ju lutemi, dilni dhe ribëni hyrjen",
"Your private key password no longer matches your log-in password." : "Fjalëkalimi juaj për kyçe privatë s’përputhet më me fjalëkalimin për hyrjet.",
"Set your old private key password to your current log-in password:" : "Fjalëkalimit të vjetër të kyçit privat jepini vlerën e fjalëkalimit tuaj të tanishëm për hyrjet:",
diff --git a/apps/encryption/l10n/sq.json b/apps/encryption/l10n/sq.json
index 4a2ad0ce664..f844f0b54eb 100644
--- a/apps/encryption/l10n/sq.json
+++ b/apps/encryption/l10n/sq.json
@@ -20,6 +20,9 @@
"The current log-in password was not correct, please try again." : "Fjalëkalimi i tanishëm i hyrjeve s’qe i saktë, ju lutemi, riprovoni.",
"Private key password successfully updated." : "Fjalëkalimi për kyçin privat u përditësua me sukses.",
"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" : "Lypset të kaloni kyçet tuaj të fshehtëzimeve nga versioni i vjetër i fshehtëzimeve (ownCloud <= 8.0) te i riu. Ju lutemi, ekzekutoni run 'occ encryption:migrate' ose lidhuni me përgjegjësin tuaj",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kyç privat i pavlefshëm për aplikacionin e fshehtëzimeve. Ju lutemi, përditësoni fjalëkalimin tuaj të kyçit privat te rregullimet tuaja personale që të rimerrni hyrje te kartelat tuaja të fshehtëzuara.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i fshehtëzimeve është i aktivizuar, por kyçet tuaj s’janë vënë në punë, ju lutemi, dilni dhe ribëni hyrjen",
+ "Encryption app is enabled and ready" : "Aplikacioni i Fshehtëzimeve u aktivizua dhe është gati",
"Bad Signature" : "Nënshkrim i Keq",
"Missing Signature" : "Mungon Nënshkrimi",
"one-time password for server-side-encryption" : "fjalëkalim vetëm për një herë, për fshehtëzim-më-anë-shërbyesi",
@@ -29,6 +32,7 @@
"The share will expire on %s." : "Ndarja do të skadojë më %s.",
"Cheers!" : "Gëzuar!",
"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>" : "Njatjeta,<br><br>përgjegjësi aktivizoi fshehtëzim më anë shërbyesi. Kartelat tuaja qenë fshehtëzuar duke përdorur fjalëkalimin <strong>%s</strong>.<br><br>Ju lutemi, bëni hyrjen te ndërfaqja web, kaloni te ndarja \"modul i thjeshtëpër fshehtëzime\" e rregullimeve tuaja personale dhe përditësoni fjalëkalimin tuaj për fshehtëzime duke dhënë këtë fjalëkalim te fusha \"old log-in password\" dhe fjalëkalimin tuaj të tanishëm për hyrjet.<br><br>",
+ "Default encryption module" : "Modul i parazgjedhur fshehtëzimi",
"Encrypt the home storage" : "Fshehtëzo depozitën bazë",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivizimi i kësaj mundësie fshehtëzon krejt kartelat e depozituara në depon bazë, përndryshe do të fshehtëzohen vetëm kartelat në depozitën e jashtme",
"Enable recovery key" : "Aktivizo kyç rimarrjesh",
@@ -41,6 +45,7 @@
"New recovery key password" : "Fjalëkalimi i ri kyçi rimarrjesh",
"Repeat new recovery key password" : "Rijepni fjalëkalimin e ri kyçi rimarrjesh",
"Change Password" : "Ndryshoni Fjalëkalimin",
+ "Basic encryption module" : "Modul i thjeshtë fshehtëzimesh",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i fshehtëzimeve është i aktivizuar, por kyçet tuaj s’janë vënë në punë, ju lutemi, dilni dhe ribëni hyrjen",
"Your private key password no longer matches your log-in password." : "Fjalëkalimi juaj për kyçe privatë s’përputhet më me fjalëkalimin për hyrjet.",
"Set your old private key password to your current log-in password:" : "Fjalëkalimit të vjetër të kyçit privat jepini vlerën e fjalëkalimit tuaj të tanishëm për hyrjet:",
diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js
index 689523abc04..2a5893af8bf 100644
--- a/apps/encryption/l10n/sv.js
+++ b/apps/encryption/l10n/sv.js
@@ -22,25 +22,32 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "Det nuvarande inloggningslösenordet var inte korrekt. Vänligen försök igen.",
"Private key password successfully updated." : "Den privata nyckelns lösenord uppdaterades.",
"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 behöver migrera dina krypteringsnycklar från den gamla krypteringen (ownCloud <= 8.0) till den nya. Kör 'occ encryption:migrate' eller kontakta din administratör",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel för krypteringsappen. Uppdatera din privata nyckels lösenord i dina personliga inställningar för att återställa tillgång till dina krypterade filer.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsappen är aktiverad men dina krypteringsnycklar har inte aktiverats, logga ut och logga in igen.",
+ "Encryption app is enabled and ready" : "Krypteringsfunktionen är aktiverad och redo",
"Bad Signature" : "Dålig signatur",
"Missing Signature" : "Saknar signatur",
"one-time password for server-side-encryption" : "engångslösenord för kryptering på serversidan",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Filen kan inte läsas, troligtvis är det en delad fil. Be ägaren av filen att dela den med dig igen.",
+ "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" : "Hallå där, \n\nAdministratören aktiverade serverkryptering. Alla dina filer har blivit krypterade med lösenordet: %s\n\nGå till i din profil för att ändra krypteringslösenordet till ditt egna lösenord. Ange lösenordet ovan som \"Gammalt lösenord\" och ange sedan ditt egna lösenord.\n\n",
"The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
- "Encrypt the home storage" : "Kryptera hemmalagringen",
+ "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>" : "Hallå där, <br> Administratören aktiverade serverkryptering. Alla dina filer har blivit krypterade med lösenordet: <strong>%s</ strong>. <br> Gå till i din profil för att ändra krypteringslösenordet till ditt egna lösenord. Ange lösenordet ovan som \"Gammalt lösenord\" och ange sedan ditt egna lösenord.<br>",
+ "Default encryption module" : "Krypteringsfunktion",
+ "Encrypt the home storage" : "Kryptera alla filer i molnet",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av det här alternativet krypterar alla filer som är lagrade på huvudlagringsplatsen, annars kommer bara filer på extern lagringsplats att krypteras",
"Enable recovery key" : "Aktivera återställningsnyckel",
"Disable recovery key" : "Inaktivera återställningsnyckel",
"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." : "Återställningsnyckeln är en extra krypteringsnyckel som används för att kryptera filer. Den gör det möjligt att återställa en användares filer om användaren glömmer sitt lösenord.",
- "Recovery key password" : "Lösenord för återställningsnyckel",
- "Repeat recovery key password" : "Upprepa lösenord för återställningsnyckeln",
- "Change recovery key password:" : "Ändra lösenord för återställningsnyckel:",
- "Old recovery key password" : "Gammalt lösenord för återställningsnyckeln",
- "New recovery key password" : "Nytt lösenord för återställningsnyckeln",
- "Repeat new recovery key password" : "Upprepa nytt lösenord för återställningsnyckeln",
+ "Recovery key password" : "Ange lösenord",
+ "Repeat recovery key password" : "Repetera lösenord",
+ "Change recovery key password:" : "Ändra lösenord för återställningsnyckel",
+ "Old recovery key password" : "Gammalt lösenord",
+ "New recovery key password" : "Nytt lösenord",
+ "Repeat new recovery key password" : "Repetera lösenord",
"Change Password" : "Byt lösenord",
+ "Basic encryption module" : "Kryptering",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
"Your private key password no longer matches your log-in password." : "Ditt lösenord för din privata nyckel matchar inte längre ditt inloggningslösenord.",
"Set your old private key password to your current log-in password:" : "Sätt ditt gamla privatnyckellösenord till ditt aktuella inloggningslösenord:",
@@ -48,7 +55,7 @@ OC.L10N.register(
"Old log-in password" : "Gammalt inloggningslösenord",
"Current log-in password" : "Nuvarande inloggningslösenord",
"Update Private Key Password" : "Uppdatera lösenordet för din privata nyckel",
- "Enable password recovery:" : "Aktivera lösenordsåterställning",
+ "Enable password recovery:" : "Aktivera lösenordsåterställning:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Genom att aktivera detta alternativ kommer du kunna återfå tillgång till dina krypterade filer om du skulle förlora/glömma ditt lösenord",
"Enabled" : "Aktiverad",
"Disabled" : "Inaktiverad"
diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json
index c3a748c5d2d..f0e64f2c807 100644
--- a/apps/encryption/l10n/sv.json
+++ b/apps/encryption/l10n/sv.json
@@ -20,25 +20,32 @@
"The current log-in password was not correct, please try again." : "Det nuvarande inloggningslösenordet var inte korrekt. Vänligen försök igen.",
"Private key password successfully updated." : "Den privata nyckelns lösenord uppdaterades.",
"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 behöver migrera dina krypteringsnycklar från den gamla krypteringen (ownCloud <= 8.0) till den nya. Kör 'occ encryption:migrate' eller kontakta din administratör",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel för krypteringsappen. Uppdatera din privata nyckels lösenord i dina personliga inställningar för att återställa tillgång till dina krypterade filer.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsappen är aktiverad men dina krypteringsnycklar har inte aktiverats, logga ut och logga in igen.",
+ "Encryption app is enabled and ready" : "Krypteringsfunktionen är aktiverad och redo",
"Bad Signature" : "Dålig signatur",
"Missing Signature" : "Saknar signatur",
"one-time password for server-side-encryption" : "engångslösenord för kryptering på serversidan",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Filen kan inte läsas, troligtvis är det en delad fil. Be ägaren av filen att dela den med dig igen.",
+ "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" : "Hallå där, \n\nAdministratören aktiverade serverkryptering. Alla dina filer har blivit krypterade med lösenordet: %s\n\nGå till i din profil för att ändra krypteringslösenordet till ditt egna lösenord. Ange lösenordet ovan som \"Gammalt lösenord\" och ange sedan ditt egna lösenord.\n\n",
"The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
- "Encrypt the home storage" : "Kryptera hemmalagringen",
+ "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>" : "Hallå där, <br> Administratören aktiverade serverkryptering. Alla dina filer har blivit krypterade med lösenordet: <strong>%s</ strong>. <br> Gå till i din profil för att ändra krypteringslösenordet till ditt egna lösenord. Ange lösenordet ovan som \"Gammalt lösenord\" och ange sedan ditt egna lösenord.<br>",
+ "Default encryption module" : "Krypteringsfunktion",
+ "Encrypt the home storage" : "Kryptera alla filer i molnet",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av det här alternativet krypterar alla filer som är lagrade på huvudlagringsplatsen, annars kommer bara filer på extern lagringsplats att krypteras",
"Enable recovery key" : "Aktivera återställningsnyckel",
"Disable recovery key" : "Inaktivera återställningsnyckel",
"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." : "Återställningsnyckeln är en extra krypteringsnyckel som används för att kryptera filer. Den gör det möjligt att återställa en användares filer om användaren glömmer sitt lösenord.",
- "Recovery key password" : "Lösenord för återställningsnyckel",
- "Repeat recovery key password" : "Upprepa lösenord för återställningsnyckeln",
- "Change recovery key password:" : "Ändra lösenord för återställningsnyckel:",
- "Old recovery key password" : "Gammalt lösenord för återställningsnyckeln",
- "New recovery key password" : "Nytt lösenord för återställningsnyckeln",
- "Repeat new recovery key password" : "Upprepa nytt lösenord för återställningsnyckeln",
+ "Recovery key password" : "Ange lösenord",
+ "Repeat recovery key password" : "Repetera lösenord",
+ "Change recovery key password:" : "Ändra lösenord för återställningsnyckel",
+ "Old recovery key password" : "Gammalt lösenord",
+ "New recovery key password" : "Nytt lösenord",
+ "Repeat new recovery key password" : "Repetera lösenord",
"Change Password" : "Byt lösenord",
+ "Basic encryption module" : "Kryptering",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
"Your private key password no longer matches your log-in password." : "Ditt lösenord för din privata nyckel matchar inte längre ditt inloggningslösenord.",
"Set your old private key password to your current log-in password:" : "Sätt ditt gamla privatnyckellösenord till ditt aktuella inloggningslösenord:",
@@ -46,7 +53,7 @@
"Old log-in password" : "Gammalt inloggningslösenord",
"Current log-in password" : "Nuvarande inloggningslösenord",
"Update Private Key Password" : "Uppdatera lösenordet för din privata nyckel",
- "Enable password recovery:" : "Aktivera lösenordsåterställning",
+ "Enable password recovery:" : "Aktivera lösenordsåterställning:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Genom att aktivera detta alternativ kommer du kunna återfå tillgång till dina krypterade filer om du skulle förlora/glömma ditt lösenord",
"Enabled" : "Aktiverad",
"Disabled" : "Inaktiverad"
diff --git a/apps/encryption/l10n/zh_CN.js b/apps/encryption/l10n/zh_CN.js
index e2f9212c8cf..729bf2a962c 100644
--- a/apps/encryption/l10n/zh_CN.js
+++ b/apps/encryption/l10n/zh_CN.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Missing recovery key password" : "丢失的回复密钥",
"Please repeat the recovery key password" : "请替换恢复密钥",
+ "Repeated recovery key password does not match the provided recovery key password" : "重复的恢复密钥密码与提供的恢复密钥密码不匹配",
"Recovery key successfully enabled" : "恢复密钥成功启用",
"Could not enable recovery key. Please check your recovery key password!" : "不能启用恢复密钥。请检查恢复密钥密码!",
"Recovery key successfully disabled" : "恢复密钥成功禁用",
@@ -13,18 +14,43 @@ OC.L10N.register(
"Please repeat the new recovery password" : "请替换新的恢复密码",
"Password successfully changed." : "密码修改成功。",
"Could not change the password. Maybe the old password was not correct." : "不能修改密码。旧密码可能不正确。",
+ "Recovery Key disabled" : "恢复密钥已禁用",
+ "Recovery Key enabled" : "恢复密钥已启用",
+ "Could not enable the recovery key, please try again or contact your administrator" : "无法启用恢复密钥,请重试或联系您的管理员.",
"Could not update the private key password." : "不能更新私有密钥。",
"The old password was not correct, please try again." : "原始密码错误,请重试。",
"The current log-in password was not correct, please try again." : "当前登录密码不正确,请重试。",
"Private key password successfully updated." : "私钥密码成功更新。",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
+ "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" : "您需要从旧版本 (ownCloud <= 8.0) 迁移您的加密密钥. 请运行 'occ encryption:migrate' 或联系您的管理员.",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的加密应用程序私钥。请在您的个人设置中更新您的私钥密码,以恢复对加密文件的访问。",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用程序已启用,但您的密钥未初始化,请注销并再次登录",
+ "Encryption app is enabled and ready" : "加密应用程序已启用并准备就绪",
+ "Bad Signature" : "签名已损坏",
+ "Missing Signature" : "签名已丢失",
+ "one-time password for server-side-encryption" : "用于服务器端加密的一次性密码",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "无法读取此文件,可能这是一个共享文件。请让文件所有者重新共享该文件。",
+ "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" : "您好,\n管理员已启用服务器端加密,您的文件已使用密码 '%s' 加密。\n\n请登陆网页界面,进入个人设置中的“基础加密模块”部分,在“旧登陆密码”处输入上述密码并输入您的当前登陆密码,即可更新加密密码。\n",
"The share will expire on %s." : "此分享将在 %s 过期。",
"Cheers!" : "干杯!",
+ "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>" : "您好,<br><br>管理员已启用服务器端加密,您的文件已使用密码 <strong>%s</strong> 加密。<br><br>\n请登陆网页界面,进入个人设置中的“基础加密模块”部分,在“旧登陆密码”处输入上述密码并输入您的当前登陆密码,即可更新加密密码。<br><br>",
+ "Default encryption module" : "默认加密模块",
+ "Encrypt the home storage" : "加密主目录储存",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "启用此选项将加密存储在主存储上的所有文件,否则只会加密外部存储上的文件.",
+ "Enable recovery key" : "启用恢复密钥",
+ "Disable recovery key" : "禁用恢复密钥",
+ "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." : "恢复密钥是用于加密文件的额外加密密钥.如果用户忘记了密码,它允许用户恢复文件.",
"Recovery key password" : "恢复密钥密码",
+ "Repeat recovery key password" : "重复恢复密码",
"Change recovery key password:" : "更改恢复密钥密码",
+ "Old recovery key password" : "旧的恢复密码",
+ "New recovery key password" : "新恢复密码",
+ "Repeat new recovery key password" : "重复新的恢复密码",
"Change Password" : "修改密码",
+ "Basic encryption module" : "基础加密模块",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
+ "Your private key password no longer matches your log-in password." : "您的私钥不再与您的登录密码匹配.",
+ "Set your old private key password to your current log-in password:" : "将的私钥设置为当前登录密码:",
" If you don't remember your old password you can ask your administrator to recover your files." : "如果您记不住旧的密码,您可以请求管理员恢复您的文件。",
"Old log-in password" : "旧登录密码",
"Current log-in password" : "当前登录密码",
diff --git a/apps/encryption/l10n/zh_CN.json b/apps/encryption/l10n/zh_CN.json
index 8ac6c9eef01..8fc58e8824e 100644
--- a/apps/encryption/l10n/zh_CN.json
+++ b/apps/encryption/l10n/zh_CN.json
@@ -1,6 +1,7 @@
{ "translations": {
"Missing recovery key password" : "丢失的回复密钥",
"Please repeat the recovery key password" : "请替换恢复密钥",
+ "Repeated recovery key password does not match the provided recovery key password" : "重复的恢复密钥密码与提供的恢复密钥密码不匹配",
"Recovery key successfully enabled" : "恢复密钥成功启用",
"Could not enable recovery key. Please check your recovery key password!" : "不能启用恢复密钥。请检查恢复密钥密码!",
"Recovery key successfully disabled" : "恢复密钥成功禁用",
@@ -11,18 +12,43 @@
"Please repeat the new recovery password" : "请替换新的恢复密码",
"Password successfully changed." : "密码修改成功。",
"Could not change the password. Maybe the old password was not correct." : "不能修改密码。旧密码可能不正确。",
+ "Recovery Key disabled" : "恢复密钥已禁用",
+ "Recovery Key enabled" : "恢复密钥已启用",
+ "Could not enable the recovery key, please try again or contact your administrator" : "无法启用恢复密钥,请重试或联系您的管理员.",
"Could not update the private key password." : "不能更新私有密钥。",
"The old password was not correct, please try again." : "原始密码错误,请重试。",
"The current log-in password was not correct, please try again." : "当前登录密码不正确,请重试。",
"Private key password successfully updated." : "私钥密码成功更新。",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
+ "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" : "您需要从旧版本 (ownCloud <= 8.0) 迁移您的加密密钥. 请运行 'occ encryption:migrate' 或联系您的管理员.",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的加密应用程序私钥。请在您的个人设置中更新您的私钥密码,以恢复对加密文件的访问。",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用程序已启用,但您的密钥未初始化,请注销并再次登录",
+ "Encryption app is enabled and ready" : "加密应用程序已启用并准备就绪",
+ "Bad Signature" : "签名已损坏",
+ "Missing Signature" : "签名已丢失",
+ "one-time password for server-side-encryption" : "用于服务器端加密的一次性密码",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "无法读取此文件,可能这是一个共享文件。请让文件所有者重新共享该文件。",
+ "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" : "您好,\n管理员已启用服务器端加密,您的文件已使用密码 '%s' 加密。\n\n请登陆网页界面,进入个人设置中的“基础加密模块”部分,在“旧登陆密码”处输入上述密码并输入您的当前登陆密码,即可更新加密密码。\n",
"The share will expire on %s." : "此分享将在 %s 过期。",
"Cheers!" : "干杯!",
+ "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>" : "您好,<br><br>管理员已启用服务器端加密,您的文件已使用密码 <strong>%s</strong> 加密。<br><br>\n请登陆网页界面,进入个人设置中的“基础加密模块”部分,在“旧登陆密码”处输入上述密码并输入您的当前登陆密码,即可更新加密密码。<br><br>",
+ "Default encryption module" : "默认加密模块",
+ "Encrypt the home storage" : "加密主目录储存",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "启用此选项将加密存储在主存储上的所有文件,否则只会加密外部存储上的文件.",
+ "Enable recovery key" : "启用恢复密钥",
+ "Disable recovery key" : "禁用恢复密钥",
+ "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." : "恢复密钥是用于加密文件的额外加密密钥.如果用户忘记了密码,它允许用户恢复文件.",
"Recovery key password" : "恢复密钥密码",
+ "Repeat recovery key password" : "重复恢复密码",
"Change recovery key password:" : "更改恢复密钥密码",
+ "Old recovery key password" : "旧的恢复密码",
+ "New recovery key password" : "新恢复密码",
+ "Repeat new recovery key password" : "重复新的恢复密码",
"Change Password" : "修改密码",
+ "Basic encryption module" : "基础加密模块",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
+ "Your private key password no longer matches your log-in password." : "您的私钥不再与您的登录密码匹配.",
+ "Set your old private key password to your current log-in password:" : "将的私钥设置为当前登录密码:",
" If you don't remember your old password you can ask your administrator to recover your files." : "如果您记不住旧的密码,您可以请求管理员恢复您的文件。",
"Old log-in password" : "旧登录密码",
"Current log-in password" : "当前登录密码",
diff --git a/apps/encryption/lib/Hooks/UserHooks.php b/apps/encryption/lib/Hooks/UserHooks.php
index 16e4e962432..d189ce3eeef 100644
--- a/apps/encryption/lib/Hooks/UserHooks.php
+++ b/apps/encryption/lib/Hooks/UserHooks.php
@@ -40,6 +40,13 @@ use OCA\Encryption\Session;
use OCA\Encryption\Recovery;
class UserHooks implements IHook {
+
+ /**
+ * list of user for which we perform a password reset
+ * @var array
+ */
+ protected static $passwordResetUsers = [];
+
/**
* @var KeyManager
*/
@@ -132,6 +139,16 @@ class UserHooks implements IHook {
$this,
'preSetPassphrase');
+ OCUtil::connectHook('\OC\Core\LostPassword\Controller\LostController',
+ 'post_passwordReset',
+ $this,
+ 'postPasswordReset');
+
+ OCUtil::connectHook('\OC\Core\LostPassword\Controller\LostController',
+ 'pre_passwordReset',
+ $this,
+ 'prePasswordReset');
+
OCUtil::connectHook('OC_User',
'post_createUser',
$this,
@@ -202,6 +219,22 @@ class UserHooks implements IHook {
}
}
+ public function prePasswordReset($params) {
+ if (App::isEnabled('encryption')) {
+ $user = $params['uid'];
+ self::$passwordResetUsers[$user] = true;
+ }
+ }
+
+ public function postPasswordReset($params) {
+ $uid = $params['uid'];
+ $password = $params['password'];
+ $this->keyManager->backupUserKeys('passwordReset', $uid);
+ $this->keyManager->deleteUserKeys($uid);
+ $this->userSetup->setupUser($uid, $password);
+ unset(self::$passwordResetUsers[$uid]);
+ }
+
/**
* If the password can't be changed within ownCloud, than update the key password in advance.
*
@@ -209,13 +242,10 @@ class UserHooks implements IHook {
* @return boolean|null
*/
public function preSetPassphrase($params) {
- if (App::isEnabled('encryption')) {
-
- $user = $this->userManager->get($params['uid']);
+ $user = $this->userManager->get($params['uid']);
- if ($user && !$user->canChangePassword()) {
- $this->setPassphrase($params);
- }
+ if ($user && !$user->canChangePassword()) {
+ $this->setPassphrase($params);
}
}
@@ -227,6 +257,12 @@ class UserHooks implements IHook {
*/
public function setPassphrase($params) {
+ // if we are in the process to resetting a user password, we have nothing
+ // to do here
+ if (isset(self::$passwordResetUsers[$params['uid']])) {
+ return true;
+ }
+
// Get existing decrypted private key
$privateKey = $this->session->getPrivateKey();
$user = $this->user->getUser();
@@ -299,19 +335,6 @@ class UserHooks implements IHook {
Filesystem::initMountPoints($user);
}
-
- /**
- * after password reset we create a new key pair for the user
- *
- * @param array $params
- */
- public function postPasswordReset($params) {
- $password = $params['password'];
-
- $this->keyManager->deleteUserKeys($params['uid']);
- $this->userSetup->setupUser($params['uid'], $password);
- }
-
/**
* setup file system for user
*
diff --git a/apps/encryption/lib/KeyManager.php b/apps/encryption/lib/KeyManager.php
index 26f023ed8f9..caae154b2d3 100644
--- a/apps/encryption/lib/KeyManager.php
+++ b/apps/encryption/lib/KeyManager.php
@@ -560,11 +560,10 @@ class KeyManager {
/**
* @param string $purpose
- * @param bool $timestamp
- * @param bool $includeUserKeys
+ * @param string $uid
*/
- public function backupAllKeys($purpose, $timestamp = true, $includeUserKeys = true) {
-// $backupDir = $this->keyStorage->;
+ public function backupUserKeys($purpose, $uid) {
+ $this->keyStorage->backupUserKeys(Encryption::ID, $purpose, $uid);
}
/**
@@ -573,7 +572,6 @@ class KeyManager {
* @param string $uid
*/
public function deleteUserKeys($uid) {
- $this->backupAllKeys('password_reset');
$this->deletePublicKey($uid);
$this->deletePrivateKey($uid);
}
diff --git a/apps/encryption/tests/Hooks/UserHooksTest.php b/apps/encryption/tests/Hooks/UserHooksTest.php
index 43cc54f8901..f9477e3e038 100644
--- a/apps/encryption/tests/Hooks/UserHooksTest.php
+++ b/apps/encryption/tests/Hooks/UserHooksTest.php
@@ -120,6 +120,31 @@ class UserHooksTest extends TestCase {
$this->assertTrue(true);
}
+ public function testPrePasswordReset() {
+ $params = ['uid' => 'user1'];
+ $expected = ['user1' => true];
+ $this->instance->prePasswordReset($params);
+ $passwordResetUsers = $this->invokePrivate($this->instance, 'passwordResetUsers');
+
+ $this->assertSame($expected, $passwordResetUsers);
+ }
+
+ public function testPostPasswordReset() {
+ $params = ['uid' => 'user1', 'password' => 'password'];
+ $this->invokePrivate($this->instance, 'passwordResetUsers', [['user1' => true]]);
+ $this->keyManagerMock->expects($this->once())->method('backupUserKeys')
+ ->with('passwordReset', 'user1');
+ $this->keyManagerMock->expects($this->once())->method('deleteUserKeys')
+ ->with('user1');
+ $this->userSetupMock->expects($this->once())->method('setupUser')
+ ->with('user1', 'password');
+
+ $this->instance->postPasswordReset($params);
+ $passwordResetUsers = $this->invokePrivate($this->instance, 'passwordResetUsers');
+ $this->assertEmpty($passwordResetUsers);
+
+ }
+
/**
* @dataProvider dataTestPreSetPassphrase
*/
@@ -252,6 +277,15 @@ class UserHooksTest extends TestCase {
$this->assertNull($this->instance->setPassphrase($this->params));
}
+ public function testSetPassphraseResetUserMode() {
+ $params = ['uid' => 'user1', 'password' => 'password'];
+ $this->invokePrivate($this->instance, 'passwordResetUsers', [[$params['uid'] => true]]);
+ $this->sessionMock->expects($this->never())->method('getPrivateKey');
+ $this->keyManagerMock->expects($this->never())->method('setPrivateKey');
+ $this->assertTrue($this->instance->setPassphrase($params));
+ $this->invokePrivate($this->instance, 'passwordResetUsers', [[]]);
+ }
+
public function testSetPasswordNoUser() {
$this->sessionMock->expects($this->once())
->method('getPrivateKey')
@@ -287,19 +321,6 @@ class UserHooksTest extends TestCase {
$this->assertNull($userHooks->setPassphrase($this->params));
}
- public function testPostPasswordReset() {
- $this->keyManagerMock->expects($this->once())
- ->method('deleteUserKeys')
- ->with('testUser');
-
- $this->userSetupMock->expects($this->once())
- ->method('setupUser')
- ->with('testUser', 'password');
-
- $this->instance->postPasswordReset($this->params);
- $this->assertTrue(true);
- }
-
protected function setUp() {
parent::setUp();
$this->loggerMock = $this->createMock(ILogger::class);
diff --git a/apps/encryption/tests/KeyManagerTest.php b/apps/encryption/tests/KeyManagerTest.php
index fec311afa35..40def135816 100644
--- a/apps/encryption/tests/KeyManagerTest.php
+++ b/apps/encryption/tests/KeyManagerTest.php
@@ -657,4 +657,10 @@ class KeyManagerTest extends TestCase {
$this->instance->setVersion('/admin/files/myfile.txt', 5, $view);
}
+ public function testBackupUserKeys() {
+ $this->keyStorageMock->expects($this->once())->method('backupUserKeys')
+ ->with('OC_DEFAULT_MODULE', 'test', 'user1');
+ $this->instance->backupUserKeys('test', 'user1');
+ }
+
}
diff --git a/apps/federatedfilesharing/appinfo/info.xml b/apps/federatedfilesharing/appinfo/info.xml
index 6a414496f37..dc5cbffaa8d 100644
--- a/apps/federatedfilesharing/appinfo/info.xml
+++ b/apps/federatedfilesharing/appinfo/info.xml
@@ -5,11 +5,11 @@
<description>Provide federated file sharing across servers</description>
<licence>AGPL</licence>
<author>Bjoern Schiessle, Roeland Jago Douma</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>FederatedFileSharing</namespace>
<category>other</category>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
<admin>OCA\FederatedFileSharing\Settings\Admin</admin>
diff --git a/apps/federatedfilesharing/l10n/cs_CZ.js b/apps/federatedfilesharing/l10n/cs_CZ.js
index c67601fa58d..bb7b85319af 100644
--- a/apps/federatedfilesharing/l10n/cs_CZ.js
+++ b/apps/federatedfilesharing/l10n/cs_CZ.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Otevřít dokumentaci",
"Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
"Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů",
- "Enable lookups on lookup server" : "Povolit vyhledávání na vyhledávacím serveru",
+ "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři",
"Federated Cloud" : "Sdružený cloud",
"Your Federated Cloud ID:" : "Vaše sdružené cloud ID:",
"Share it:" : "Sdílet:",
diff --git a/apps/federatedfilesharing/l10n/cs_CZ.json b/apps/federatedfilesharing/l10n/cs_CZ.json
index 574a5190465..f2784299888 100644
--- a/apps/federatedfilesharing/l10n/cs_CZ.json
+++ b/apps/federatedfilesharing/l10n/cs_CZ.json
@@ -39,7 +39,7 @@
"Open documentation" : "Otevřít dokumentaci",
"Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
"Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů",
- "Enable lookups on lookup server" : "Povolit vyhledávání na vyhledávacím serveru",
+ "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři",
"Federated Cloud" : "Sdružený cloud",
"Your Federated Cloud ID:" : "Vaše sdružené cloud ID:",
"Share it:" : "Sdílet:",
diff --git a/apps/federatedfilesharing/l10n/de.js b/apps/federatedfilesharing/l10n/de.js
index fb124264f48..f42561cd343 100644
--- a/apps/federatedfilesharing/l10n/de.js
+++ b/apps/federatedfilesharing/l10n/de.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Dokumentation öffnen",
"Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Enable lookups on lookup server" : "Lookups auf dem Lookup-Server aktivieren",
+ "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
"Share it:" : "Zum Teilen:",
diff --git a/apps/federatedfilesharing/l10n/de.json b/apps/federatedfilesharing/l10n/de.json
index e8e7e45dcc3..4535c57a301 100644
--- a/apps/federatedfilesharing/l10n/de.json
+++ b/apps/federatedfilesharing/l10n/de.json
@@ -39,7 +39,7 @@
"Open documentation" : "Dokumentation öffnen",
"Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Enable lookups on lookup server" : "Lookups auf dem Lookup-Server aktivieren",
+ "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
"Share it:" : "Zum Teilen:",
diff --git a/apps/federatedfilesharing/l10n/de_DE.js b/apps/federatedfilesharing/l10n/de_DE.js
index c2675ef7c99..a58332c630f 100644
--- a/apps/federatedfilesharing/l10n/de_DE.js
+++ b/apps/federatedfilesharing/l10n/de_DE.js
@@ -41,11 +41,11 @@ OC.L10N.register(
"Open documentation" : "Dokumentation öffnen",
"Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Enable lookups on lookup server" : "Lookups auf dem Lookup-Server aktivieren",
+ "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:",
"Share it:" : "Zum Teilen:",
- "Add to your website" : "Zu Ihrer Website hinzufügen",
+ "Add to your website" : "Zu Ihrer Web-Seite hinzufügen",
"Share with me via Nextcloud" : "Teilen Sie mit mir über Nextcloud",
"HTML Code:" : "HTML-Code:",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Die Freigabe von %s ist fehlgeschlagen, da %s nicht gefunden wurde. Möglicherweise ist der Server nicht erreichbar.",
diff --git a/apps/federatedfilesharing/l10n/de_DE.json b/apps/federatedfilesharing/l10n/de_DE.json
index a42ea3024fc..63136d92020 100644
--- a/apps/federatedfilesharing/l10n/de_DE.json
+++ b/apps/federatedfilesharing/l10n/de_DE.json
@@ -39,11 +39,11 @@
"Open documentation" : "Dokumentation öffnen",
"Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Enable lookups on lookup server" : "Lookups auf dem Lookup-Server aktivieren",
+ "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:",
"Share it:" : "Zum Teilen:",
- "Add to your website" : "Zu Ihrer Website hinzufügen",
+ "Add to your website" : "Zu Ihrer Web-Seite hinzufügen",
"Share with me via Nextcloud" : "Teilen Sie mit mir über Nextcloud",
"HTML Code:" : "HTML-Code:",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Die Freigabe von %s ist fehlgeschlagen, da %s nicht gefunden wurde. Möglicherweise ist der Server nicht erreichbar.",
diff --git a/apps/federatedfilesharing/l10n/es.js b/apps/federatedfilesharing/l10n/es.js
index 94047e854e7..abcf4317ff8 100644
--- a/apps/federatedfilesharing/l10n/es.js
+++ b/apps/federatedfilesharing/l10n/es.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Documentación abierta",
"Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
"Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir archivos de usuarios de otros servidores",
- "Enable lookups on lookup server" : "Activa búsquedas en servidor de búsqueda",
+ "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios",
"Federated Cloud" : "Nube Federada",
"Your Federated Cloud ID:" : "Su ID Nube Federada:",
"Share it:" : "Compartir:",
diff --git a/apps/federatedfilesharing/l10n/es.json b/apps/federatedfilesharing/l10n/es.json
index e5db0ee804f..477b45e8333 100644
--- a/apps/federatedfilesharing/l10n/es.json
+++ b/apps/federatedfilesharing/l10n/es.json
@@ -39,7 +39,7 @@
"Open documentation" : "Documentación abierta",
"Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
"Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir archivos de usuarios de otros servidores",
- "Enable lookups on lookup server" : "Activa búsquedas en servidor de búsqueda",
+ "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios",
"Federated Cloud" : "Nube Federada",
"Your Federated Cloud ID:" : "Su ID Nube Federada:",
"Share it:" : "Compartir:",
diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js
index cb4ece0ce82..092b87fb9e8 100644
--- a/apps/federatedfilesharing/l10n/fr.js
+++ b/apps/federatedfilesharing/l10n/fr.js
@@ -29,7 +29,7 @@ OC.L10N.register(
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.",
"Could not find share" : "Impossible de trouver le partage",
- "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s",
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Voir la documentation",
"Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs",
"Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs",
- "Enable lookups on lookup server" : "Activez les recherches sur le serveur de recherche",
+ "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :",
"Share it:" : "Partager :",
diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json
index 531f4a6770f..f90620b940d 100644
--- a/apps/federatedfilesharing/l10n/fr.json
+++ b/apps/federatedfilesharing/l10n/fr.json
@@ -27,7 +27,7 @@
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.",
"Could not find share" : "Impossible de trouver le partage",
- "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s",
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
@@ -39,7 +39,7 @@
"Open documentation" : "Voir la documentation",
"Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs",
"Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs",
- "Enable lookups on lookup server" : "Activez les recherches sur le serveur de recherche",
+ "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :",
"Share it:" : "Partager :",
diff --git a/apps/federatedfilesharing/l10n/hu_HU.js b/apps/federatedfilesharing/l10n/hu_HU.js
index 029586ee44a..a10a5461645 100644
--- a/apps/federatedfilesharing/l10n/hu_HU.js
+++ b/apps/federatedfilesharing/l10n/hu_HU.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Dokumentáció megnyitása",
"Allow users on this server to send shares to other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
"Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
- "Enable lookups on lookup server" : "Keresések engedélyezése a kereső szerveren",
+ "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben",
"Federated Cloud" : "Egyesített felhő",
"Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
"Share it:" : "Oszd meg:",
diff --git a/apps/federatedfilesharing/l10n/hu_HU.json b/apps/federatedfilesharing/l10n/hu_HU.json
index eeede1185a8..b68802f382f 100644
--- a/apps/federatedfilesharing/l10n/hu_HU.json
+++ b/apps/federatedfilesharing/l10n/hu_HU.json
@@ -39,7 +39,7 @@
"Open documentation" : "Dokumentáció megnyitása",
"Allow users on this server to send shares to other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
"Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
- "Enable lookups on lookup server" : "Keresések engedélyezése a kereső szerveren",
+ "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben",
"Federated Cloud" : "Egyesített felhő",
"Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
"Share it:" : "Oszd meg:",
diff --git a/apps/federatedfilesharing/l10n/id.js b/apps/federatedfilesharing/l10n/id.js
index be23cffaa42..66687b60102 100644
--- a/apps/federatedfilesharing/l10n/id.js
+++ b/apps/federatedfilesharing/l10n/id.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Remote share password" : "Sandi berbagi remote",
"Cancel" : "Batalkan",
"Add remote share" : "Tambah berbagi remote",
+ "Copy" : "Salin",
"Copied!" : "Tersalin!",
"Not supported!" : "Tidak didukung!",
"Press ⌘-C to copy." : "Tekan ⌘-C untuk menyalin.",
@@ -26,7 +27,12 @@ OC.L10N.register(
"Sharing %s failed, because this item is already shared with %s" : "Gagal membagkan %s, karena item ini sudah dibagikan dengan %s",
"Not allowed to create a federated share with the same user" : "Tidak diizinkan membuat pembagian terfederasi dengan pengguna yang sama",
"File is already shared with %s" : "Berkas sudah dibagikan dengan %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Berbagi %s gagal, tidak menemukan %s, mungkin peladen saat ini tidak dapat dicapai atau menggunakan sertifikat self-signed.",
"Could not find share" : "Tidak dapat mencari pembagian",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Anda menerima \"%3$s\" sebagai berbagi jauh dari %1$s (atas nama %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Anda menerima {share} sebagai berbagi jauh dari {user} (atas nama {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Anda menerima \"%3$s\" sebagai berbagi jauh dari %1$s",
+ "You received {share} as a remote share from {user}" : "Anda menerima {share} sebagai berbagi jauh dari {user}",
"Accept" : "Terima",
"Decline" : "Tolak",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Dibagikan pada saya melalui #Nextcloud Federated Cloud ID saya, lihat %s",
@@ -35,6 +41,7 @@ OC.L10N.register(
"Open documentation" : "Buka dokumentasi",
"Allow users on this server to send shares to other servers" : "Izinkan para pengguna di server ini untuk mengirimkan berbagi ke server lainnya.",
"Allow users on this server to receive shares from other servers" : "Izinkan para pengguna di server ini untuk menerima berbagi ke server lainnya.",
+ "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Federated Cloud ID Anda:",
"Share it:" : "Bagikan:",
diff --git a/apps/federatedfilesharing/l10n/id.json b/apps/federatedfilesharing/l10n/id.json
index 2cdf8f8f50a..de1c8d4cba1 100644
--- a/apps/federatedfilesharing/l10n/id.json
+++ b/apps/federatedfilesharing/l10n/id.json
@@ -5,6 +5,7 @@
"Remote share password" : "Sandi berbagi remote",
"Cancel" : "Batalkan",
"Add remote share" : "Tambah berbagi remote",
+ "Copy" : "Salin",
"Copied!" : "Tersalin!",
"Not supported!" : "Tidak didukung!",
"Press ⌘-C to copy." : "Tekan ⌘-C untuk menyalin.",
@@ -24,7 +25,12 @@
"Sharing %s failed, because this item is already shared with %s" : "Gagal membagkan %s, karena item ini sudah dibagikan dengan %s",
"Not allowed to create a federated share with the same user" : "Tidak diizinkan membuat pembagian terfederasi dengan pengguna yang sama",
"File is already shared with %s" : "Berkas sudah dibagikan dengan %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Berbagi %s gagal, tidak menemukan %s, mungkin peladen saat ini tidak dapat dicapai atau menggunakan sertifikat self-signed.",
"Could not find share" : "Tidak dapat mencari pembagian",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Anda menerima \"%3$s\" sebagai berbagi jauh dari %1$s (atas nama %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Anda menerima {share} sebagai berbagi jauh dari {user} (atas nama {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Anda menerima \"%3$s\" sebagai berbagi jauh dari %1$s",
+ "You received {share} as a remote share from {user}" : "Anda menerima {share} sebagai berbagi jauh dari {user}",
"Accept" : "Terima",
"Decline" : "Tolak",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Dibagikan pada saya melalui #Nextcloud Federated Cloud ID saya, lihat %s",
@@ -33,6 +39,7 @@
"Open documentation" : "Buka dokumentasi",
"Allow users on this server to send shares to other servers" : "Izinkan para pengguna di server ini untuk mengirimkan berbagi ke server lainnya.",
"Allow users on this server to receive shares from other servers" : "Izinkan para pengguna di server ini untuk menerima berbagi ke server lainnya.",
+ "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Federated Cloud ID Anda:",
"Share it:" : "Bagikan:",
diff --git a/apps/federatedfilesharing/l10n/it.js b/apps/federatedfilesharing/l10n/it.js
index 450ab68923b..514d4a84fb2 100644
--- a/apps/federatedfilesharing/l10n/it.js
+++ b/apps/federatedfilesharing/l10n/it.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Apri la documentazione",
"Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server",
"Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server",
- "Enable lookups on lookup server" : "Abilita le ricerche sul server di ricerca",
+ "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica",
"Federated Cloud" : "Cloud federata",
"Your Federated Cloud ID:" : "Il tuo ID di cloud federata:",
"Share it:" : "Condividilo:",
diff --git a/apps/federatedfilesharing/l10n/it.json b/apps/federatedfilesharing/l10n/it.json
index c7e06202fb2..e4780445361 100644
--- a/apps/federatedfilesharing/l10n/it.json
+++ b/apps/federatedfilesharing/l10n/it.json
@@ -39,7 +39,7 @@
"Open documentation" : "Apri la documentazione",
"Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server",
"Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server",
- "Enable lookups on lookup server" : "Abilita le ricerche sul server di ricerca",
+ "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica",
"Federated Cloud" : "Cloud federata",
"Your Federated Cloud ID:" : "Il tuo ID di cloud federata:",
"Share it:" : "Condividilo:",
diff --git a/apps/federatedfilesharing/l10n/nl.js b/apps/federatedfilesharing/l10n/nl.js
index 145b6e5b530..3e959bb9ce4 100644
--- a/apps/federatedfilesharing/l10n/nl.js
+++ b/apps/federatedfilesharing/l10n/nl.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Open documentatie",
"Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers",
"Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers",
- "Enable lookups on lookup server" : "Inschakelen lookups op lookupserver",
+ "Search global and public address book for users" : "Doorzoeken globale en openbare adresboeken naar gebruikers",
"Federated Cloud" : "Gefedereerde Cloud",
"Your Federated Cloud ID:" : "Je Federated Cloud ID:",
"Share it:" : "Deel het:",
diff --git a/apps/federatedfilesharing/l10n/nl.json b/apps/federatedfilesharing/l10n/nl.json
index 9aefcb75eb5..8db39a1dac0 100644
--- a/apps/federatedfilesharing/l10n/nl.json
+++ b/apps/federatedfilesharing/l10n/nl.json
@@ -39,7 +39,7 @@
"Open documentation" : "Open documentatie",
"Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers",
"Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers",
- "Enable lookups on lookup server" : "Inschakelen lookups op lookupserver",
+ "Search global and public address book for users" : "Doorzoeken globale en openbare adresboeken naar gebruikers",
"Federated Cloud" : "Gefedereerde Cloud",
"Your Federated Cloud ID:" : "Je Federated Cloud ID:",
"Share it:" : "Deel het:",
diff --git a/apps/federatedfilesharing/l10n/pl.js b/apps/federatedfilesharing/l10n/pl.js
index e3dc1d9e60d..8a51bfc13d2 100644
--- a/apps/federatedfilesharing/l10n/pl.js
+++ b/apps/federatedfilesharing/l10n/pl.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Remote share password" : "Hasło do zdalnego zasobu",
"Cancel" : "Anuluj",
"Add remote share" : "Dodaj zdalny zasób",
+ "Copy" : "Skopiuj",
"Copied!" : "Skopiowano!",
"Not supported!" : "Brak wsparcia!",
"Press ⌘-C to copy." : "Wciśnij ⌘-C by skopiować.",
diff --git a/apps/federatedfilesharing/l10n/pl.json b/apps/federatedfilesharing/l10n/pl.json
index bb4eb006291..f84f2d02253 100644
--- a/apps/federatedfilesharing/l10n/pl.json
+++ b/apps/federatedfilesharing/l10n/pl.json
@@ -5,6 +5,7 @@
"Remote share password" : "Hasło do zdalnego zasobu",
"Cancel" : "Anuluj",
"Add remote share" : "Dodaj zdalny zasób",
+ "Copy" : "Skopiuj",
"Copied!" : "Skopiowano!",
"Not supported!" : "Brak wsparcia!",
"Press ⌘-C to copy." : "Wciśnij ⌘-C by skopiować.",
diff --git a/apps/federatedfilesharing/l10n/pt_BR.js b/apps/federatedfilesharing/l10n/pt_BR.js
index f249242085e..2b88be0a4e6 100644
--- a/apps/federatedfilesharing/l10n/pt_BR.js
+++ b/apps/federatedfilesharing/l10n/pt_BR.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"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 nesse servidor recebam compartilhamentos de outros servidores",
- "Enable lookups on lookup server" : "Habilitar lookups no servidor de lookup",
+ "Search global and public address book for users" : "Procurar por usuários em 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:",
diff --git a/apps/federatedfilesharing/l10n/pt_BR.json b/apps/federatedfilesharing/l10n/pt_BR.json
index 11a3bbc9f39..be4f3f06fee 100644
--- a/apps/federatedfilesharing/l10n/pt_BR.json
+++ b/apps/federatedfilesharing/l10n/pt_BR.json
@@ -39,7 +39,7 @@
"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 nesse servidor recebam compartilhamentos de outros servidores",
- "Enable lookups on lookup server" : "Habilitar lookups no servidor de lookup",
+ "Search global and public address book for users" : "Procurar por usuários em 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:",
diff --git a/apps/federatedfilesharing/l10n/ru.js b/apps/federatedfilesharing/l10n/ru.js
index 7202a179d4c..f2b23b41c31 100644
--- a/apps/federatedfilesharing/l10n/ru.js
+++ b/apps/federatedfilesharing/l10n/ru.js
@@ -2,41 +2,48 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "Общий доступ из объединённого общего хранилища",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Вы хотите добавить удалённую общую папку {name} из {owner}@{remote}?",
- "Remote share" : "Удаленный общий ресурс",
- "Remote share password" : "Пароль для удаленного общего ресурса",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Вы хотите добавить удалённый общий каталог {name} из {owner}@{remote}?",
+ "Remote share" : "Удалённый общий ресурс",
+ "Remote share password" : "Пароль для удалённого общего ресурса",
"Cancel" : "Отмена",
"Add remote share" : "Добавить удалённый общий ресурс",
+ "Copy" : "Копировать",
"Copied!" : "Скопировано!",
"Not supported!" : "Не поддерживается!",
"Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.",
"Press Ctrl-C to copy." : "Нажмите Ctrl-C для копирования.",
"Invalid Federated Cloud ID" : "Неверный ID в объединении облачных хранилищ.",
"Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общего доступа",
- "Couldn't establish a federated share." : "Не удаётся установить распределённый общий ресурс.",
- "Couldn't establish a federated share, maybe the password was wrong." : "Не удаётся установить распределённый общий ресурс, может быть пароль был не верен.",
- "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Запрос на распределённый удалённый ресурс прошёл успешно, вы получите приглашение. Проверьте ваши уведомления.",
+ "Couldn't establish a federated share." : "Не удаётся установить федеративный общий доступ.",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Не удаётся установить федеративный общий доступ, может быть пароль был не верен.",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Запрос на федеративный общий ресурс прошёл успешно, вы получите приглашение. Проверьте ваши уведомления.",
"The mountpoint name contains invalid characters." : "Имя точки монтирования содержит недопустимые символы.",
- "Not allowed to create a federated share with the owner." : "Не допускается создание распределённого общего ресурса с собственником.",
+ "Not allowed to create a federated share with the owner." : "Не допускается создание федеративного общего ресурса с владельцем.",
"Invalid or untrusted SSL certificate" : "Недействительный или недоверенный сертификат SSL",
- "Could not authenticate to remote share, password might be wrong" : "Не удалось произвести аутентификацию для доступа к удалённому хранилищу, возможно неправильно указан пароль",
+ "Could not authenticate to remote share, password might be wrong" : "Не удалось провести проверку подлинности для доступа к удалённому хранилищу, возможно неправильно указан пароль",
"Storage not valid" : "Хранилище недоступно",
- "Federated Share successfully added" : "Распределённый общий ресурс успешно добавлен",
+ "Federated Share successfully added" : "Федеративный общий ресурс успешно добавлен",
"Couldn't add remote share" : "Невозможно добавить удалённый общий ресурс",
"Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться %s, пользователь %s уже имеет доступ к этому элементу",
"Not allowed to create a federated share with the same user" : "Не допускается создание федеративного общего ресурса с тем же пользователем",
"File is already shared with %s" : "Доступ к файлу уже предоставлен %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Не удалось поделиться %s, не удалось найти %s, возможно, сервер не доступен или использует самозавернный сертификат.",
"Could not find share" : "Не удалось найти общий ресурс",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Вы получили \"%3$s\" в качестве удалённого ресурса из %1$s (от имени %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Вы получили {share} в качестве удалённого ресурса от {user} (от имени {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Вы получили \"%3$s\" в качестве удалённого ресурса из %1$s",
+ "You received {share} as a remote share from {user}" : "Вы получили {share} в качестве удалённого ресурса от {user}",
"Accept" : "Принять",
"Decline" : "Отклонить",
- "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #Nextcloud ID в объединении облачных хранилищ, смотрите %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Поделитесь со мной через мой #Nextcloud ID в объединении облачных хранилищ",
- "Federated Cloud Sharing" : "Объединение облачных хранилищ",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #Nextcloud ID в федерации облачных хранилищ, смотрите %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Поделитесь со мной через мой #Nextcloud ID в федерации облачных хранилищ",
+ "Federated Cloud Sharing" : "Федерация облачных хранилищ",
"Open documentation" : "Открыть документацию",
"Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов",
"Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов",
- "Federated Cloud" : "Объединение облачных хранилищ",
- "Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:",
+ "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге",
+ "Federated Cloud" : "Федерация облачных хранилищ",
+ "Your Federated Cloud ID:" : "Ваш ID в федерации облачных хранилищ:",
"Share it:" : "Поделиться:",
"Add to your website" : "Добавить к себе на сайт",
"Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud",
diff --git a/apps/federatedfilesharing/l10n/ru.json b/apps/federatedfilesharing/l10n/ru.json
index 85a15a968b7..c0d9520abcd 100644
--- a/apps/federatedfilesharing/l10n/ru.json
+++ b/apps/federatedfilesharing/l10n/ru.json
@@ -1,40 +1,47 @@
{ "translations": {
"Federated sharing" : "Общий доступ из объединённого общего хранилища",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Вы хотите добавить удалённую общую папку {name} из {owner}@{remote}?",
- "Remote share" : "Удаленный общий ресурс",
- "Remote share password" : "Пароль для удаленного общего ресурса",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Вы хотите добавить удалённый общий каталог {name} из {owner}@{remote}?",
+ "Remote share" : "Удалённый общий ресурс",
+ "Remote share password" : "Пароль для удалённого общего ресурса",
"Cancel" : "Отмена",
"Add remote share" : "Добавить удалённый общий ресурс",
+ "Copy" : "Копировать",
"Copied!" : "Скопировано!",
"Not supported!" : "Не поддерживается!",
"Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.",
"Press Ctrl-C to copy." : "Нажмите Ctrl-C для копирования.",
"Invalid Federated Cloud ID" : "Неверный ID в объединении облачных хранилищ.",
"Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общего доступа",
- "Couldn't establish a federated share." : "Не удаётся установить распределённый общий ресурс.",
- "Couldn't establish a federated share, maybe the password was wrong." : "Не удаётся установить распределённый общий ресурс, может быть пароль был не верен.",
- "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Запрос на распределённый удалённый ресурс прошёл успешно, вы получите приглашение. Проверьте ваши уведомления.",
+ "Couldn't establish a federated share." : "Не удаётся установить федеративный общий доступ.",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Не удаётся установить федеративный общий доступ, может быть пароль был не верен.",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Запрос на федеративный общий ресурс прошёл успешно, вы получите приглашение. Проверьте ваши уведомления.",
"The mountpoint name contains invalid characters." : "Имя точки монтирования содержит недопустимые символы.",
- "Not allowed to create a federated share with the owner." : "Не допускается создание распределённого общего ресурса с собственником.",
+ "Not allowed to create a federated share with the owner." : "Не допускается создание федеративного общего ресурса с владельцем.",
"Invalid or untrusted SSL certificate" : "Недействительный или недоверенный сертификат SSL",
- "Could not authenticate to remote share, password might be wrong" : "Не удалось произвести аутентификацию для доступа к удалённому хранилищу, возможно неправильно указан пароль",
+ "Could not authenticate to remote share, password might be wrong" : "Не удалось провести проверку подлинности для доступа к удалённому хранилищу, возможно неправильно указан пароль",
"Storage not valid" : "Хранилище недоступно",
- "Federated Share successfully added" : "Распределённый общий ресурс успешно добавлен",
+ "Federated Share successfully added" : "Федеративный общий ресурс успешно добавлен",
"Couldn't add remote share" : "Невозможно добавить удалённый общий ресурс",
"Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться %s, пользователь %s уже имеет доступ к этому элементу",
"Not allowed to create a federated share with the same user" : "Не допускается создание федеративного общего ресурса с тем же пользователем",
"File is already shared with %s" : "Доступ к файлу уже предоставлен %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Не удалось поделиться %s, не удалось найти %s, возможно, сервер не доступен или использует самозавернный сертификат.",
"Could not find share" : "Не удалось найти общий ресурс",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Вы получили \"%3$s\" в качестве удалённого ресурса из %1$s (от имени %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Вы получили {share} в качестве удалённого ресурса от {user} (от имени {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Вы получили \"%3$s\" в качестве удалённого ресурса из %1$s",
+ "You received {share} as a remote share from {user}" : "Вы получили {share} в качестве удалённого ресурса от {user}",
"Accept" : "Принять",
"Decline" : "Отклонить",
- "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #Nextcloud ID в объединении облачных хранилищ, смотрите %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Поделитесь со мной через мой #Nextcloud ID в объединении облачных хранилищ",
- "Federated Cloud Sharing" : "Объединение облачных хранилищ",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #Nextcloud ID в федерации облачных хранилищ, смотрите %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Поделитесь со мной через мой #Nextcloud ID в федерации облачных хранилищ",
+ "Federated Cloud Sharing" : "Федерация облачных хранилищ",
"Open documentation" : "Открыть документацию",
"Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов",
"Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов",
- "Federated Cloud" : "Объединение облачных хранилищ",
- "Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:",
+ "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге",
+ "Federated Cloud" : "Федерация облачных хранилищ",
+ "Your Federated Cloud ID:" : "Ваш ID в федерации облачных хранилищ:",
"Share it:" : "Поделиться:",
"Add to your website" : "Добавить к себе на сайт",
"Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud",
diff --git a/apps/federatedfilesharing/l10n/sq.js b/apps/federatedfilesharing/l10n/sq.js
index ae500204ce4..4e55e171b81 100644
--- a/apps/federatedfilesharing/l10n/sq.js
+++ b/apps/federatedfilesharing/l10n/sq.js
@@ -2,13 +2,26 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "Ndarje e federuar",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Doni që të shtoni ndarjen në remote {name} nga {owner}@{remote}?",
+ "Remote share" : "Ndarje në largësi",
+ "Remote share password" : "Fjalëkalim ndarjeje të largët",
+ "Cancel" : "Anulo",
+ "Copy" : "Kopjo",
+ "Copied!" : "U kopjua!",
+ "Not supported!" : "Nuk mbështetet!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar",
"Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
+ "Server to server sharing is not enabled on this server" : "Shpërndarja server në server nuk është e mundësuar në këtë server",
+ "Storage not valid" : "memorja nuk është e vlefshme",
+ "Couldn't add remote share" : "Nuk mund të shtohet ndarja në largësi",
"Sharing %s failed, because this item is already shared with %s" : "Ndarja për %s dështoi, ngaqë ky objekt është ndarë një herë me %s",
"Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues",
- "File is already shared with %s" : "Kartelë e ndarë tashmë me %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
- "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
- "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s",
+ "File is already shared with %s" : "Skedari është ndarë tashmë me %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Ndarja e %s dështoi, nuk mund të gjendet %s, ndoshta serveri është për momentin i paaksesueshëm ose përdor një çertifikatë të vetë-nënshkruar",
+ "Could not find share" : "Nuk mund të gjenim ndarjen",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Ju ",
+ "You received \"%3$s\" as a remote share from %1$s" : "Ju pranuat \"%3$s\" si një shpërndarje në distancë nga %1$s",
"Accept" : "Pranoje",
"Decline" : "Hidhe poshtë",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Ndani me mua përmes ID-së time për #Nextcloud Federated Cloud, shihni %s",
@@ -22,6 +35,9 @@ OC.L10N.register(
"Share it:" : "Ndajeni:",
"Add to your website" : "Shtojeni te sajti juaj",
"Share with me via Nextcloud" : "Ndani me mua përmes Nextcloud-it",
- "HTML Code:" : "Kod HTML:"
+ "HTML Code:" : "Kod HTML:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/sq.json b/apps/federatedfilesharing/l10n/sq.json
index 57961c2c2ae..07858aa6434 100644
--- a/apps/federatedfilesharing/l10n/sq.json
+++ b/apps/federatedfilesharing/l10n/sq.json
@@ -1,12 +1,25 @@
{ "translations": {
"Federated sharing" : "Ndarje e federuar",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Doni që të shtoni ndarjen në remote {name} nga {owner}@{remote}?",
+ "Remote share" : "Ndarje në largësi",
+ "Remote share password" : "Fjalëkalim ndarjeje të largët",
+ "Cancel" : "Anulo",
+ "Copy" : "Kopjo",
+ "Copied!" : "U kopjua!",
+ "Not supported!" : "Nuk mbështetet!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar",
"Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
+ "Server to server sharing is not enabled on this server" : "Shpërndarja server në server nuk është e mundësuar në këtë server",
+ "Storage not valid" : "memorja nuk është e vlefshme",
+ "Couldn't add remote share" : "Nuk mund të shtohet ndarja në largësi",
"Sharing %s failed, because this item is already shared with %s" : "Ndarja për %s dështoi, ngaqë ky objekt është ndarë një herë me %s",
"Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues",
- "File is already shared with %s" : "Kartelë e ndarë tashmë me %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
- "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
- "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s",
+ "File is already shared with %s" : "Skedari është ndarë tashmë me %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Ndarja e %s dështoi, nuk mund të gjendet %s, ndoshta serveri është për momentin i paaksesueshëm ose përdor një çertifikatë të vetë-nënshkruar",
+ "Could not find share" : "Nuk mund të gjenim ndarjen",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Ju ",
+ "You received \"%3$s\" as a remote share from %1$s" : "Ju pranuat \"%3$s\" si një shpërndarje në distancë nga %1$s",
"Accept" : "Pranoje",
"Decline" : "Hidhe poshtë",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Ndani me mua përmes ID-së time për #Nextcloud Federated Cloud, shihni %s",
@@ -20,6 +33,9 @@
"Share it:" : "Ndajeni:",
"Add to your website" : "Shtojeni te sajti juaj",
"Share with me via Nextcloud" : "Ndani me mua përmes Nextcloud-it",
- "HTML Code:" : "Kod HTML:"
+ "HTML Code:" : "Kod HTML:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/sv.js b/apps/federatedfilesharing/l10n/sv.js
index 6378c02eef6..0f5b0798825 100644
--- a/apps/federatedfilesharing/l10n/sv.js
+++ b/apps/federatedfilesharing/l10n/sv.js
@@ -2,26 +2,54 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "Federated Delning",
- "Invalid Federated Cloud ID" : "Ogiltig Federerad Cloud-ID",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vill du lägga till fjärrdelning {name} från {owner}@{remote}?",
+ "Remote share" : "Extern delning",
+ "Remote share password" : "Lösenord för extern delning",
+ "Cancel" : "Avbryt",
+ "Add remote share" : "Lägg till extern delning",
+ "Copy" : "Kopiera",
+ "Copied!" : "Kopierad!",
+ "Not supported!" : "Stöds ej!",
+ "Press ⌘-C to copy." : "Tryck ⌘-C för att kopiera.",
+ "Press Ctrl-C to copy." : "Tryck Ctrl-C för att kopiera.",
+ "Invalid Federated Cloud ID" : "Ogiltig Federerad Moln-ID",
+ "Server to server sharing is not enabled on this server" : "Server-till-server-delning är inte aktiverat på denna server",
+ "Couldn't establish a federated share." : "Kunde inte lägga till en fefererad utdelning",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Kunde inte lägga till en fefererad utdelning, lösenordet kanske var felaktigt.",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Federerad delningsbegäran lyckades och du kommer att få en inbjudan. Kolla dina notifikationer.",
+ "The mountpoint name contains invalid characters." : "Monteringspunktens namn innehåller ogiltiga tecken.",
+ "Not allowed to create a federated share with the owner." : "Ej tillåtet att skapa en federerad delning med ägaren",
+ "Invalid or untrusted SSL certificate" : "Ogiltigt eller ej betrott SSL-certifikat",
+ "Could not authenticate to remote share, password might be wrong" : "Kunde inte autensiera mot externa servern, lösenordet kan vara fel",
+ "Storage not valid" : "Lagring ogiltig",
+ "Federated Share successfully added" : "Federerad delning lyckades",
+ "Couldn't add remote share" : "Kunde inte lägga till extern delning",
"Sharing %s failed, because this item is already shared with %s" : "Delning %s misslyckades därför att objektet redan är delat med %s",
"Not allowed to create a federated share with the same user" : "Ej tillåtet att skapa en federerad delning med samma användare",
"File is already shared with %s" : "Filen är redan delad med %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Misslyckades dela ut %s, kan inte hitta %s, kanske är servern inte åtkomlig för närvarande.",
- "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du tog emot \"/%3$s\" som en fjärrdelning från %1$s (via %2$s)",
- "You received \"/%3$s\" as a remote share from %1$s" : "Du tog emot \"/%3$s\" som en fjärrdelning från %1$s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Misslyckades att dela ut %s kunde inte hitta %s, kanske är servern inte tillgänglig för närvarande eller så används ett självsignerat certifikat",
+ "Could not find share" : "Kunde inte hitta delning",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du tog emot \"%3$s\" som en extern delning från %1$s (på uppdrag av %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Du tog emot {share} som en extern delning {user} (på uppdrag av {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Du tog emot \"%3$s\" som en extern delning från %1$s",
+ "You received {share} as a remote share from {user}" : "Du tog emot {share} som en extern delning från {user}",
"Accept" : "Acceptera",
"Decline" : "Neka",
- "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Dela med mig genom min #Nextcloud Federated Cloud ID, se %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Dela med mig genom min #Nextcloud Federated Cloud ID",
- "Federated Cloud Sharing" : "Federate Cloud delning",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Dela med mig genom mitt #Nextcloud Federerade Moln-ID, se %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Dela med mig genom mitt #Nextcloud Federerade Moln-ID",
+ "Federated Cloud Sharing" : "Federerad Moln-delning",
"Open documentation" : "Öppna dokumentation",
"Allow users on this server to send shares to other servers" : "Tillåt användare på denna server att skicka utdelningar till andra servrar",
"Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar",
- "Federated Cloud" : "Federated Cloud",
- "Your Federated Cloud ID:" : "Ditt Federated Cloud ID",
+ "Search global and public address book for users" : "Sök global och offentlig adressbok för användare",
+ "Federated Cloud" : "Federerat Moln",
+ "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID:",
"Share it:" : "Dela detta:",
"Add to your website" : "Lägg till på din hemsida",
"Share with me via Nextcloud" : "Dela med mig via Nextcloud",
- "HTML Code:" : "HTML Kod:"
+ "HTML Code:" : "HTML Kod:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Misslyckades dela ut %s, kan inte hitta %s, kanske är servern inte åtkomlig för närvarande.",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du tog emot \"/%3$s\" som en extern delning från %1$s (via %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "Du tog emot \"/%3$s\" som en extern delning från %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/sv.json b/apps/federatedfilesharing/l10n/sv.json
index 91c41f5b125..5eff9e9f0d2 100644
--- a/apps/federatedfilesharing/l10n/sv.json
+++ b/apps/federatedfilesharing/l10n/sv.json
@@ -1,25 +1,53 @@
{ "translations": {
"Federated sharing" : "Federated Delning",
- "Invalid Federated Cloud ID" : "Ogiltig Federerad Cloud-ID",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vill du lägga till fjärrdelning {name} från {owner}@{remote}?",
+ "Remote share" : "Extern delning",
+ "Remote share password" : "Lösenord för extern delning",
+ "Cancel" : "Avbryt",
+ "Add remote share" : "Lägg till extern delning",
+ "Copy" : "Kopiera",
+ "Copied!" : "Kopierad!",
+ "Not supported!" : "Stöds ej!",
+ "Press ⌘-C to copy." : "Tryck ⌘-C för att kopiera.",
+ "Press Ctrl-C to copy." : "Tryck Ctrl-C för att kopiera.",
+ "Invalid Federated Cloud ID" : "Ogiltig Federerad Moln-ID",
+ "Server to server sharing is not enabled on this server" : "Server-till-server-delning är inte aktiverat på denna server",
+ "Couldn't establish a federated share." : "Kunde inte lägga till en fefererad utdelning",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Kunde inte lägga till en fefererad utdelning, lösenordet kanske var felaktigt.",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Federerad delningsbegäran lyckades och du kommer att få en inbjudan. Kolla dina notifikationer.",
+ "The mountpoint name contains invalid characters." : "Monteringspunktens namn innehåller ogiltiga tecken.",
+ "Not allowed to create a federated share with the owner." : "Ej tillåtet att skapa en federerad delning med ägaren",
+ "Invalid or untrusted SSL certificate" : "Ogiltigt eller ej betrott SSL-certifikat",
+ "Could not authenticate to remote share, password might be wrong" : "Kunde inte autensiera mot externa servern, lösenordet kan vara fel",
+ "Storage not valid" : "Lagring ogiltig",
+ "Federated Share successfully added" : "Federerad delning lyckades",
+ "Couldn't add remote share" : "Kunde inte lägga till extern delning",
"Sharing %s failed, because this item is already shared with %s" : "Delning %s misslyckades därför att objektet redan är delat med %s",
"Not allowed to create a federated share with the same user" : "Ej tillåtet att skapa en federerad delning med samma användare",
"File is already shared with %s" : "Filen är redan delad med %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Misslyckades dela ut %s, kan inte hitta %s, kanske är servern inte åtkomlig för närvarande.",
- "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du tog emot \"/%3$s\" som en fjärrdelning från %1$s (via %2$s)",
- "You received \"/%3$s\" as a remote share from %1$s" : "Du tog emot \"/%3$s\" som en fjärrdelning från %1$s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Misslyckades att dela ut %s kunde inte hitta %s, kanske är servern inte tillgänglig för närvarande eller så används ett självsignerat certifikat",
+ "Could not find share" : "Kunde inte hitta delning",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du tog emot \"%3$s\" som en extern delning från %1$s (på uppdrag av %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Du tog emot {share} som en extern delning {user} (på uppdrag av {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Du tog emot \"%3$s\" som en extern delning från %1$s",
+ "You received {share} as a remote share from {user}" : "Du tog emot {share} som en extern delning från {user}",
"Accept" : "Acceptera",
"Decline" : "Neka",
- "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Dela med mig genom min #Nextcloud Federated Cloud ID, se %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Dela med mig genom min #Nextcloud Federated Cloud ID",
- "Federated Cloud Sharing" : "Federate Cloud delning",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Dela med mig genom mitt #Nextcloud Federerade Moln-ID, se %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Dela med mig genom mitt #Nextcloud Federerade Moln-ID",
+ "Federated Cloud Sharing" : "Federerad Moln-delning",
"Open documentation" : "Öppna dokumentation",
"Allow users on this server to send shares to other servers" : "Tillåt användare på denna server att skicka utdelningar till andra servrar",
"Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar",
- "Federated Cloud" : "Federated Cloud",
- "Your Federated Cloud ID:" : "Ditt Federated Cloud ID",
+ "Search global and public address book for users" : "Sök global och offentlig adressbok för användare",
+ "Federated Cloud" : "Federerat Moln",
+ "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID:",
"Share it:" : "Dela detta:",
"Add to your website" : "Lägg till på din hemsida",
"Share with me via Nextcloud" : "Dela med mig via Nextcloud",
- "HTML Code:" : "HTML Kod:"
+ "HTML Code:" : "HTML Kod:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Misslyckades dela ut %s, kan inte hitta %s, kanske är servern inte åtkomlig för närvarande.",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du tog emot \"/%3$s\" som en extern delning från %1$s (via %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "Du tog emot \"/%3$s\" som en extern delning från %1$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/zh_CN.js b/apps/federatedfilesharing/l10n/zh_CN.js
index c98f000cdc3..03f94122a9b 100644
--- a/apps/federatedfilesharing/l10n/zh_CN.js
+++ b/apps/federatedfilesharing/l10n/zh_CN.js
@@ -2,21 +2,45 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "联合云共享",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "你想要添加远程共享 {名称} 来自 {所属}@{远程}?",
+ "Remote share" : "远程分享",
+ "Remote share password" : "远程分享密码",
+ "Cancel" : "取消",
+ "Add remote share" : "添加远程分享",
+ "Copy" : "复制",
+ "Copied!" : "已复制!",
+ "Not supported!" : "不支持!",
+ "Press ⌘-C to copy." : "请按 ⌘-C 键复制",
+ "Press Ctrl-C to copy." : "请按 Ctrl-C 键复制",
"Invalid Federated Cloud ID" : "联合云ID不正确",
+ "Server to server sharing is not enabled on this server" : "此服务器未启用服务器到服务器分享功能",
+ "Couldn't establish a federated share." : "无法建立一个远程分享",
+ "Couldn't establish a federated share, maybe the password was wrong." : "无法建立分享,可能密码是错误的。",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "联合共享请求已成功,您将会收到邀请信息,请检查您的通知。",
+ "The mountpoint name contains invalid characters." : "挂载点的名称包含无效字符。",
+ "Not allowed to create a federated share with the owner." : "不允许与所有者创建联合共享.",
+ "Invalid or untrusted SSL certificate" : "无效或是不被信任的 SSL 证书",
+ "Could not authenticate to remote share, password might be wrong" : "无法验证远程共享,可能是密码错误",
+ "Storage not valid" : "存储不可用",
+ "Federated Share successfully added" : "已成功添加联合共享",
+ "Couldn't add remote share" : "无法添加远程共享",
"Sharing %s failed, because this item is already shared with %s" : "共享 %s 失败,因为它已经共享给 %s",
"Not allowed to create a federated share with the same user" : "不能给你自己分享文件",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "共享 %s 失败,联合云无法找到 %s,请检查设置或联系管理员。",
+ "File is already shared with %s" : "文件已经共享与 %s",
+ "Could not find share" : "没有发现共享",
"Accept" : "接受",
"Decline" : "拒绝",
"Federated Cloud Sharing" : "联合云共享",
"Open documentation" : "打开文档",
"Allow users on this server to send shares to other servers" : "允许用户分享文件给其他服务器上的用户",
"Allow users on this server to receive shares from other servers" : "允许用户从其他服务器接收分享",
+ "Search global and public address book for users" : "在全局和公开地址簿中寻找用户",
"Federated Cloud" : "联合云",
"Your Federated Cloud ID:" : "你的联合云ID:",
"Share it:" : "分享它:",
"Add to your website" : "添加到您的网站",
"Share with me via Nextcloud" : "通过联合云与我共享",
- "HTML Code:" : "HTML 代码:"
+ "HTML Code:" : "HTML 代码:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "共享 %s 失败,联合云无法找到 %s,请检查设置或联系管理员。"
},
"nplurals=1; plural=0;");
diff --git a/apps/federatedfilesharing/l10n/zh_CN.json b/apps/federatedfilesharing/l10n/zh_CN.json
index c996e02dc1e..2972c8ba96f 100644
--- a/apps/federatedfilesharing/l10n/zh_CN.json
+++ b/apps/federatedfilesharing/l10n/zh_CN.json
@@ -1,20 +1,44 @@
{ "translations": {
"Federated sharing" : "联合云共享",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "你想要添加远程共享 {名称} 来自 {所属}@{远程}?",
+ "Remote share" : "远程分享",
+ "Remote share password" : "远程分享密码",
+ "Cancel" : "取消",
+ "Add remote share" : "添加远程分享",
+ "Copy" : "复制",
+ "Copied!" : "已复制!",
+ "Not supported!" : "不支持!",
+ "Press ⌘-C to copy." : "请按 ⌘-C 键复制",
+ "Press Ctrl-C to copy." : "请按 Ctrl-C 键复制",
"Invalid Federated Cloud ID" : "联合云ID不正确",
+ "Server to server sharing is not enabled on this server" : "此服务器未启用服务器到服务器分享功能",
+ "Couldn't establish a federated share." : "无法建立一个远程分享",
+ "Couldn't establish a federated share, maybe the password was wrong." : "无法建立分享,可能密码是错误的。",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "联合共享请求已成功,您将会收到邀请信息,请检查您的通知。",
+ "The mountpoint name contains invalid characters." : "挂载点的名称包含无效字符。",
+ "Not allowed to create a federated share with the owner." : "不允许与所有者创建联合共享.",
+ "Invalid or untrusted SSL certificate" : "无效或是不被信任的 SSL 证书",
+ "Could not authenticate to remote share, password might be wrong" : "无法验证远程共享,可能是密码错误",
+ "Storage not valid" : "存储不可用",
+ "Federated Share successfully added" : "已成功添加联合共享",
+ "Couldn't add remote share" : "无法添加远程共享",
"Sharing %s failed, because this item is already shared with %s" : "共享 %s 失败,因为它已经共享给 %s",
"Not allowed to create a federated share with the same user" : "不能给你自己分享文件",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "共享 %s 失败,联合云无法找到 %s,请检查设置或联系管理员。",
+ "File is already shared with %s" : "文件已经共享与 %s",
+ "Could not find share" : "没有发现共享",
"Accept" : "接受",
"Decline" : "拒绝",
"Federated Cloud Sharing" : "联合云共享",
"Open documentation" : "打开文档",
"Allow users on this server to send shares to other servers" : "允许用户分享文件给其他服务器上的用户",
"Allow users on this server to receive shares from other servers" : "允许用户从其他服务器接收分享",
+ "Search global and public address book for users" : "在全局和公开地址簿中寻找用户",
"Federated Cloud" : "联合云",
"Your Federated Cloud ID:" : "你的联合云ID:",
"Share it:" : "分享它:",
"Add to your website" : "添加到您的网站",
"Share with me via Nextcloud" : "通过联合云与我共享",
- "HTML Code:" : "HTML 代码:"
+ "HTML Code:" : "HTML 代码:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "共享 %s 失败,联合云无法找到 %s,请检查设置或联系管理员。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
index 55329338a92..3c399268124 100644
--- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
+++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
@@ -25,18 +25,24 @@
namespace OCA\FederatedFileSharing\Controller;
+use OC\Files\Filesystem;
use OC\HintException;
+use OC\Share\Helper;
use OCA\FederatedFileSharing\AddressHandler;
+use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCA\Files_Sharing\External\Manager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
+use OCP\Files\StorageInvalidException;
use OCP\Http\Client\IClientService;
use OCP\IL10N;
use OCP\IRequest;
use OCP\ISession;
use OCP\IUserSession;
use OCP\Share\IManager;
+use OCP\Util;
/**
* Class MountPublicLinkController
@@ -107,6 +113,7 @@ class MountPublicLinkController extends Controller {
*
* @NoCSRFRequired
* @PublicPage
+ * @BruteForceProtection publicLink2FederatedShare
*
* @param string $shareWith
* @param string $token
@@ -226,22 +233,22 @@ class MountPublicLinkController extends Controller {
private function legacyMountPublicLink($token, $remote, $password, $name, $owner, $ownerDisplayName) {
// Check for invalid name
- if (!\OCP\Util::isValidFileName($name)) {
+ if (!Util::isValidFileName($name)) {
return new JSONResponse(['message' => $this->l->t('The mountpoint name contains invalid characters.')], Http::STATUS_BAD_REQUEST);
}
$currentUser = $this->userSession->getUser()->getUID();
$currentServer = $this->addressHandler->generateRemoteURL();
- if (\OC\Share\Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer)) {
+ if (Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer)) {
return new JSONResponse(['message' => $this->l->t('Not allowed to create a federated share with the owner.')], Http::STATUS_BAD_REQUEST);
}
- $discoveryManager = new \OCA\FederatedFileSharing\DiscoveryManager(
+ $discoveryManager = new DiscoveryManager(
\OC::$server->getMemCacheFactory(),
\OC::$server->getHTTPClientService()
);
- $externalManager = new \OCA\Files_Sharing\External\Manager(
+ $externalManager = new Manager(
\OC::$server->getDatabaseConnection(),
- \OC\Files\Filesystem::getMountManager(),
- \OC\Files\Filesystem::getLoader(),
+ Filesystem::getMountManager(),
+ Filesystem::getLoader(),
\OC::$server->getHTTPClientService(),
\OC::$server->getNotificationManager(),
$discoveryManager,
@@ -249,7 +256,8 @@ class MountPublicLinkController extends Controller {
);
// check for ssl cert
- if (substr($remote, 0, 5) === 'https') {
+
+ if (strpos($remote, 'https') === 0) {
try {
$client = $this->clientService->newClient();
$client->get($remote, [
@@ -268,19 +276,19 @@ class MountPublicLinkController extends Controller {
try {
// check if storage exists
$storage->checkStorageAvailability();
- } catch (\OCP\Files\StorageInvalidException $e) {
+ } catch (StorageInvalidException $e) {
// note: checkStorageAvailability will already remove the invalid share
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Could not authenticate to remote share, password might be wrong')], Http::STATUS_BAD_REQUEST);
} catch (\Exception $e) {
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
$externalManager->removeShare($mount->getMountPoint());
return new JSONResponse(['message' => $this->l->t('Storage not valid')], Http::STATUS_BAD_REQUEST);
@@ -295,27 +303,27 @@ class MountPublicLinkController extends Controller {
'legacyMount' => '1'
]
);
- } catch (\OCP\Files\StorageInvalidException $e) {
- \OCP\Util::writeLog(
+ } catch (StorageInvalidException $e) {
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Storage not valid')], Http::STATUS_BAD_REQUEST);
} catch (\Exception $e) {
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Couldn\'t add remote share')], Http::STATUS_BAD_REQUEST);
}
} else {
$externalManager->removeShare($mount->getMountPoint());
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Couldn\'t add remote share',
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Couldn\'t add remote share')], Http::STATUS_BAD_REQUEST);
}
diff --git a/apps/federatedfilesharing/templates/settings-admin.php b/apps/federatedfilesharing/templates/settings-admin.php
index 0670553e061..d71ce20d13c 100644
--- a/apps/federatedfilesharing/templates/settings-admin.php
+++ b/apps/federatedfilesharing/templates/settings-admin.php
@@ -29,7 +29,7 @@ script('federatedfilesharing', 'settings-admin');
<input type="checkbox" name="lookupServerEnabled" id="lookupServerEnabled" class="checkbox"
value="1" <?php if ($_['lookupServerEnabled']) print_unescaped('checked="checked"'); ?> />
<label for="lookupServerEnabled">
- <?php p($l->t('Enable lookups on lookup server'));?>
+ <?php p($l->t('Search global and public address book for users'));?>
</label><br/>
</p>
</div>
diff --git a/apps/federation/appinfo/info.xml b/apps/federation/appinfo/info.xml
index a5eeb133d9e..2d15f20485a 100644
--- a/apps/federation/appinfo/info.xml
+++ b/apps/federation/appinfo/info.xml
@@ -5,11 +5,11 @@
<description>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.</description>
<licence>AGPL</licence>
<author>Bjoern Schiessle</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>Federation</namespace>
<category>other</category>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<default_enable/>
<types>
diff --git a/apps/federation/l10n/ca.js b/apps/federation/l10n/ca.js
index 1d21cd14db2..81b16deb360 100644
--- a/apps/federation/l10n/ca.js
+++ b/apps/federation/l10n/ca.js
@@ -1,15 +1,19 @@
OC.L10N.register(
"federation",
{
- "Server added to the list of trusted ownClouds" : "Servidor afegit a la llista de confiança ownCloud",
+ "Added to the list of trusted servers" : "Afegeix a la llista de servidors de confiança",
"Server is already in the list of trusted servers." : "El servidor ja està a la llista de servidors de confiança",
- "No ownCloud server found" : "No s'ha trobat cap servidor ownCloud",
+ "No server to federate with found" : "No s\\'ha trobar cap servidor federat",
"Could not add server" : "No s'ha pogut afegir el servidor",
"Federation" : "Federació",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federació ownCloud et permet connectar amb altes servidors ownCloud de confiança per a intercanviar el directori d'usuari. Per exemple, això serà utilitzat per auto-completar usuaris externs de la compartició federada",
+ "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." : "La federació li permet connectar amb altres servidors de confiança per a intercanviar directoris d\\'usuari. Per exemple, això s\\'utilitzarà per als usuaris externs d'auto-completat per a l\\'ús compartit federat.",
"Add server automatically once a federated share was created successfully" : "Afegir servidor automàticament quan s'hagi creat una federació correctament",
- "Trusted ownCloud Servers" : "Servidors ownCloud de confiança",
- "+ Add ownCloud server" : "+ Afegir servidor ownCloud",
- "ownCloud Server" : "Servidor ownCloud"
+ "Trusted servers" : "Servidor de confiança",
+ "+ Add trusted server" : "+Afegir servidor de confiança",
+ "Trusted server" : "Servidor de confiança",
+ "Add" : "Afegir",
+ "Trusted Servers" : "Servidors de confiança",
+ "+ Add Nextcloud server" : "+ Afegir servidor Nextcloud",
+ "Nextcloud Server" : "Servidor Nextcloud"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/ca.json b/apps/federation/l10n/ca.json
index 3d5dc995c04..a3d13ce4f4d 100644
--- a/apps/federation/l10n/ca.json
+++ b/apps/federation/l10n/ca.json
@@ -1,13 +1,17 @@
{ "translations": {
- "Server added to the list of trusted ownClouds" : "Servidor afegit a la llista de confiança ownCloud",
+ "Added to the list of trusted servers" : "Afegeix a la llista de servidors de confiança",
"Server is already in the list of trusted servers." : "El servidor ja està a la llista de servidors de confiança",
- "No ownCloud server found" : "No s'ha trobat cap servidor ownCloud",
+ "No server to federate with found" : "No s\\'ha trobar cap servidor federat",
"Could not add server" : "No s'ha pogut afegir el servidor",
"Federation" : "Federació",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federació ownCloud et permet connectar amb altes servidors ownCloud de confiança per a intercanviar el directori d'usuari. Per exemple, això serà utilitzat per auto-completar usuaris externs de la compartició federada",
+ "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." : "La federació li permet connectar amb altres servidors de confiança per a intercanviar directoris d\\'usuari. Per exemple, això s\\'utilitzarà per als usuaris externs d'auto-completat per a l\\'ús compartit federat.",
"Add server automatically once a federated share was created successfully" : "Afegir servidor automàticament quan s'hagi creat una federació correctament",
- "Trusted ownCloud Servers" : "Servidors ownCloud de confiança",
- "+ Add ownCloud server" : "+ Afegir servidor ownCloud",
- "ownCloud Server" : "Servidor ownCloud"
+ "Trusted servers" : "Servidor de confiança",
+ "+ Add trusted server" : "+Afegir servidor de confiança",
+ "Trusted server" : "Servidor de confiança",
+ "Add" : "Afegir",
+ "Trusted Servers" : "Servidors de confiança",
+ "+ Add Nextcloud server" : "+ Afegir servidor Nextcloud",
+ "Nextcloud Server" : "Servidor Nextcloud"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/cs_CZ.js b/apps/federation/l10n/cs_CZ.js
index 915cd646d53..df0f9bbfb41 100644
--- a/apps/federation/l10n/cs_CZ.js
+++ b/apps/federation/l10n/cs_CZ.js
@@ -8,13 +8,12 @@ OC.L10N.register(
"Federation" : "Sdružování",
"Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.",
"Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení",
+ "Trusted servers" : "Důvěryhodné servery",
+ "+ Add trusted server" : "+ Přidat důvěryhodný server",
+ "Trusted server" : "Důvěryhodný server",
"Add" : "Přidat",
"Trusted Servers" : "Důvěryhodné servery",
"+ Add Nextcloud server" : "+ Přidat Nextcloud server",
- "Nextcloud Server" : "Server Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Server přidán do seznamu důvěryhodných serverů Nextcloud",
- "No Nextcloud server found" : "Nextcloud server nenalezen",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům Nextcloud za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.",
- "Trusted Nextcloud Servers" : "Důvěryhodné Nextcloud servery"
+ "Nextcloud Server" : "Server Nextcloud"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/federation/l10n/cs_CZ.json b/apps/federation/l10n/cs_CZ.json
index cf4b93be3f4..f28d002dc44 100644
--- a/apps/federation/l10n/cs_CZ.json
+++ b/apps/federation/l10n/cs_CZ.json
@@ -6,13 +6,12 @@
"Federation" : "Sdružování",
"Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.",
"Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení",
+ "Trusted servers" : "Důvěryhodné servery",
+ "+ Add trusted server" : "+ Přidat důvěryhodný server",
+ "Trusted server" : "Důvěryhodný server",
"Add" : "Přidat",
"Trusted Servers" : "Důvěryhodné servery",
"+ Add Nextcloud server" : "+ Přidat Nextcloud server",
- "Nextcloud Server" : "Server Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Server přidán do seznamu důvěryhodných serverů Nextcloud",
- "No Nextcloud server found" : "Nextcloud server nenalezen",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům Nextcloud za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.",
- "Trusted Nextcloud Servers" : "Důvěryhodné Nextcloud servery"
+ "Nextcloud Server" : "Server Nextcloud"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/federation/l10n/de.js b/apps/federation/l10n/de.js
index 6a008c33997..d9c6a3309b0 100644
--- a/apps/federation/l10n/de.js
+++ b/apps/federation/l10n/de.js
@@ -2,22 +2,18 @@ OC.L10N.register(
"federation",
{
"Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt",
- "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.",
- "No server to federate with found" : "Kein Server zum Verbinden gefunden",
+ "Server is already in the list of trusted servers." : "Der Server ist bereits in der Liste der vertrauenswürdigen Server.",
+ "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden",
"Could not add server" : "Konnte Server nicht hinzufügen",
"Federation" : "Federation",
- "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." : "Federation erlaubt es Dir, dich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").",
+ "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." : "Federation erlaubt es Dir, Dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.",
"Add server automatically once a federated share was created successfully" : "Einen mit ownCloud Federation verbundenen Server automatisch hinzufügen, sobald die Verbindung einmal erfolgreich erstellt wurde",
"Trusted servers" : "Vertrauenswürdige Server",
"+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen",
- "Trusted server" : "Vertauenswürdiger Server",
+ "Trusted server" : "Vertrauenswürdiger Server",
"Add" : "Hinzufügen",
"Trusted Servers" : "Vertrauenswürdige Server",
"+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen",
- "Nextcloud Server" : "Nextcloud Server",
- "Server added to the list of trusted Nextclouds" : "Server zur Liste der vertrauenswürdigen Nextclouds hinzugefügt",
- "No Nextcloud server found" : "Kein Nextcloud Server gefunden",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Federation erlaubt es Dir, mit anderem vertrautem Nextcloud Server in Verbindung zu stehen, um Benutzerverzeichnise auszutauschen. Zum Beispiel wird das verwendet, um eine automatische Vervollständigung der externen Benutzer zu ermöglichen.",
- "Trusted Nextcloud Servers" : "Vertrauenswürdige Nextcloud Server"
+ "Nextcloud Server" : "Nextcloud Server"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/de.json b/apps/federation/l10n/de.json
index 084b05c2c54..f037f51ce0a 100644
--- a/apps/federation/l10n/de.json
+++ b/apps/federation/l10n/de.json
@@ -1,21 +1,17 @@
{ "translations": {
"Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt",
- "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.",
- "No server to federate with found" : "Kein Server zum Verbinden gefunden",
+ "Server is already in the list of trusted servers." : "Der Server ist bereits in der Liste der vertrauenswürdigen Server.",
+ "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden",
"Could not add server" : "Konnte Server nicht hinzufügen",
"Federation" : "Federation",
- "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." : "Federation erlaubt es Dir, dich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").",
+ "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." : "Federation erlaubt es Dir, Dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.",
"Add server automatically once a federated share was created successfully" : "Einen mit ownCloud Federation verbundenen Server automatisch hinzufügen, sobald die Verbindung einmal erfolgreich erstellt wurde",
"Trusted servers" : "Vertrauenswürdige Server",
"+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen",
- "Trusted server" : "Vertauenswürdiger Server",
+ "Trusted server" : "Vertrauenswürdiger Server",
"Add" : "Hinzufügen",
"Trusted Servers" : "Vertrauenswürdige Server",
"+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen",
- "Nextcloud Server" : "Nextcloud Server",
- "Server added to the list of trusted Nextclouds" : "Server zur Liste der vertrauenswürdigen Nextclouds hinzugefügt",
- "No Nextcloud server found" : "Kein Nextcloud Server gefunden",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Federation erlaubt es Dir, mit anderem vertrautem Nextcloud Server in Verbindung zu stehen, um Benutzerverzeichnise auszutauschen. Zum Beispiel wird das verwendet, um eine automatische Vervollständigung der externen Benutzer zu ermöglichen.",
- "Trusted Nextcloud Servers" : "Vertrauenswürdige Nextcloud Server"
+ "Nextcloud Server" : "Nextcloud Server"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/de_DE.js b/apps/federation/l10n/de_DE.js
index d97e7847e9b..852971d7b9c 100644
--- a/apps/federation/l10n/de_DE.js
+++ b/apps/federation/l10n/de_DE.js
@@ -3,21 +3,17 @@ OC.L10N.register(
{
"Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt",
"Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.",
- "No server to federate with found" : "Kein Server gefunden, der sich verbinden ließe",
+ "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden",
"Could not add server" : "Konnte Server nicht hinzufügen",
"Federation" : "Federation",
- "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." : "Federation erlaubt es Ihnen sich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit Ihnen (\"federated sharing\").",
+ "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." : "Federation erlaubt es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.",
"Add server automatically once a federated share was created successfully" : "Server automatisch hinzufügen sobald eine federated Freigabe erstellt wurde",
"Trusted servers" : "Vertrauenswürdige Server",
"+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen",
- "Trusted server" : "Vertauenswürdiger Server",
+ "Trusted server" : "Vertrauenswürdiger Server",
"Add" : "Hinzufügen",
"Trusted Servers" : "Vertrauenswürdige Server",
"+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen",
- "Nextcloud Server" : "Nextcloud Server",
- "Server added to the list of trusted Nextclouds" : "Server zur Liste der vertrauenswürdigen Nextclouds hinzugefügt",
- "No Nextcloud server found" : "Kein Nextcloud Server gefunden",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Federation erlaubt es Dir, mit anderem vertrautem Nextcloud Server in Verbindung zu stehen, um Benutzerverzeichnise auszutauschen. Zum Beispiel wird das verwendet, um eine automatische Vervollständigung der externen Benutzer zu ermöglichen.",
- "Trusted Nextcloud Servers" : "Vertrauenswürdige Nextcloud Server"
+ "Nextcloud Server" : "Nextcloud Server"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/de_DE.json b/apps/federation/l10n/de_DE.json
index 6a838a26131..83c1066a950 100644
--- a/apps/federation/l10n/de_DE.json
+++ b/apps/federation/l10n/de_DE.json
@@ -1,21 +1,17 @@
{ "translations": {
"Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt",
"Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.",
- "No server to federate with found" : "Kein Server gefunden, der sich verbinden ließe",
+ "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden",
"Could not add server" : "Konnte Server nicht hinzufügen",
"Federation" : "Federation",
- "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." : "Federation erlaubt es Ihnen sich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit Ihnen (\"federated sharing\").",
+ "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." : "Federation erlaubt es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.",
"Add server automatically once a federated share was created successfully" : "Server automatisch hinzufügen sobald eine federated Freigabe erstellt wurde",
"Trusted servers" : "Vertrauenswürdige Server",
"+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen",
- "Trusted server" : "Vertauenswürdiger Server",
+ "Trusted server" : "Vertrauenswürdiger Server",
"Add" : "Hinzufügen",
"Trusted Servers" : "Vertrauenswürdige Server",
"+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen",
- "Nextcloud Server" : "Nextcloud Server",
- "Server added to the list of trusted Nextclouds" : "Server zur Liste der vertrauenswürdigen Nextclouds hinzugefügt",
- "No Nextcloud server found" : "Kein Nextcloud Server gefunden",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Federation erlaubt es Dir, mit anderem vertrautem Nextcloud Server in Verbindung zu stehen, um Benutzerverzeichnise auszutauschen. Zum Beispiel wird das verwendet, um eine automatische Vervollständigung der externen Benutzer zu ermöglichen.",
- "Trusted Nextcloud Servers" : "Vertrauenswürdige Nextcloud Server"
+ "Nextcloud Server" : "Nextcloud Server"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/el.js b/apps/federation/l10n/el.js
index b4404d94043..aa39c92851b 100644
--- a/apps/federation/l10n/el.js
+++ b/apps/federation/l10n/el.js
@@ -1,10 +1,16 @@
OC.L10N.register(
"federation",
{
- "Server added to the list of trusted ownClouds" : "Ο διακομιστής προστέθηκε στην λίστα των έμπιστων ownCloud",
+ "Added to the list of trusted servers" : "Προσθήκη στην λίστα των έμπιστων διακομιστών",
"Server is already in the list of trusted servers." : "Ο διακομιστής περιλαμβάνεται ήδη στην λίστα των έμπιστων ownCloud",
- "No ownCloud server found" : "Δεν βρέθηκε διακομιστής ownCloud",
"Could not add server" : "Αδυναμία προσθήκης διακομιστή",
- "ownCloud Server" : "Διακομιστής ownCloud"
+ "Federation" : "Federation",
+ "Trusted servers" : "Έμπιστοι διακομιστές",
+ "+ Add trusted server" : "+Προσθήκη έμπιστων διακομιστών",
+ "Trusted server" : "Έμπιστοι διακομιστές",
+ "Add" : "Προσθήκη",
+ "Trusted Servers" : "Έμπιστοι διακομιστές",
+ "+ Add Nextcloud server" : "+ Προσθήκη διακομιστή Nextcloud",
+ "Nextcloud Server" : "Διακομιστής Nextcloud"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/el.json b/apps/federation/l10n/el.json
index 887b731cad0..6ddb3346e4e 100644
--- a/apps/federation/l10n/el.json
+++ b/apps/federation/l10n/el.json
@@ -1,8 +1,14 @@
{ "translations": {
- "Server added to the list of trusted ownClouds" : "Ο διακομιστής προστέθηκε στην λίστα των έμπιστων ownCloud",
+ "Added to the list of trusted servers" : "Προσθήκη στην λίστα των έμπιστων διακομιστών",
"Server is already in the list of trusted servers." : "Ο διακομιστής περιλαμβάνεται ήδη στην λίστα των έμπιστων ownCloud",
- "No ownCloud server found" : "Δεν βρέθηκε διακομιστής ownCloud",
"Could not add server" : "Αδυναμία προσθήκης διακομιστή",
- "ownCloud Server" : "Διακομιστής ownCloud"
+ "Federation" : "Federation",
+ "Trusted servers" : "Έμπιστοι διακομιστές",
+ "+ Add trusted server" : "+Προσθήκη έμπιστων διακομιστών",
+ "Trusted server" : "Έμπιστοι διακομιστές",
+ "Add" : "Προσθήκη",
+ "Trusted Servers" : "Έμπιστοι διακομιστές",
+ "+ Add Nextcloud server" : "+ Προσθήκη διακομιστή Nextcloud",
+ "Nextcloud Server" : "Διακομιστής Nextcloud"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/es.js b/apps/federation/l10n/es.js
index 264e112c96d..a96acee49d1 100644
--- a/apps/federation/l10n/es.js
+++ b/apps/federation/l10n/es.js
@@ -14,10 +14,6 @@ OC.L10N.register(
"Add" : "Añadir",
"Trusted Servers" : "Servidores de confianza",
"+ Add Nextcloud server" : "+ Añadir servidor Nextcloud",
- "Nextcloud Server" : "Servidor Nexcloud",
- "Server added to the list of trusted Nextclouds" : "Servidor Nextcloud añadido a la lista de servidores de confianza",
- "No Nextcloud server found" : "No se ha encontrado ningún servidor Nextcloud",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación de Nextcloud te permite conectarte con otros servidores de confianza para intercambiar directorios. Por ejemplo, ésto se usará para autocompletar la selección de usuarios externos al compartir en federación. ",
- "Trusted Nextcloud Servers" : "Servidores Nextcloud de confianza"
+ "Nextcloud Server" : "Servidor Nexcloud"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/es.json b/apps/federation/l10n/es.json
index d4563db7657..146e3ca3ce7 100644
--- a/apps/federation/l10n/es.json
+++ b/apps/federation/l10n/es.json
@@ -12,10 +12,6 @@
"Add" : "Añadir",
"Trusted Servers" : "Servidores de confianza",
"+ Add Nextcloud server" : "+ Añadir servidor Nextcloud",
- "Nextcloud Server" : "Servidor Nexcloud",
- "Server added to the list of trusted Nextclouds" : "Servidor Nextcloud añadido a la lista de servidores de confianza",
- "No Nextcloud server found" : "No se ha encontrado ningún servidor Nextcloud",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación de Nextcloud te permite conectarte con otros servidores de confianza para intercambiar directorios. Por ejemplo, ésto se usará para autocompletar la selección de usuarios externos al compartir en federación. ",
- "Trusted Nextcloud Servers" : "Servidores Nextcloud de confianza"
+ "Nextcloud Server" : "Servidor Nexcloud"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/fr.js b/apps/federation/l10n/fr.js
index 87b95f7ed96..3a5e81c3bc7 100644
--- a/apps/federation/l10n/fr.js
+++ b/apps/federation/l10n/fr.js
@@ -14,10 +14,6 @@ OC.L10N.register(
"Add" : "Ajouter",
"Trusted Servers" : "Serveurs de confiance",
"+ Add Nextcloud server" : "+ Ajouter un serveur Nextcloud",
- "Nextcloud Server" : "Serveur Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Serveur ajouté à la liste des Nextclouds de confiance",
- "No Nextcloud server found" : "Aucun serveur Nextcloud trouvé",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération Nextcloud » vous permet de vous connecter avec d'autres serveurs Nextcloud pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.",
- "Trusted Nextcloud Servers" : "Serveurs Nextcloud de confiance"
+ "Nextcloud Server" : "Serveur Nextcloud"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/federation/l10n/fr.json b/apps/federation/l10n/fr.json
index a0801944759..33e60f2c2f9 100644
--- a/apps/federation/l10n/fr.json
+++ b/apps/federation/l10n/fr.json
@@ -12,10 +12,6 @@
"Add" : "Ajouter",
"Trusted Servers" : "Serveurs de confiance",
"+ Add Nextcloud server" : "+ Ajouter un serveur Nextcloud",
- "Nextcloud Server" : "Serveur Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Serveur ajouté à la liste des Nextclouds de confiance",
- "No Nextcloud server found" : "Aucun serveur Nextcloud trouvé",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération Nextcloud » vous permet de vous connecter avec d'autres serveurs Nextcloud pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.",
- "Trusted Nextcloud Servers" : "Serveurs Nextcloud de confiance"
+ "Nextcloud Server" : "Serveur Nextcloud"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/hu_HU.js b/apps/federation/l10n/hu_HU.js
index a0b0f8ed444..34d3ddfac32 100644
--- a/apps/federation/l10n/hu_HU.js
+++ b/apps/federation/l10n/hu_HU.js
@@ -14,10 +14,6 @@ OC.L10N.register(
"Add" : "Hozzáadás",
"Trusted Servers" : "Megbízható szerverek",
"+ Add Nextcloud server" : "+ Nextcloud szerver hozzáadása",
- "Nextcloud Server" : "Nextcloud szerver",
- "Server added to the list of trusted Nextclouds" : "A szerver hozzáadva a megbízható Nextcloud szerverek listájához",
- "No Nextcloud server found" : "Nem található Nextloud szerver",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A Nextcloud Egyesítés lehetővé teszi a kapcsolódást más megbízható szerverekhez a felhasználói könyvtárak kicseréléséhez. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók az egyesített megosztáshoz.",
- "Trusted Nextcloud Servers" : "Megbízható Nextcloud szerverek"
+ "Nextcloud Server" : "Nextcloud szerver"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/hu_HU.json b/apps/federation/l10n/hu_HU.json
index 1e38c2f4426..6659f303554 100644
--- a/apps/federation/l10n/hu_HU.json
+++ b/apps/federation/l10n/hu_HU.json
@@ -12,10 +12,6 @@
"Add" : "Hozzáadás",
"Trusted Servers" : "Megbízható szerverek",
"+ Add Nextcloud server" : "+ Nextcloud szerver hozzáadása",
- "Nextcloud Server" : "Nextcloud szerver",
- "Server added to the list of trusted Nextclouds" : "A szerver hozzáadva a megbízható Nextcloud szerverek listájához",
- "No Nextcloud server found" : "Nem található Nextloud szerver",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A Nextcloud Egyesítés lehetővé teszi a kapcsolódást más megbízható szerverekhez a felhasználói könyvtárak kicseréléséhez. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók az egyesített megosztáshoz.",
- "Trusted Nextcloud Servers" : "Megbízható Nextcloud szerverek"
+ "Nextcloud Server" : "Nextcloud szerver"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/id.js b/apps/federation/l10n/id.js
index 801cd52ae12..6184b789aaf 100644
--- a/apps/federation/l10n/id.js
+++ b/apps/federation/l10n/id.js
@@ -8,12 +8,12 @@ OC.L10N.register(
"Federation" : "Federasi",
"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." : "Federasi memungkinkan Anda untuk terhubung dengan server lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.",
"Add server automatically once a federated share was created successfully" : "Tambah server secara otomatis saat pembagian terfederasi dibuat",
+ "Trusted servers" : "Server terpercaya",
+ "+ Add trusted server" : "+ Tambah server terpercaya",
+ "Trusted server" : "Server terpercaya",
+ "Add" : "Tambah",
"Trusted Servers" : "Server Terpercaya",
"+ Add Nextcloud server" : "+ Tambahkan server Nextcloud",
- "Nextcloud Server" : "Server Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Server telah ditambahkan pada daftar server Nextcloud terpercaya",
- "No Nextcloud server found" : "Tidak ada server Nextcloud ditemukan",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi Nextcloud memungkinkan Anda untuk terhubung dengan server Nextcloud lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.",
- "Trusted Nextcloud Servers" : "Server Nextcloud Terpercaya"
+ "Nextcloud Server" : "Server Nextcloud"
},
"nplurals=1; plural=0;");
diff --git a/apps/federation/l10n/id.json b/apps/federation/l10n/id.json
index 2ca5efeaf2a..1ca80846c85 100644
--- a/apps/federation/l10n/id.json
+++ b/apps/federation/l10n/id.json
@@ -6,12 +6,12 @@
"Federation" : "Federasi",
"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." : "Federasi memungkinkan Anda untuk terhubung dengan server lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.",
"Add server automatically once a federated share was created successfully" : "Tambah server secara otomatis saat pembagian terfederasi dibuat",
+ "Trusted servers" : "Server terpercaya",
+ "+ Add trusted server" : "+ Tambah server terpercaya",
+ "Trusted server" : "Server terpercaya",
+ "Add" : "Tambah",
"Trusted Servers" : "Server Terpercaya",
"+ Add Nextcloud server" : "+ Tambahkan server Nextcloud",
- "Nextcloud Server" : "Server Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Server telah ditambahkan pada daftar server Nextcloud terpercaya",
- "No Nextcloud server found" : "Tidak ada server Nextcloud ditemukan",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi Nextcloud memungkinkan Anda untuk terhubung dengan server Nextcloud lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.",
- "Trusted Nextcloud Servers" : "Server Nextcloud Terpercaya"
+ "Nextcloud Server" : "Server Nextcloud"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/federation/l10n/it.js b/apps/federation/l10n/it.js
index 2f585131e8a..dd996beeffd 100644
--- a/apps/federation/l10n/it.js
+++ b/apps/federation/l10n/it.js
@@ -14,10 +14,6 @@ OC.L10N.register(
"Add" : "Aggiungi",
"Trusted Servers" : "Server affidabili",
"+ Add Nextcloud server" : "+ Aggiungi server Nextcloud",
- "Nextcloud Server" : "Server Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Server aggiunto all'elenco dei Nextcloud affidabili",
- "No Nextcloud server found" : "Nessun server Nextcloud trovato",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federazione di Nextcloud consente di connettersi ad altri server affidabili per accedere alla cartella utente. Ad esempio, ciò sarà utilizzato per il completamento automatico di utenti esterni per la condivisione federata.",
- "Trusted Nextcloud Servers" : "Server Nextcloud affidabili"
+ "Nextcloud Server" : "Server Nextcloud"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/it.json b/apps/federation/l10n/it.json
index 9babef7d8be..1d77ade2cd4 100644
--- a/apps/federation/l10n/it.json
+++ b/apps/federation/l10n/it.json
@@ -12,10 +12,6 @@
"Add" : "Aggiungi",
"Trusted Servers" : "Server affidabili",
"+ Add Nextcloud server" : "+ Aggiungi server Nextcloud",
- "Nextcloud Server" : "Server Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Server aggiunto all'elenco dei Nextcloud affidabili",
- "No Nextcloud server found" : "Nessun server Nextcloud trovato",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federazione di Nextcloud consente di connettersi ad altri server affidabili per accedere alla cartella utente. Ad esempio, ciò sarà utilizzato per il completamento automatico di utenti esterni per la condivisione federata.",
- "Trusted Nextcloud Servers" : "Server Nextcloud affidabili"
+ "Nextcloud Server" : "Server Nextcloud"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/ja.js b/apps/federation/l10n/ja.js
index e94ce278fe6..88b82a32c43 100644
--- a/apps/federation/l10n/ja.js
+++ b/apps/federation/l10n/ja.js
@@ -14,10 +14,6 @@ OC.L10N.register(
"Add" : "追加",
"Trusted Servers" : "信頼済サーバー",
"+ Add Nextcloud server" : "Nextcloudサーバーを追加",
- "Nextcloud Server" : "Nextcloud サーバー",
- "Server added to the list of trusted Nextclouds" : "信頼済Nextcloudサーバーとして登録済",
- "No Nextcloud server found" : "Nextcloud サーバーがありません。",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloudサーバー連携では、他の信頼できるNextcloudサーバーと接続して、ユーザーリストを交換することができます。これを使えば、サーバー連携共有時に他のサーバーのユーザーのIDを自動補完します。",
- "Trusted Nextcloud Servers" : "信頼済のNextcloudサーバー"
+ "Nextcloud Server" : "Nextcloud サーバー"
},
"nplurals=1; plural=0;");
diff --git a/apps/federation/l10n/ja.json b/apps/federation/l10n/ja.json
index c9b527c66dd..ff7b0faedd3 100644
--- a/apps/federation/l10n/ja.json
+++ b/apps/federation/l10n/ja.json
@@ -12,10 +12,6 @@
"Add" : "追加",
"Trusted Servers" : "信頼済サーバー",
"+ Add Nextcloud server" : "Nextcloudサーバーを追加",
- "Nextcloud Server" : "Nextcloud サーバー",
- "Server added to the list of trusted Nextclouds" : "信頼済Nextcloudサーバーとして登録済",
- "No Nextcloud server found" : "Nextcloud サーバーがありません。",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloudサーバー連携では、他の信頼できるNextcloudサーバーと接続して、ユーザーリストを交換することができます。これを使えば、サーバー連携共有時に他のサーバーのユーザーのIDを自動補完します。",
- "Trusted Nextcloud Servers" : "信頼済のNextcloudサーバー"
+ "Nextcloud Server" : "Nextcloud サーバー"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/federation/l10n/lv.js b/apps/federation/l10n/lv.js
new file mode 100644
index 00000000000..568ba8629d5
--- /dev/null
+++ b/apps/federation/l10n/lv.js
@@ -0,0 +1,19 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Sarakstam pievieno uzticamo serveri",
+ "Server is already in the list of trusted servers." : "Serveris jau ir uzticamo serveru sarakstā .",
+ "No server to federate with found" : "Nav atrasts neviens serveris",
+ "Could not add server" : "Nevarēja pievienot serveri",
+ "Federation" : "Federācija",
+ "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." : "Federācija ļauj savienot ar citiem uzticamiem serveriem ar Exchange lietotāja direktoriju. Piemēram, tas tiks izmantots, lai automātiski pieslēgtu ārējiem lietotājiem integrēto koplietošanu.",
+ "Add server automatically once a federated share was created successfully" : "Automātiski pievienots serveris federācijas koplietojumam, veiksmīgi",
+ "Trusted servers" : "Uzticami serveri",
+ "+ Add trusted server" : "+ pievietot uzticamiem serveriem",
+ "Trusted server" : "Uzticams serveris",
+ "Add" : "Pievienot",
+ "Trusted Servers" : "Uzticami serveri",
+ "+ Add Nextcloud server" : "+ pievienot Nextcloud serveri",
+ "Nextcloud Server" : "Nextcloud Serveris"
+},
+"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/federation/l10n/lv.json b/apps/federation/l10n/lv.json
new file mode 100644
index 00000000000..6fd59a3c09f
--- /dev/null
+++ b/apps/federation/l10n/lv.json
@@ -0,0 +1,17 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Sarakstam pievieno uzticamo serveri",
+ "Server is already in the list of trusted servers." : "Serveris jau ir uzticamo serveru sarakstā .",
+ "No server to federate with found" : "Nav atrasts neviens serveris",
+ "Could not add server" : "Nevarēja pievienot serveri",
+ "Federation" : "Federācija",
+ "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." : "Federācija ļauj savienot ar citiem uzticamiem serveriem ar Exchange lietotāja direktoriju. Piemēram, tas tiks izmantots, lai automātiski pieslēgtu ārējiem lietotājiem integrēto koplietošanu.",
+ "Add server automatically once a federated share was created successfully" : "Automātiski pievienots serveris federācijas koplietojumam, veiksmīgi",
+ "Trusted servers" : "Uzticami serveri",
+ "+ Add trusted server" : "+ pievietot uzticamiem serveriem",
+ "Trusted server" : "Uzticams serveris",
+ "Add" : "Pievienot",
+ "Trusted Servers" : "Uzticami serveri",
+ "+ Add Nextcloud server" : "+ pievienot Nextcloud serveri",
+ "Nextcloud Server" : "Nextcloud Serveris"
+},"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/federation/l10n/nl.js b/apps/federation/l10n/nl.js
index 49d21785930..8d571f28ba5 100644
--- a/apps/federation/l10n/nl.js
+++ b/apps/federation/l10n/nl.js
@@ -14,10 +14,6 @@ OC.L10N.register(
"Add" : "Toevoegen",
"Trusted Servers" : "Vertrouwde servers",
"+ Add Nextcloud server" : "+ Toevoegen Nextcloud server",
- "Nextcloud Server" : "Nextcloud Server",
- "Server added to the list of trusted Nextclouds" : "Server toegevoegd aan de lijst met vertrouwde Nextclouds",
- "No Nextcloud server found" : "Geen Nextcloud server gevonden",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud federatie maakt het mogelijk om te verbinden met andere vertrouwde Nextclouds om de gebuikersadministratie te delen. Zo kun je automatisch externe gebruikers toevoegen voor federatief delen.",
- "Trusted Nextcloud Servers" : "Vertrouwde Nextcloud Servers"
+ "Nextcloud Server" : "Nextcloud Server"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/nl.json b/apps/federation/l10n/nl.json
index 49ec6c58ba9..e29994fb4ea 100644
--- a/apps/federation/l10n/nl.json
+++ b/apps/federation/l10n/nl.json
@@ -12,10 +12,6 @@
"Add" : "Toevoegen",
"Trusted Servers" : "Vertrouwde servers",
"+ Add Nextcloud server" : "+ Toevoegen Nextcloud server",
- "Nextcloud Server" : "Nextcloud Server",
- "Server added to the list of trusted Nextclouds" : "Server toegevoegd aan de lijst met vertrouwde Nextclouds",
- "No Nextcloud server found" : "Geen Nextcloud server gevonden",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud federatie maakt het mogelijk om te verbinden met andere vertrouwde Nextclouds om de gebuikersadministratie te delen. Zo kun je automatisch externe gebruikers toevoegen voor federatief delen.",
- "Trusted Nextcloud Servers" : "Vertrouwde Nextcloud Servers"
+ "Nextcloud Server" : "Nextcloud Server"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/pl.js b/apps/federation/l10n/pl.js
index 6e14a2d9848..a370d2cce5c 100644
--- a/apps/federation/l10n/pl.js
+++ b/apps/federation/l10n/pl.js
@@ -14,10 +14,6 @@ OC.L10N.register(
"Add" : "Dodaj",
"Trusted Servers" : "Zaufane serwery",
"+ Add Nextcloud server" : "Dodaj serwer Nextcloud",
- "Nextcloud Server" : "Serwer Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Serwer dodany do listy zaufanych Nextclouds",
- "No Nextcloud server found" : "Nie znaleziono serwera Nextcloud",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Stowarzyszenie Nextcloud pozwala łączyć się z innymi zaufanymi użytkownikami Nextclouds i wymieniać się z nimi katalogami. Na przykład, może to być wykorzystane do autouzupełniania w dzieleniu się ze stowarzyszonym użytkownikiem.",
- "Trusted Nextcloud Servers" : "Zaufane serwery Nextcloud"
+ "Nextcloud Server" : "Serwer Nextcloud"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/federation/l10n/pl.json b/apps/federation/l10n/pl.json
index 2d4c71d3ee2..ba18394b239 100644
--- a/apps/federation/l10n/pl.json
+++ b/apps/federation/l10n/pl.json
@@ -12,10 +12,6 @@
"Add" : "Dodaj",
"Trusted Servers" : "Zaufane serwery",
"+ Add Nextcloud server" : "Dodaj serwer Nextcloud",
- "Nextcloud Server" : "Serwer Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Serwer dodany do listy zaufanych Nextclouds",
- "No Nextcloud server found" : "Nie znaleziono serwera Nextcloud",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Stowarzyszenie Nextcloud pozwala łączyć się z innymi zaufanymi użytkownikami Nextclouds i wymieniać się z nimi katalogami. Na przykład, może to być wykorzystane do autouzupełniania w dzieleniu się ze stowarzyszonym użytkownikiem.",
- "Trusted Nextcloud Servers" : "Zaufane serwery Nextcloud"
+ "Nextcloud Server" : "Serwer Nextcloud"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/pt_BR.js b/apps/federation/l10n/pt_BR.js
index 66cddf65879..8c6104917b7 100644
--- a/apps/federation/l10n/pt_BR.js
+++ b/apps/federation/l10n/pt_BR.js
@@ -14,10 +14,6 @@ OC.L10N.register(
"Add" : "Adicionar",
"Trusted Servers" : "Servidores confiáveis",
"+ Add Nextcloud server" : "+ Adicionar servidor Nextcloud",
- "Nextcloud Server" : "Servidor Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Adicionado a lista de servidores confiáveis.",
- "No Nextcloud server found" : "Servidor Nextcloud não encontrado",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A Federação Nextcloud permite que você se conecte com outros Nextcloud confiável para trocar diretórios do usuário. Por exemplo, este será utilizado para usuários externos de auto-completar para compartilhamento federado.",
- "Trusted Nextcloud Servers" : "Servidores Nextcloud confiáveis"
+ "Nextcloud Server" : "Servidor Nextcloud"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/federation/l10n/pt_BR.json b/apps/federation/l10n/pt_BR.json
index 59ef4e0434d..ac414f579bf 100644
--- a/apps/federation/l10n/pt_BR.json
+++ b/apps/federation/l10n/pt_BR.json
@@ -12,10 +12,6 @@
"Add" : "Adicionar",
"Trusted Servers" : "Servidores confiáveis",
"+ Add Nextcloud server" : "+ Adicionar servidor Nextcloud",
- "Nextcloud Server" : "Servidor Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Adicionado a lista de servidores confiáveis.",
- "No Nextcloud server found" : "Servidor Nextcloud não encontrado",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A Federação Nextcloud permite que você se conecte com outros Nextcloud confiável para trocar diretórios do usuário. Por exemplo, este será utilizado para usuários externos de auto-completar para compartilhamento federado.",
- "Trusted Nextcloud Servers" : "Servidores Nextcloud confiáveis"
+ "Nextcloud Server" : "Servidor Nextcloud"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/ru.js b/apps/federation/l10n/ru.js
index 267bc6cd1a5..78dcb348480 100644
--- a/apps/federation/l10n/ru.js
+++ b/apps/federation/l10n/ru.js
@@ -5,15 +5,15 @@ OC.L10N.register(
"Server is already in the list of trusted servers." : "Сервер уже есть в списке доверенных серверов.",
"No server to federate with found" : "Сервер для объединения не найден",
"Could not add server" : "Не удалось добавить сервер",
- "Federation" : "Объединение",
- "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." : "Объединение серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автоматического завершения внешних пользователей при объединенном общем доступе.",
- "Add server automatically once a federated share was created successfully" : "Добавить сервер автоматически, как только федеративный общий доступ будет успешно создан",
- "Trusted Servers" : "Доверенные сервера",
+ "Federation" : "Федерация",
+ "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." : "Федерация серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автодополнения имён пользователей при открытии федеративного общего доступа.",
+ "Add server automatically once a federated share was created successfully" : "Добавить сервер автоматически после успешного создания федеративного ресурса общего доступа",
+ "Trusted servers" : "Доверенные серверы",
+ "+ Add trusted server" : "+ Добавить доверенный сервер",
+ "Trusted server" : "Доверенный сервер",
+ "Add" : "Добавить",
+ "Trusted Servers" : "Доверенные серверы",
"+ Add Nextcloud server" : "+ Добавить сервер Nextcloud",
- "Nextcloud Server" : "Сервер Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Сервер добавлен в список доверенных",
- "No Nextcloud server found" : "Сервер Nextcloud не найден",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Объединение серверов позволяет вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автоматического завершения внешних пользователей при объединенном общем доступе.",
- "Trusted Nextcloud Servers" : "Доверенные серверы Nextcloud"
+ "Nextcloud Server" : "Сервер Nextcloud"
},
"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/federation/l10n/ru.json b/apps/federation/l10n/ru.json
index 4b2e1149303..5ca16d2b208 100644
--- a/apps/federation/l10n/ru.json
+++ b/apps/federation/l10n/ru.json
@@ -3,15 +3,15 @@
"Server is already in the list of trusted servers." : "Сервер уже есть в списке доверенных серверов.",
"No server to federate with found" : "Сервер для объединения не найден",
"Could not add server" : "Не удалось добавить сервер",
- "Federation" : "Объединение",
- "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." : "Объединение серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автоматического завершения внешних пользователей при объединенном общем доступе.",
- "Add server automatically once a federated share was created successfully" : "Добавить сервер автоматически, как только федеративный общий доступ будет успешно создан",
- "Trusted Servers" : "Доверенные сервера",
+ "Federation" : "Федерация",
+ "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." : "Федерация серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автодополнения имён пользователей при открытии федеративного общего доступа.",
+ "Add server automatically once a federated share was created successfully" : "Добавить сервер автоматически после успешного создания федеративного ресурса общего доступа",
+ "Trusted servers" : "Доверенные серверы",
+ "+ Add trusted server" : "+ Добавить доверенный сервер",
+ "Trusted server" : "Доверенный сервер",
+ "Add" : "Добавить",
+ "Trusted Servers" : "Доверенные серверы",
"+ Add Nextcloud server" : "+ Добавить сервер Nextcloud",
- "Nextcloud Server" : "Сервер Nextcloud",
- "Server added to the list of trusted Nextclouds" : "Сервер добавлен в список доверенных",
- "No Nextcloud server found" : "Сервер Nextcloud не найден",
- "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Объединение серверов позволяет вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автоматического завершения внешних пользователей при объединенном общем доступе.",
- "Trusted Nextcloud Servers" : "Доверенные серверы Nextcloud"
+ "Nextcloud Server" : "Сервер Nextcloud"
},"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/federation/l10n/sl.js b/apps/federation/l10n/sl.js
index 72358229a72..e7c8a7043bc 100644
--- a/apps/federation/l10n/sl.js
+++ b/apps/federation/l10n/sl.js
@@ -3,11 +3,16 @@ OC.L10N.register(
{
"Added to the list of trusted servers" : "Dodano na spisek varnih strežnikov",
"Server is already in the list of trusted servers." : "Strežnik je že na seznamu potrjenih strežnikov.",
- "No server to federate found" : "Ne najdem strežnika za federiranje",
"Could not add server" : "Ni mogoče dodati strežnika.",
"Federation" : "Zvezni oblaki",
"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." : "Federiranje omogoča povezovanje z drugimi varnimi strežniki in izmenjavo spiska uporabnikov. Primer je samodejno dopolnjevanje zunanjih uporabnikov pri federacijski souporabi.",
"Add server automatically once a federated share was created successfully" : "Strežnik dodaj samodejno, ko je povezava zveznega oblaka uspešno ustvarjena",
- "Trusted Servers" : "Varni strežniki"
+ "Trusted servers" : "Zanesljivi strežniki",
+ "+ Add trusted server" : "+ Dodaj zanesljiv strežnik",
+ "Trusted server" : "Zanesljiv strežnik",
+ "Add" : "Dodaj",
+ "Trusted Servers" : "Varni strežniki",
+ "+ Add Nextcloud server" : "+ Dodaj Nextcloud strežnik",
+ "Nextcloud Server" : "Nextcloud Strežnik"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/federation/l10n/sl.json b/apps/federation/l10n/sl.json
index d139b1f5101..865e4e8248e 100644
--- a/apps/federation/l10n/sl.json
+++ b/apps/federation/l10n/sl.json
@@ -1,11 +1,16 @@
{ "translations": {
"Added to the list of trusted servers" : "Dodano na spisek varnih strežnikov",
"Server is already in the list of trusted servers." : "Strežnik je že na seznamu potrjenih strežnikov.",
- "No server to federate found" : "Ne najdem strežnika za federiranje",
"Could not add server" : "Ni mogoče dodati strežnika.",
"Federation" : "Zvezni oblaki",
"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." : "Federiranje omogoča povezovanje z drugimi varnimi strežniki in izmenjavo spiska uporabnikov. Primer je samodejno dopolnjevanje zunanjih uporabnikov pri federacijski souporabi.",
"Add server automatically once a federated share was created successfully" : "Strežnik dodaj samodejno, ko je povezava zveznega oblaka uspešno ustvarjena",
- "Trusted Servers" : "Varni strežniki"
+ "Trusted servers" : "Zanesljivi strežniki",
+ "+ Add trusted server" : "+ Dodaj zanesljiv strežnik",
+ "Trusted server" : "Zanesljiv strežnik",
+ "Add" : "Dodaj",
+ "Trusted Servers" : "Varni strežniki",
+ "+ Add Nextcloud server" : "+ Dodaj Nextcloud strežnik",
+ "Nextcloud Server" : "Nextcloud Strežnik"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/sq.js b/apps/federation/l10n/sq.js
index 9d69a1fdf80..79ef49ef468 100644
--- a/apps/federation/l10n/sq.js
+++ b/apps/federation/l10n/sq.js
@@ -1,15 +1,19 @@
OC.L10N.register(
"federation",
{
- "Server added to the list of trusted ownClouds" : "Shërbyesi u shtua te lista e ownCloud-eve të besuar",
- "Server is already in the list of trusted servers." : "Shërbyesi është tashmë në listën e shërbyesve të besuar.",
- "No ownCloud server found" : "S’u gjet shërbyes ownCloud",
- "Could not add server" : "Shërbyesi s’u shtua dot",
+ "Added to the list of trusted servers" : "U shtua në listën e server-ave të besuar",
+ "Server is already in the list of trusted servers." : "Server-i është tashmë në listën e server-ave të besuar.",
+ "No server to federate with found" : "Nuk u gjet server me të cilin mund të federohej",
+ "Could not add server" : "Server-i s’u shtua dot",
"Federation" : "Federim",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federimi ownCloud ju lejon të lidheni me ownCloud-e të tjerë për të shkëmbyer drejtorinë e përdoruesve. Për shembull, kjo do të përdoret për për vetëplotësim përdoruesish të jashtëm për ndarje të federuar.",
- "Add server automatically once a federated share was created successfully" : "Shtoje vetvetiu shërbyesin pasi të jetë krijuar me sukses një ndarje e federuar",
- "Trusted ownCloud Servers" : "Shërbyes ownCloud të Besuar",
- "+ Add ownCloud server" : "+ Shtoni shërbyes ownCloud",
- "ownCloud Server" : "Shërbyes ownCloud"
+ "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." : "Federimi ju lejon të lidheni me server-a të tjerë për të shkëmbyer direktorinë e përdoruesit. Për shembull, kjo mund të përdoret për të parapërgatitur vendet e punës për përdorues të jashtëm në shpërndarjen e federuar.",
+ "Add server automatically once a federated share was created successfully" : "Shtoje vetvetiu server-in pasi të jetë krijuar me sukses një ndarje e federuar",
+ "Trusted servers" : "Servera të besuar",
+ "+ Add trusted server" : "+ Shto server-a të besuar",
+ "Trusted server" : "Server i besuar",
+ "Add" : "Shto",
+ "Trusted Servers" : "Server të besuar",
+ "+ Add Nextcloud server" : "+ Shto server Nextcloud",
+ "Nextcloud Server" : "Server Nextcloud"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/sq.json b/apps/federation/l10n/sq.json
index 67dcdcebe07..933267e29e2 100644
--- a/apps/federation/l10n/sq.json
+++ b/apps/federation/l10n/sq.json
@@ -1,13 +1,17 @@
{ "translations": {
- "Server added to the list of trusted ownClouds" : "Shërbyesi u shtua te lista e ownCloud-eve të besuar",
- "Server is already in the list of trusted servers." : "Shërbyesi është tashmë në listën e shërbyesve të besuar.",
- "No ownCloud server found" : "S’u gjet shërbyes ownCloud",
- "Could not add server" : "Shërbyesi s’u shtua dot",
+ "Added to the list of trusted servers" : "U shtua në listën e server-ave të besuar",
+ "Server is already in the list of trusted servers." : "Server-i është tashmë në listën e server-ave të besuar.",
+ "No server to federate with found" : "Nuk u gjet server me të cilin mund të federohej",
+ "Could not add server" : "Server-i s’u shtua dot",
"Federation" : "Federim",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federimi ownCloud ju lejon të lidheni me ownCloud-e të tjerë për të shkëmbyer drejtorinë e përdoruesve. Për shembull, kjo do të përdoret për për vetëplotësim përdoruesish të jashtëm për ndarje të federuar.",
- "Add server automatically once a federated share was created successfully" : "Shtoje vetvetiu shërbyesin pasi të jetë krijuar me sukses një ndarje e federuar",
- "Trusted ownCloud Servers" : "Shërbyes ownCloud të Besuar",
- "+ Add ownCloud server" : "+ Shtoni shërbyes ownCloud",
- "ownCloud Server" : "Shërbyes ownCloud"
+ "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." : "Federimi ju lejon të lidheni me server-a të tjerë për të shkëmbyer direktorinë e përdoruesit. Për shembull, kjo mund të përdoret për të parapërgatitur vendet e punës për përdorues të jashtëm në shpërndarjen e federuar.",
+ "Add server automatically once a federated share was created successfully" : "Shtoje vetvetiu server-in pasi të jetë krijuar me sukses një ndarje e federuar",
+ "Trusted servers" : "Servera të besuar",
+ "+ Add trusted server" : "+ Shto server-a të besuar",
+ "Trusted server" : "Server i besuar",
+ "Add" : "Shto",
+ "Trusted Servers" : "Server të besuar",
+ "+ Add Nextcloud server" : "+ Shto server Nextcloud",
+ "Nextcloud Server" : "Server Nextcloud"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/sv.js b/apps/federation/l10n/sv.js
index 7855084e268..1c6684daec6 100644
--- a/apps/federation/l10n/sv.js
+++ b/apps/federation/l10n/sv.js
@@ -1,15 +1,19 @@
OC.L10N.register(
"federation",
{
- "Server added to the list of trusted ownClouds" : "Servern är tillagd till listan över pålitliga ownCloud-servrar",
+ "Added to the list of trusted servers" : "Tillagd i listan med betrodda servrar",
"Server is already in the list of trusted servers." : "Servern finns redan i listan",
- "No ownCloud server found" : "Ingen ownCloud-server kunde hittas",
+ "No server to federate with found" : "Ingen server att federera med hittades",
"Could not add server" : "Kunde inte lägga till server",
"Federation" : "Federerad delning",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "\"ownCloud Federation\" låter dig ansluta till andra pålitliga ownCloud-servrar för att dela användarkatalogen. Detta används t.ex. för att automatiskt fylla i externa användares namn när man delar över federerade ownCloud-servrar",
+ "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." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarinformation. Till exempel kommer detta användas för att auto-komplettera externa användare för federerad delning.",
"Add server automatically once a federated share was created successfully" : "Lägg till servern automatiskt så fort en lyckad federerad delning skapats",
- "Trusted ownCloud Servers" : "Pålitliga ownCloud-servrar",
- "+ Add ownCloud server" : "+ Lägg till ownCloud-server",
- "ownCloud Server" : "ownCloud-server"
+ "Trusted servers" : "Betrodda servrar",
+ "+ Add trusted server" : "+ Lägg till betrodd server",
+ "Trusted server" : "Betrodd server",
+ "Add" : "Lägg till",
+ "Trusted Servers" : "Betrodda servrar",
+ "+ Add Nextcloud server" : "+ Lägg till Nextcloud-server",
+ "Nextcloud Server" : "Nextcloud-server"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/sv.json b/apps/federation/l10n/sv.json
index c27008a5312..68e4f055f3d 100644
--- a/apps/federation/l10n/sv.json
+++ b/apps/federation/l10n/sv.json
@@ -1,13 +1,17 @@
{ "translations": {
- "Server added to the list of trusted ownClouds" : "Servern är tillagd till listan över pålitliga ownCloud-servrar",
+ "Added to the list of trusted servers" : "Tillagd i listan med betrodda servrar",
"Server is already in the list of trusted servers." : "Servern finns redan i listan",
- "No ownCloud server found" : "Ingen ownCloud-server kunde hittas",
+ "No server to federate with found" : "Ingen server att federera med hittades",
"Could not add server" : "Kunde inte lägga till server",
"Federation" : "Federerad delning",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "\"ownCloud Federation\" låter dig ansluta till andra pålitliga ownCloud-servrar för att dela användarkatalogen. Detta används t.ex. för att automatiskt fylla i externa användares namn när man delar över federerade ownCloud-servrar",
+ "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." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarinformation. Till exempel kommer detta användas för att auto-komplettera externa användare för federerad delning.",
"Add server automatically once a federated share was created successfully" : "Lägg till servern automatiskt så fort en lyckad federerad delning skapats",
- "Trusted ownCloud Servers" : "Pålitliga ownCloud-servrar",
- "+ Add ownCloud server" : "+ Lägg till ownCloud-server",
- "ownCloud Server" : "ownCloud-server"
+ "Trusted servers" : "Betrodda servrar",
+ "+ Add trusted server" : "+ Lägg till betrodd server",
+ "Trusted server" : "Betrodd server",
+ "Add" : "Lägg till",
+ "Trusted Servers" : "Betrodda servrar",
+ "+ Add Nextcloud server" : "+ Lägg till Nextcloud-server",
+ "Nextcloud Server" : "Nextcloud-server"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federation/l10n/zh_CN.js b/apps/federation/l10n/zh_CN.js
index a84f6350671..893dab97b1d 100644
--- a/apps/federation/l10n/zh_CN.js
+++ b/apps/federation/l10n/zh_CN.js
@@ -1,15 +1,19 @@
OC.L10N.register(
"federation",
{
- "Server added to the list of trusted ownClouds" : "服务器已成功添加至信任服务器列表。",
+ "Added to the list of trusted servers" : "添加到可信任服务器列表中",
"Server is already in the list of trusted servers." : "服务器在线,并已成功添加至信任服务器列表。",
- "No ownCloud server found" : "没有找到对应服务器",
+ "No server to federate with found" : "没有找到联盟服务器",
"Could not add server" : "无法添加服务器",
"Federation" : "联合",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "联合云系统使您可以方便快速的和其他用户共享文件。",
+ "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." : "联盟允许您与其他受信任的服务器连接并交换用户目录。 例如,这将用于自动完成外部用户组成共享联盟。",
"Add server automatically once a federated share was created successfully" : "一旦联合共享创建成功自动添加服务器",
- "Trusted ownCloud Servers" : "可信 ownCloud 服务器",
- "+ Add ownCloud server" : "+ 添加 ownCloud 服务器",
- "ownCloud Server" : "ownCloud 服务器"
+ "Trusted servers" : "可信任服务器",
+ "+ Add trusted server" : "+ 添加可信任服务器",
+ "Trusted server" : "可信任服务器",
+ "Add" : "添加",
+ "Trusted Servers" : "可信任服务器",
+ "+ Add Nextcloud server" : "+ 添加 Nextcloud 服务器 ",
+ "Nextcloud Server" : "Nextcloud 服务器"
},
"nplurals=1; plural=0;");
diff --git a/apps/federation/l10n/zh_CN.json b/apps/federation/l10n/zh_CN.json
index de8663eb7ab..147269fa63e 100644
--- a/apps/federation/l10n/zh_CN.json
+++ b/apps/federation/l10n/zh_CN.json
@@ -1,13 +1,17 @@
{ "translations": {
- "Server added to the list of trusted ownClouds" : "服务器已成功添加至信任服务器列表。",
+ "Added to the list of trusted servers" : "添加到可信任服务器列表中",
"Server is already in the list of trusted servers." : "服务器在线,并已成功添加至信任服务器列表。",
- "No ownCloud server found" : "没有找到对应服务器",
+ "No server to federate with found" : "没有找到联盟服务器",
"Could not add server" : "无法添加服务器",
"Federation" : "联合",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "联合云系统使您可以方便快速的和其他用户共享文件。",
+ "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." : "联盟允许您与其他受信任的服务器连接并交换用户目录。 例如,这将用于自动完成外部用户组成共享联盟。",
"Add server automatically once a federated share was created successfully" : "一旦联合共享创建成功自动添加服务器",
- "Trusted ownCloud Servers" : "可信 ownCloud 服务器",
- "+ Add ownCloud server" : "+ 添加 ownCloud 服务器",
- "ownCloud Server" : "ownCloud 服务器"
+ "Trusted servers" : "可信任服务器",
+ "+ Add trusted server" : "+ 添加可信任服务器",
+ "Trusted server" : "可信任服务器",
+ "Add" : "添加",
+ "Trusted Servers" : "可信任服务器",
+ "+ Add Nextcloud server" : "+ 添加 Nextcloud 服务器 ",
+ "Nextcloud Server" : "Nextcloud 服务器"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/federation/lib/DAV/FedAuth.php b/apps/federation/lib/DAV/FedAuth.php
index 705ccbdd3bb..ae78ffeded9 100644
--- a/apps/federation/lib/DAV/FedAuth.php
+++ b/apps/federation/lib/DAV/FedAuth.php
@@ -24,6 +24,8 @@ namespace OCA\Federation\DAV;
use OCA\Federation\DbHandler;
use Sabre\DAV\Auth\Backend\AbstractBasic;
+use Sabre\HTTP\RequestInterface;
+use Sabre\HTTP\ResponseInterface;
class FedAuth extends AbstractBasic {
@@ -57,4 +59,10 @@ class FedAuth extends AbstractBasic {
protected function validateUserPass($username, $password) {
return $this->db->auth($username, $password);
}
+
+ /**
+ * @inheritdoc
+ */
+ function challenge(RequestInterface $request, ResponseInterface $response) {
+ }
}
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index a194bb5e795..63acda3a706 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -26,20 +26,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
+// required for translation purpose
+// t('Files')
$l = \OC::$server->getL10N('files');
-\OC::$server->getNavigationManager()->add(function () {
- $urlGenerator = \OC::$server->getURLGenerator();
- $l = \OC::$server->getL10N('files');
- return [
- 'id' => 'files_index',
- 'order' => 0,
- 'href' => $urlGenerator->linkToRoute('files.view.index'),
- 'icon' => $urlGenerator->imagePath('core', 'places/files.svg'),
- 'name' => $l->t('Files'),
- ];
-});
-
\OC::$server->getSearch()->registerProvider('OC\Search\Provider\File', array('apps' => array('files')));
$templateManager = \OC_Helper::getFileTemplateManager();
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index 35e58b7202e..2bb4d98c158 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -6,12 +6,12 @@
<licence>AGPL</licence>
<author>Robin Appelman, Vincent Petry</author>
<default_enable/>
- <version>1.6.1</version>
+ <version>1.7.0</version>
<types>
<filesystem/>
</types>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<documentation>
<user>user-files</user>
@@ -53,4 +53,11 @@
<command>OCA\Files\Command\DeleteOrphanedFiles</command>
<command>OCA\Files\Command\TransferOwnership</command>
</commands>
+
+ <navigation>
+ <name>Files</name>
+ <route>files.view.index</route>
+ <order>0</order>
+ </navigation>
+
</info>
diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css
index f91fe3319e5..cab6a684042 100644
--- a/apps/files/css/detailsView.css
+++ b/apps/files/css/detailsView.css
@@ -16,6 +16,7 @@
#app-sidebar .mainFileInfoView .icon {
display: inline-block;
+ background-size: 16px 16px;
}
#app-sidebar .mainFileInfoView .permalink {
@@ -102,23 +103,16 @@
color: #999;
}
-#app-sidebar .file-details img {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
-}
-
-#app-sidebar .file-details img:hover,
-#app-sidebar .file-details img:focus{
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-
#app-sidebar .action-favorite {
- vertical-align: text-bottom;
+ vertical-align: sub;
padding: 10px;
margin: -10px;
}
+#app-sidebar .action-favorite > span{
+ opacity: .7 !important;
+}
+
#app-sidebar .detailList {
float: left;
}
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 7956ef5c6ae..05b8e58cbe4 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -768,46 +768,20 @@ html.ie8 #controls .button.new {
}
.newFileMenu {
- width: 200px;
- margin-left: -56px;
- margin-top: 25px;
+ font-weight: 300;
+ top: 100%;
+ margin-top: 4px;
+ min-width: 100px;
+ margin-left: 7px;
z-index: 1001;
}
-.newFileMenu .menuitem {
- white-space: nowrap;
- overflow: hidden;
-}
-.newFileMenu.popovermenu a.menuitem,
-.newFileMenu.popovermenu label.menuitem,
-.newFileMenu.popovermenu .menuitem {
- padding: 0;
- margin: 0;
-}
-
-.newFileMenu.popovermenu a.menuitem.active {
- opacity: 1;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- filter: alpha(opacity=100);
-}
-
-.newFileMenu.bubble:after {
- left: 75px;
- right: auto;
-}
-.newFileMenu.bubble:before {
- left: 75px;
- right: auto;
-}
-
.newFileMenu .filenameform {
display: inline-block;
}
.newFileMenu .filenameform input {
- width: 100%;
- box-sizing: border-box;
- margin: -2px 0;
+ margin: 2px 0;
}
#fileList .popovermenu .action {
@@ -835,6 +809,9 @@ html.ie8 #controls .button.new {
height: 15px;
}
+.app-files .actions .button.new {
+ position: relative;
+}
.app-files .actions .button.new .icon {
margin-bottom: 2px;
}
diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css
index 2de99689839..4a5abd2b73c 100644
--- a/apps/files/css/mobile.css
+++ b/apps/files/css/mobile.css
@@ -1,4 +1,7 @@
-@media only screen and (max-width: 768px) {
+/* 938 = table min-width(688) + app-navigation width: 250
+ 769 = size where app-navigation (768) is hidden +1
+ 688 = table min-width */
+@media only screen and (max-width: 938px) and (min-width: 769px), only screen and (max-width: 688px) {
.app-files #app-content.dir-drop{
background-color: rgba(255, 255, 255, 1)!important;
@@ -58,7 +61,7 @@ table td.filename .nametext {
/* ellipsis on file names */
table td.filename .nametext .innernametext {
- max-width: 50%;
+ max-width: calc(100% - 175px);
}
/* proper notification area for multi line messages */
diff --git a/apps/files/img/app.svg b/apps/files/img/app.svg
new file mode 100644
index 00000000000..130f59eab23
--- /dev/null
+++ b/apps/files/img/app.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" viewBox="0 0 32 32">
+ <g fill-rule="evenodd" transform="matrix(1.7333 0 0 1.7333 -344.09 -1727.8)" fill="#fff">
+ <path d="m200.2 999.72c-0.28913 0-0.53125 0.2421-0.53125 0.5312v12.784c0 0.2985 0.23264 0.5312 0.53125 0.5312h15.091c0.2986 0 0.53124-0.2327 0.53124-0.5312l0.0004-10.474c0-0.2889-0.24211-0.5338-0.53124-0.5338l-7.5457 0.0005-2.3076-2.3078z" fill-rule="evenodd" fill="#fff"/>
+ </g>
+</svg>
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index b3a59b54241..0fbf3f559fe 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -130,6 +130,16 @@ OC.FileUpload.prototype = {
},
/**
+ * Get full path for the target file,
+ * including relative path and file name.
+ *
+ * @return {String} full path
+ */
+ getFullFilePath: function() {
+ return OC.joinPaths(this.getFullPath(), this.getFile().name);
+ },
+
+ /**
* Returns conflict resolution mode.
*
* @return {int} conflict mode
@@ -148,15 +158,6 @@ OC.FileUpload.prototype = {
this._conflictMode = mode;
},
- /**
- * Returns whether the upload is in progress
- *
- * @return {boolean}
- */
- isPending: function() {
- return this.data.state() === 'pending';
- },
-
deleteUpload: function() {
delete this.data.jqXHR;
},
@@ -508,9 +509,10 @@ OC.Uploader.prototype = _.extend({
return;
}
// retrieve more info about this file
- this.filesClient.getFileInfo(fileUpload.getFullPath()).then(function(status, fileInfo) {
+ this.filesClient.getFileInfo(fileUpload.getFullFilePath()).then(function(status, fileInfo) {
var original = fileInfo;
var replacement = file;
+ original.directory = original.path;
OC.dialogs.fileexists(fileUpload, original, replacement, self);
});
},
@@ -550,21 +552,6 @@ OC.Uploader.prototype = _.extend({
OC.Notification.showTemporary(t('files', 'Upload cancelled.'), {timeout: 10});
}, 500),
/**
- * Checks the currently known uploads.
- * returns true if any hxr has the state 'pending'
- * @returns {boolean}
- */
- isProcessing:function() {
- var count = 0;
-
- jQuery.each(this._uploads, function(i, upload) {
- if (upload.isPending()) {
- count++;
- }
- });
- return count > 0;
- },
- /**
* callback for the conflicts dialog
*/
onCancel:function() {
@@ -1029,43 +1016,9 @@ OC.Uploader.prototype = _.extend({
bufferIndex = (bufferIndex + 1) % bufferSize;
}
var smoothRemainingSeconds = (bufferTotal / bufferSize); //seconds
- var date = new Date(smoothRemainingSeconds * 1000);
- var timeStringDesktop = "";
- var timeStringMobile = "";
- if(date.getUTCHours() > 0){
- timeStringDesktop = t('files', '{hours}:{minutes}:{seconds} hour{plural_s} left' , {
- hours:date.getUTCHours(),
- minutes: ('0' + date.getUTCMinutes()).slice(-2),
- seconds: ('0' + date.getUTCSeconds()).slice(-2),
- plural_s: ( smoothRemainingSeconds === 3600 ? "": "s") // 1 hour = 1*60m*60s = 3600s
- });
- timeStringMobile = t('files', '{hours}:{minutes}h' , {
- hours:date.getUTCHours(),
- minutes: ('0' + date.getUTCMinutes()).slice(-2),
- seconds: ('0' + date.getUTCSeconds()).slice(-2)
- });
- } else if(date.getUTCMinutes() > 0){
- timeStringDesktop = t('files', '{minutes}:{seconds} minute{plural_s} left' , {
- minutes: date.getUTCMinutes(),
- seconds: ('0' + date.getUTCSeconds()).slice(-2),
- plural_s: (smoothRemainingSeconds === 60 ? "": "s") // 1 minute = 1*60s = 60s
- });
- timeStringMobile = t('files', '{minutes}:{seconds}m' , {
- minutes: date.getUTCMinutes(),
- seconds: ('0' + date.getUTCSeconds()).slice(-2)
- });
- } else if(date.getUTCSeconds() > 0){
- timeStringDesktop = t('files', '{seconds} second{plural_s} left' , {
- seconds: date.getUTCSeconds(),
- plural_s: (smoothRemainingSeconds === 1 ? "": "s") // 1 second = 1s = 1s
- });
- timeStringMobile = t('files', '{seconds}s' , {seconds: date.getUTCSeconds()});
- } else {
- timeStringDesktop = t('files', 'Any moment now...');
- timeStringMobile = t('files', 'Soon...');
- }
- $('#uploadprogressbar .label .mobile').text(timeStringMobile);
- $('#uploadprogressbar .label .desktop').text(timeStringDesktop);
+ var h = moment.duration(smoothRemainingSeconds, "seconds").humanize();
+ $('#uploadprogressbar .label .mobile').text(h);
+ $('#uploadprogressbar .label .desktop').text(h);
$('#uploadprogressbar').attr('original-title',
t('files', '{loadedSize} of {totalSize} ({bitrate})' , {
loadedSize: humanFileSize(data.loaded),
@@ -1157,13 +1110,6 @@ OC.Uploader.prototype = _.extend({
}
}
- // warn user not to leave the page while upload is in progress
- $(window).on('beforeunload', function(e) {
- if (self.isProcessing()) {
- return t('files', 'File upload is in progress. Leaving the page now will cancel the upload.');
- }
- });
-
//add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
if (navigator.userAgent.search(/konqueror/i) === -1) {
this.$uploadEl.attr('multiple', 'multiple');
diff --git a/apps/files/js/fileinfomodel.js b/apps/files/js/fileinfomodel.js
index de1b143a160..9d1eac31940 100644
--- a/apps/files/js/fileinfomodel.js
+++ b/apps/files/js/fileinfomodel.js
@@ -36,10 +36,18 @@
path: ''
},
- initialize: function(data) {
+ _filesClient: null,
+
+ initialize: function(data, options) {
if (!_.isUndefined(data.id)) {
data.id = parseInt(data.id, 10);
}
+
+ if( options ){
+ if (options.filesClient) {
+ this._filesClient = options.filesClient;
+ }
+ }
},
/**
@@ -73,6 +81,42 @@
*/
getFullPath: function() {
return OC.joinPaths(this.get('path'), this.get('name'));
+ },
+
+ /**
+ * Reloads missing properties from server and set them in the model.
+ * @param properties array of properties to be reloaded
+ * @return ajax call object
+ */
+ reloadProperties: function(properties) {
+ if( !this._filesClient ){
+ return;
+ }
+
+ var self = this;
+ var deferred = $.Deferred();
+
+ var targetPath = OC.joinPaths(this.get('path') + '/', this.get('name'));
+
+ this._filesClient.getFileInfo(targetPath, {
+ properties: properties
+ })
+ .then(function(status, data) {
+ // the following lines should be extracted to a mapper
+
+ if( properties.indexOf(OC.Files.Client.PROPERTY_GETCONTENTLENGTH) !== -1
+ || properties.indexOf(OC.Files.Client.PROPERTY_SIZE) !== -1 ) {
+ self.set('size', data.size);
+ }
+
+ deferred.resolve(status, data);
+ })
+ .fail(function(status) {
+ OC.Notification.showTemporary(t('files', 'Could not load info for file "{file}"', {file: self.get('name')}));
+ deferred.reject(status);
+ });
+
+ return deferred.promise();
}
});
@@ -82,4 +126,3 @@
OCA.Files.FileInfoModel = FileInfoModel;
})(OC, OCA);
-
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index a8daeadfd26..3a59da53517 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -442,7 +442,9 @@
// In the future the FileList should work with Backbone.Collection
// and contain existing models that can be used.
// This method would in the future simply retrieve the matching model from the collection.
- var model = new OCA.Files.FileInfoModel(this.elementToFile($tr));
+ var model = new OCA.Files.FileInfoModel(this.elementToFile($tr), {
+ filesClient: this.filesClient
+ });
if (!model.get('path')) {
model.set('path', this.getCurrentDirectory(), {silent: true});
}
@@ -891,11 +893,14 @@
mimetype: $el.attr('data-mime'),
mtime: parseInt($el.attr('data-mtime'), 10),
type: $el.attr('data-type'),
- size: parseInt($el.attr('data-size'), 10),
etag: $el.attr('data-etag'),
permissions: parseInt($el.attr('data-permissions'), 10),
hasPreview: $el.attr('data-has-preview') === 'true'
};
+ var size = $el.attr('data-size');
+ if (size) {
+ data.size = parseInt(size, 10);
+ }
var icon = $el.attr('data-icon');
if (icon) {
data.icon = icon;
@@ -1029,7 +1034,7 @@
* Returns whether the given file info must be hidden
*
* @param {OC.Files.FileInfo} fileInfo file info
- *
+ *
* @return {boolean} true if the file is a hidden file, false otherwise
*/
_isHiddenFile: function(file) {
@@ -1175,7 +1180,7 @@
var innernameSpan = $('<span></span>').addClass('innernametext').text(basename);
if (path && path !== '/') {
- var conflictingItems = this.$fileList.find('tr[data-file="' + name.replace( /(:|\.|\[|\]|,|=)/g, "\\$1") + '"]');
+ var conflictingItems = this.$fileList.find('tr[data-file="' + this._jqSelEscape(name) + '"]');
if (conflictingItems.length !== 0) {
if (conflictingItems.length === 1) {
// Update the path on the first conflicting item
@@ -1261,6 +1266,14 @@
return tr;
},
+ /* escape a selector expression for jQuery */
+ _jqSelEscape: function (expression) {
+ if (expression) {
+ return expression.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~]/g, '\\$&');
+ }
+ return null;
+ },
+
/**
* Adds an entry to the files array and also into the DOM
* in a sorted manner.
@@ -2465,6 +2478,11 @@
if (!_.isArray(file)) {
file = [file];
}
+ if (file.length === 1) {
+ _.defer(function() {
+ this.showDetailsView(file[0]);
+ }.bind(this));
+ }
this.highlightFiles(file, function($tr) {
$tr.addClass('searchresult');
$tr.one('hover', function() {
@@ -2828,7 +2846,6 @@
});
uploader.on('fail', function(e, data) {
self._uploader.log('filelist handle fileuploadfail', e, data);
-
self._uploads = [];
//if user pressed cancel hide upload chrome
@@ -2939,7 +2956,7 @@
this._newFileMenu = new OCA.Files.NewFileMenu({
fileList: this
});
- $('body').append(this._newFileMenu.$el);
+ $('.actions').append(this._newFileMenu.$el);
}
this._newFileMenu.showAt($target);
diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js
index e9259f75ba1..e815fa70ecb 100644
--- a/apps/files/js/mainfileinfodetailview.js
+++ b/apps/files/js/mainfileinfodetailview.js
@@ -20,9 +20,8 @@
'</a>' +
'</div>' +
' <div class="file-details ellipsis">' +
- ' <a href="#" ' +
- ' class="action action-favorite favorite">' +
- ' <img class="svg" alt="{{starAltText}}" src="{{starIcon}}" />' +
+ ' <a href="#" class="action action-favorite favorite permanent">' +
+ ' <span class="icon {{starClass}}" title="{{starAltText}}"></span>' +
' </a>' +
' {{#if hasSize}}<span class="size" title="{{altSize}}">{{size}}</span>, {{/if}}<span class="date live-relative-timestamp" data-timestamp="{{timestamp}}" title="{{altDate}}">{{date}}</span>' +
' </div>' +
@@ -131,6 +130,19 @@
if (this.model) {
this.model.on('change', this._onModelChanged, this);
}
+
+ if (this.model) {
+ var properties = [];
+ if( !this.model.has('size') ) {
+ properties.push(OC.Files.Client.PROPERTY_SIZE);
+ properties.push(OC.Files.Client.PROPERTY_GETCONTENTLENGTH);
+ }
+
+ if( properties.length > 0){
+ this.model.reloadProperties(properties);
+ }
+ }
+
this.render();
},
@@ -155,7 +167,7 @@
timestamp: this.model.get('mtime'),
date: OC.Util.relativeModifiedDate(this.model.get('mtime')),
starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'),
- starIcon: OC.imagePath('core', isFavorite ? 'actions/starred' : 'actions/star'),
+ starClass: isFavorite ? 'icon-starred' : 'icon-star',
permalink: this._makePermalink(this.model.get('id')),
permalinkTitle: t('files', 'Copy local link')
}));
diff --git a/apps/files/js/newfilemenu.js b/apps/files/js/newfilemenu.js
index 75c4cdcc0ba..e4023c62342 100644
--- a/apps/files/js/newfilemenu.js
+++ b/apps/files/js/newfilemenu.js
@@ -38,7 +38,8 @@
*/
var NewFileMenu = OC.Backbone.View.extend({
tagName: 'div',
- className: 'newFileMenu popovermenu bubble hidden open menu',
+ // Menu is opened by default because it's rendered on "add-button" click
+ className: 'newFileMenu popovermenu bubble menu open menu-left',
events: {
'click .menuitem': '_onClickAction'
@@ -235,13 +236,6 @@
*/
showAt: function($target) {
this.render();
- var targetOffset = $target.offset();
- this.$el.css({
- left: targetOffset.left,
- top: targetOffset.top + $target.height()
- });
- this.$el.removeClass('hidden');
-
OC.showMenu(null, this.$el);
}
});
diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js
index 3c0a231d003..9bb4ba33598 100644
--- a/apps/files/js/tagsplugin.js
+++ b/apps/files/js/tagsplugin.js
@@ -12,6 +12,11 @@
(function(OCA) {
+ _.extend(OC.Files.Client, {
+ PROPERTY_TAGS: '{' + OC.Files.Client.NS_OWNCLOUD + '}tags',
+ PROPERTY_FAVORITE: '{' + OC.Files.Client.NS_OWNCLOUD + '}favorite'
+ });
+
var TEMPLATE_FAVORITE_ACTION =
'<a href="#" ' +
'class="action action-favorite {{#isFavorite}}permanent{{/isFavorite}}">' +
@@ -162,24 +167,22 @@
return fileInfo;
};
- var NS_OC = 'http://owncloud.org/ns';
-
var oldGetWebdavProperties = fileList._getWebdavProperties;
fileList._getWebdavProperties = function() {
var props = oldGetWebdavProperties.apply(this, arguments);
- props.push('{' + NS_OC + '}tags');
- props.push('{' + NS_OC + '}favorite');
+ props.push(OC.Files.Client.PROPERTY_TAGS);
+ props.push(OC.Files.Client.PROPERTY_FAVORITE);
return props;
};
fileList.filesClient.addFileInfoParser(function(response) {
var data = {};
var props = response.propStat[0].properties;
- var tags = props['{' + NS_OC + '}tags'];
- var favorite = props['{' + NS_OC + '}favorite'];
+ var tags = props[OC.Files.Client.PROPERTY_TAGS];
+ var favorite = props[OC.Files.Client.PROPERTY_FAVORITE];
if (tags && tags.length) {
tags = _.chain(tags).filter(function(xmlvalue) {
- return (xmlvalue.namespaceURI === NS_OC && xmlvalue.nodeName.split(':')[1] === 'tag');
+ return (xmlvalue.namespaceURI === OC.Files.Client.NS_OWNCLOUD && xmlvalue.nodeName.split(':')[1] === 'tag');
}).map(function(xmlvalue) {
return xmlvalue.textContent || xmlvalue.text;
}).value();
diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js
index cb33d1b3286..917701fe440 100644
--- a/apps/files/l10n/ast.js
+++ b/apps/files/l10n/ast.js
@@ -15,16 +15,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nun hai abondu espaciu llibre, tas xubiendo {size1} pero namái falta {size2}",
"Uploading..." : "Xubiendo...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Falten {hours}:{minutes}:{seconds} hour{plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "Falten {minutes}:{seconds} minute{plural_s} ",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "Falten {seconds} second{plural_s}",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "En cualquier momentu...",
- "Soon..." : "Pronto...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "La xuba del ficheru ta en progresu. Si dexes agora la páxina, va encaboxase la xuba.",
"Actions" : "Aiciones",
"Download" : "Descargar",
"Rename" : "Renomar",
@@ -113,6 +104,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "El tamañu de ficheru total {size1} perpasa la llende de xuba {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fallu xubiendo'l ficheru \"{fileName}\": {message}",
"Could not get result from server." : "Nun pudo obtenese'l resultáu del sirvidor.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Falten {hours}:{minutes}:{seconds} hour{plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "Falten {minutes}:{seconds} minute{plural_s} ",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "Falten {seconds} second{plural_s}",
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "En cualquier momentu...",
+ "Soon..." : "Pronto...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La xuba del ficheru ta en progresu. Si dexes agora la páxina, va encaboxase la xuba.",
"No entries in this folder match '{filter}'" : "Nun concasa nenguna entrada nesta carpeta '{filter}'",
"Local link" : "Enllaz llocal",
"{newname} already exists" : "{newname} yá existe",
diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json
index fe1758eb99b..fd9636fc4e0 100644
--- a/apps/files/l10n/ast.json
+++ b/apps/files/l10n/ast.json
@@ -13,16 +13,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nun hai abondu espaciu llibre, tas xubiendo {size1} pero namái falta {size2}",
"Uploading..." : "Xubiendo...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Falten {hours}:{minutes}:{seconds} hour{plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "Falten {minutes}:{seconds} minute{plural_s} ",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "Falten {seconds} second{plural_s}",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "En cualquier momentu...",
- "Soon..." : "Pronto...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "La xuba del ficheru ta en progresu. Si dexes agora la páxina, va encaboxase la xuba.",
"Actions" : "Aiciones",
"Download" : "Descargar",
"Rename" : "Renomar",
@@ -111,6 +102,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "El tamañu de ficheru total {size1} perpasa la llende de xuba {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fallu xubiendo'l ficheru \"{fileName}\": {message}",
"Could not get result from server." : "Nun pudo obtenese'l resultáu del sirvidor.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Falten {hours}:{minutes}:{seconds} hour{plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "Falten {minutes}:{seconds} minute{plural_s} ",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "Falten {seconds} second{plural_s}",
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "En cualquier momentu...",
+ "Soon..." : "Pronto...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La xuba del ficheru ta en progresu. Si dexes agora la páxina, va encaboxase la xuba.",
"No entries in this folder match '{filter}'" : "Nun concasa nenguna entrada nesta carpeta '{filter}'",
"Local link" : "Enllaz llocal",
"{newname} already exists" : "{newname} yá existe",
diff --git a/apps/files/l10n/bg_BG.js b/apps/files/l10n/bg_BG.js
index 709477ce7e0..4dd4d2b067e 100644
--- a/apps/files/l10n/bg_BG.js
+++ b/apps/files/l10n/bg_BG.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "Временно хранилището не е налично.",
"Storage invalid" : "Невалидно хранилище.",
"Unknown error" : "Неизвестна грешка",
- "Files" : "Файлове",
"All files" : "Всички файлове",
"Recent" : "Скорошен",
"File could not be found" : "Файлът не може да бъде открит",
@@ -15,12 +14,11 @@ OC.L10N.register(
"Upload cancelled." : "Качването е прекъснато.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Неуспешно качване на {filename}, защото е директория или с размер 0 байта.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Няма достатъчно свободно място. Опитвате да качите {size1} при свободни само {size2}",
+ "Target folder \"{dir}\" does not exist any more" : "Целева папка \"{dir}\" не съществува вече",
"Not enough free space" : "Няма достатъчно свободно място",
"Uploading..." : "Качване...",
"..." : "...",
- "Any moment now..." : "Всеки момент...",
- "Soon..." : "Скоро...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} от {totalSize} ({bitrate})",
"Actions" : "Действия",
"Download" : "Изтегли",
"Rename" : "Преименуване",
@@ -29,6 +27,7 @@ OC.L10N.register(
"Delete" : "Изтриване",
"Disconnect storage" : "Извади хранилището",
"Unshare" : "Прекратяване на споделяне",
+ "Files" : "Файлове",
"Details" : "Детайли",
"Select" : "Избери",
"Pending" : "Чакащо",
@@ -45,6 +44,7 @@ OC.L10N.register(
"Could not create file \"{file}\" because it already exists" : "Файлът \"{file}\" не може да бъде създаден защото вече съществува",
"Could not create folder \"{dir}\" because it already exists" : "Папката \"{dir}\" не може да бъде създадена защото вече съществува",
"Error deleting file \"{fileName}\"." : "Грешка при изтриването на файла \"{fileName}\".",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Няма резултати от търсенето в други папки за '{tag}{filter}{endtag}'",
"Name" : "Име",
"Size" : "Размер",
"Modified" : "Променен на",
@@ -62,14 +62,21 @@ OC.L10N.register(
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилището на {owner} е почти запълнено ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Вашето хранилище е почти запълнено ({usedSpacePercent}%).",
"_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "],
+ "View in folder" : "Преглед в папка",
"Path" : "Път",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Favorited" : "Отбелязано в любими",
"Favorite" : "Любими",
+ "Copy local link" : "Копиране на локална връзка",
"Folder" : "Папка",
"New folder" : "Нова папка",
"Upload" : "Качване",
- "An error occurred while trying to update the tags" : "Възникна грешка при опита за промяна на етикети",
+ "An error occurred while trying to update the tags" : "Възникна грешка при опита за промяна на тагове",
+ "Added to favorites" : "Добавено към предпочитани",
+ "Removed from favorites" : "Премахнато от предпочитани",
+ "You added {file} to your favorites" : "Добавихте {file} към предпочитани",
+ "You removed {file} from your favorites" : "Махнахте {file} от вашите предпочитания",
+ "File changes" : "Файлови промени",
"Created by {user}" : "Създаден от {user}",
"Changed by {user}" : "Променен от {user}",
"Deleted by {user}" : "Изтрит от {user}",
@@ -77,18 +84,31 @@ OC.L10N.register(
"Renamed by {user}" : "Преименуван от {user}",
"Moved by {user}" : "Преместен от {user}",
"You created {file}" : "Вие създадохте {file}",
+ "{user} created {file}" : "{user} създаде {file}",
+ "{file} was created in a public folder" : "{file} беше създаден в публична папка",
+ "You changed {file}" : "Променихте {file}",
"{user} changed {file}" : "{user} промени {file}",
"You deleted {file}" : "Вие изтрихте {file}",
"{user} deleted {file}" : "{user} изтри {file}",
+ "You restored {file}" : "Възстановихте {file}",
+ "{user} restored {file}" : "{user} възстанови {file}",
+ "You renamed {oldfile} to {newfile}" : "Преименувахте {oldfile} на {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} преименува {oldfile} на {newfile}",
+ "You moved {oldfile} to {newfile}" : "Преместихте {oldfile} в {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} премести {oldfile} в {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Файл беше добавен или премахнат от <strong>предпочитанията</strong> ви",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "<strong>Промяна</strong> или <strong>преименуване</strong> на файл / папка",
"A new file or folder has been <strong>created</strong>" : "<strong>Създаване</strong> на нов файл / папка",
+ "A new file or folder has been <strong>deleted</strong>" : "Нов файл или папка беше <strong>изтрит/а</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Изпращай известия само при създаване / промяна на <strong>любими файлове</strong> <em>(Само за потока)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "Нов файл или папка беше <strong>възстановен/а</strong>",
"Upload (max. %s)" : "Качи (макс. %s)",
"File handling" : "Операция с файла",
"Maximum upload size" : "Максимален размер",
"max. possible: " : "максимално:",
"Save" : "Запис",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Ако ползвате PHP-FPM прилагането на една промяна може да отнеме 5 минути.",
+ "Missing permissions to edit from here." : "Липсва разрешение за редакция от тук.",
"Settings" : "Настройки",
"Show hidden files" : "Показвай и скрити файлове",
"WebDAV" : "WebDAV",
@@ -127,7 +147,17 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Общия размер {size1} надминава лимита за качване {size2}.",
"Error uploading file \"{fileName}\": {message}" : "Грешка при качването на файла \"{fileName}\": {message}",
"Could not get result from server." : "Не се получи резултат от сървърът.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} час{plural_s} остават",
+ "{hours}:{minutes}h" : "{hours}:{minutes}ч",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} минут{plural_s} остават",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}м",
+ "{seconds} second{plural_s} left" : "{seconds} секунд{plural_s} остават",
+ "{seconds}s" : "{seconds}и",
+ "Any moment now..." : "Всеки момент...",
+ "Soon..." : "Скоро...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.",
"No entries in this folder match '{filter}'" : "Нищо в тази папка не пасва на '{filter}'",
+ "Local link" : "Локална връзка",
"{newname} already exists" : "{newname} вече съществува",
"A file or folder has been <strong>changed</strong>" : "<strong>Промяна</strong> на файл / папка",
"A file or folder has been <strong>deleted</strong>" : "<strong>Изтриване</strong> на файл / папка",
@@ -143,8 +173,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s възстанови %1$s",
"Changed by %2$s" : "Променен от %2$s",
"Deleted by %2$s" : "Изтрит от %2$s",
- "Restored by %2$s" : "Възстанвен от %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Ползвайте следния адрес <a href=\"%s\" target=\"_blank\">за да достъпите файловете чрез WebDAV</a>",
- "Cancel upload" : "Прекрати качването"
+ "Restored by %2$s" : "Възстанвен от %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/bg_BG.json b/apps/files/l10n/bg_BG.json
index d6a7c3b71f4..6c439e2056f 100644
--- a/apps/files/l10n/bg_BG.json
+++ b/apps/files/l10n/bg_BG.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Временно хранилището не е налично.",
"Storage invalid" : "Невалидно хранилище.",
"Unknown error" : "Неизвестна грешка",
- "Files" : "Файлове",
"All files" : "Всички файлове",
"Recent" : "Скорошен",
"File could not be found" : "Файлът не може да бъде открит",
@@ -13,12 +12,11 @@
"Upload cancelled." : "Качването е прекъснато.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Неуспешно качване на {filename}, защото е директория или с размер 0 байта.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Няма достатъчно свободно място. Опитвате да качите {size1} при свободни само {size2}",
+ "Target folder \"{dir}\" does not exist any more" : "Целева папка \"{dir}\" не съществува вече",
"Not enough free space" : "Няма достатъчно свободно място",
"Uploading..." : "Качване...",
"..." : "...",
- "Any moment now..." : "Всеки момент...",
- "Soon..." : "Скоро...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} от {totalSize} ({bitrate})",
"Actions" : "Действия",
"Download" : "Изтегли",
"Rename" : "Преименуване",
@@ -27,6 +25,7 @@
"Delete" : "Изтриване",
"Disconnect storage" : "Извади хранилището",
"Unshare" : "Прекратяване на споделяне",
+ "Files" : "Файлове",
"Details" : "Детайли",
"Select" : "Избери",
"Pending" : "Чакащо",
@@ -43,6 +42,7 @@
"Could not create file \"{file}\" because it already exists" : "Файлът \"{file}\" не може да бъде създаден защото вече съществува",
"Could not create folder \"{dir}\" because it already exists" : "Папката \"{dir}\" не може да бъде създадена защото вече съществува",
"Error deleting file \"{fileName}\"." : "Грешка при изтриването на файла \"{fileName}\".",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Няма резултати от търсенето в други папки за '{tag}{filter}{endtag}'",
"Name" : "Име",
"Size" : "Размер",
"Modified" : "Променен на",
@@ -60,14 +60,21 @@
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилището на {owner} е почти запълнено ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Вашето хранилище е почти запълнено ({usedSpacePercent}%).",
"_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "],
+ "View in folder" : "Преглед в папка",
"Path" : "Път",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Favorited" : "Отбелязано в любими",
"Favorite" : "Любими",
+ "Copy local link" : "Копиране на локална връзка",
"Folder" : "Папка",
"New folder" : "Нова папка",
"Upload" : "Качване",
- "An error occurred while trying to update the tags" : "Възникна грешка при опита за промяна на етикети",
+ "An error occurred while trying to update the tags" : "Възникна грешка при опита за промяна на тагове",
+ "Added to favorites" : "Добавено към предпочитани",
+ "Removed from favorites" : "Премахнато от предпочитани",
+ "You added {file} to your favorites" : "Добавихте {file} към предпочитани",
+ "You removed {file} from your favorites" : "Махнахте {file} от вашите предпочитания",
+ "File changes" : "Файлови промени",
"Created by {user}" : "Създаден от {user}",
"Changed by {user}" : "Променен от {user}",
"Deleted by {user}" : "Изтрит от {user}",
@@ -75,18 +82,31 @@
"Renamed by {user}" : "Преименуван от {user}",
"Moved by {user}" : "Преместен от {user}",
"You created {file}" : "Вие създадохте {file}",
+ "{user} created {file}" : "{user} създаде {file}",
+ "{file} was created in a public folder" : "{file} беше създаден в публична папка",
+ "You changed {file}" : "Променихте {file}",
"{user} changed {file}" : "{user} промени {file}",
"You deleted {file}" : "Вие изтрихте {file}",
"{user} deleted {file}" : "{user} изтри {file}",
+ "You restored {file}" : "Възстановихте {file}",
+ "{user} restored {file}" : "{user} възстанови {file}",
+ "You renamed {oldfile} to {newfile}" : "Преименувахте {oldfile} на {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} преименува {oldfile} на {newfile}",
+ "You moved {oldfile} to {newfile}" : "Преместихте {oldfile} в {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} премести {oldfile} в {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Файл беше добавен или премахнат от <strong>предпочитанията</strong> ви",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "<strong>Промяна</strong> или <strong>преименуване</strong> на файл / папка",
"A new file or folder has been <strong>created</strong>" : "<strong>Създаване</strong> на нов файл / папка",
+ "A new file or folder has been <strong>deleted</strong>" : "Нов файл или папка беше <strong>изтрит/а</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Изпращай известия само при създаване / промяна на <strong>любими файлове</strong> <em>(Само за потока)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "Нов файл или папка беше <strong>възстановен/а</strong>",
"Upload (max. %s)" : "Качи (макс. %s)",
"File handling" : "Операция с файла",
"Maximum upload size" : "Максимален размер",
"max. possible: " : "максимално:",
"Save" : "Запис",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Ако ползвате PHP-FPM прилагането на една промяна може да отнеме 5 минути.",
+ "Missing permissions to edit from here." : "Липсва разрешение за редакция от тук.",
"Settings" : "Настройки",
"Show hidden files" : "Показвай и скрити файлове",
"WebDAV" : "WebDAV",
@@ -125,7 +145,17 @@
"Total file size {size1} exceeds upload limit {size2}" : "Общия размер {size1} надминава лимита за качване {size2}.",
"Error uploading file \"{fileName}\": {message}" : "Грешка при качването на файла \"{fileName}\": {message}",
"Could not get result from server." : "Не се получи резултат от сървърът.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} час{plural_s} остават",
+ "{hours}:{minutes}h" : "{hours}:{minutes}ч",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} минут{plural_s} остават",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}м",
+ "{seconds} second{plural_s} left" : "{seconds} секунд{plural_s} остават",
+ "{seconds}s" : "{seconds}и",
+ "Any moment now..." : "Всеки момент...",
+ "Soon..." : "Скоро...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.",
"No entries in this folder match '{filter}'" : "Нищо в тази папка не пасва на '{filter}'",
+ "Local link" : "Локална връзка",
"{newname} already exists" : "{newname} вече съществува",
"A file or folder has been <strong>changed</strong>" : "<strong>Промяна</strong> на файл / папка",
"A file or folder has been <strong>deleted</strong>" : "<strong>Изтриване</strong> на файл / папка",
@@ -141,8 +171,6 @@
"%2$s restored %1$s" : "%2$s възстанови %1$s",
"Changed by %2$s" : "Променен от %2$s",
"Deleted by %2$s" : "Изтрит от %2$s",
- "Restored by %2$s" : "Възстанвен от %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Ползвайте следния адрес <a href=\"%s\" target=\"_blank\">за да достъпите файловете чрез WebDAV</a>",
- "Cancel upload" : "Прекрати качването"
+ "Restored by %2$s" : "Възстанвен от %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js
index 1e7e8f18a14..e9970c49788 100644
--- a/apps/files/l10n/cs_CZ.js
+++ b/apps/files/l10n/cs_CZ.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "Úložiště je dočasně nedostupné",
"Storage invalid" : "Neplatné úložiště",
"Unknown error" : "Neznámá chyba",
- "Files" : "Soubory",
"All files" : "Všechny soubory",
"Recent" : "Nedávné",
"File could not be found" : "Soubor nelze nalézt",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "Nedostatek volného prostoru",
"Uploading..." : "Odesílám...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "zbývá {hours}:{minutes}:{seconds} hour{plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "zbývá {minutes}:{seconds} minute{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} sekund{plural_s} zbývá",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Každou chvíli...",
- "Soon..." : "Brzy...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
- "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í.",
"Actions" : "Činnosti",
"Download" : "Stáhnout",
"Rename" : "Přejmenovat",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "Smazat",
"Disconnect storage" : "Odpojit úložiště",
"Unshare" : "Zrušit sdílení",
+ "Could not load info for file \"{file}\"" : "Nepodařilo se načíst informace pro soubor {file}",
+ "Files" : "Soubory",
"Details" : "Podrobnosti",
"Select" : "Vybrat",
"Pending" : "Nevyřízené",
@@ -81,7 +73,31 @@ OC.L10N.register(
"New folder" : "Nový adresář",
"Upload" : "Odeslat",
"An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba",
+ "Added to favorites" : "Přidán k oblíbeným",
+ "Removed from favorites" : "Odebráno z oblíbených",
+ "You added {file} to your favorites" : "Do svých oblíbených jste přidal(a) {file}",
+ "You removed {file} from your favorites" : "Odstranil(a) jste {file} ze svých oblíbených",
"File changes" : "Změny souboru",
+ "Created by {user}" : "Vytvořil {user}",
+ "Changed by {user}" : "Změnil {user}",
+ "Deleted by {user}" : "Odstranil {user}",
+ "Restored by {user}" : "Obnovil {user}",
+ "Renamed by {user}" : "Přejmenoval {user}",
+ "Moved by {user}" : "Přesunul {user}",
+ "You created {file}" : "Vytvořil(a) jste {file}",
+ "{user} created {file}" : "{user} vytvořil(a) {file}",
+ "{file} was created in a public folder" : "Soubor {file} byl vytvořen ve veřejné složce",
+ "You changed {file}" : "Změnil(a) jste {file}",
+ "{user} changed {file}" : "{user} změnil(a) {file}",
+ "You deleted {file}" : "Odstranil(a) jste {file}",
+ "{user} deleted {file}" : "{user} smazal(a) {file}",
+ "You restored {file}" : "Obnovil(a) jste {file}",
+ "{user} restored {file}" : "{user} obnovil {file}",
+ "You renamed {oldfile} to {newfile}" : "Přejmenoval(a) jste {oldfile} na {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} přejmenoval {oldfile} na {newfile}",
+ "You moved {oldfile} to {newfile}" : "{oldfile} jste přesunul(a) do {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} přesunul(a) {oldfile} do {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Soubor byl přidán, nebo odstraněn z vašich <strong>oblíbených</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Soubor nebo adresář byl <strong>změněn</strong> nebo <strong>přejmenován</strong>",
"A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo adresář",
"A new file or folder has been <strong>deleted</strong>" : "Nový soubor nebo adresář byl <strong>smazán</strong>",
@@ -132,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Celková velikost souboru {size1} překračuje povolenou velikost pro nahrávání {size2}",
"Error uploading file \"{fileName}\": {message}" : "Chyba nahrávání souboru \"{fileName}\": {message}",
"Could not get result from server." : "Nepodařilo se získat výsledek ze serveru.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "zbývá {hours}:{minutes}:{seconds} hour{plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "zbývá {minutes}:{seconds} minute{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} sekund{plural_s} zbývá",
+ "{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í.",
"No entries in this folder match '{filter}'" : "V tomto adresáři nic nesouhlasí s '{filter}'",
"Local link" : "Místní odkaz",
"{newname} already exists" : "{newname} již existuje",
@@ -149,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s obnovil(a) %1$s",
"Changed by %2$s" : "Změněno uživatelem %2$s",
"Deleted by %2$s" : "Smazáno uživatelem %2$s",
- "Restored by %2$s" : "Obnoveno uživatelem %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup ke svým Souborům přes WebDAV</a>",
- "Cancel upload" : "Ukončit nahrávání"
+ "Restored by %2$s" : "Obnoveno uživatelem %2$s"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json
index 8908c0175b8..27653c0d84c 100644
--- a/apps/files/l10n/cs_CZ.json
+++ b/apps/files/l10n/cs_CZ.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Úložiště je dočasně nedostupné",
"Storage invalid" : "Neplatné úložiště",
"Unknown error" : "Neznámá chyba",
- "Files" : "Soubory",
"All files" : "Všechny soubory",
"Recent" : "Nedávné",
"File could not be found" : "Soubor nelze nalézt",
@@ -17,16 +16,7 @@
"Not enough free space" : "Nedostatek volného prostoru",
"Uploading..." : "Odesílám...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "zbývá {hours}:{minutes}:{seconds} hour{plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "zbývá {minutes}:{seconds} minute{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} sekund{plural_s} zbývá",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Každou chvíli...",
- "Soon..." : "Brzy...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
- "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í.",
"Actions" : "Činnosti",
"Download" : "Stáhnout",
"Rename" : "Přejmenovat",
@@ -35,6 +25,8 @@
"Delete" : "Smazat",
"Disconnect storage" : "Odpojit úložiště",
"Unshare" : "Zrušit sdílení",
+ "Could not load info for file \"{file}\"" : "Nepodařilo se načíst informace pro soubor {file}",
+ "Files" : "Soubory",
"Details" : "Podrobnosti",
"Select" : "Vybrat",
"Pending" : "Nevyřízené",
@@ -79,7 +71,31 @@
"New folder" : "Nový adresář",
"Upload" : "Odeslat",
"An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba",
+ "Added to favorites" : "Přidán k oblíbeným",
+ "Removed from favorites" : "Odebráno z oblíbených",
+ "You added {file} to your favorites" : "Do svých oblíbených jste přidal(a) {file}",
+ "You removed {file} from your favorites" : "Odstranil(a) jste {file} ze svých oblíbených",
"File changes" : "Změny souboru",
+ "Created by {user}" : "Vytvořil {user}",
+ "Changed by {user}" : "Změnil {user}",
+ "Deleted by {user}" : "Odstranil {user}",
+ "Restored by {user}" : "Obnovil {user}",
+ "Renamed by {user}" : "Přejmenoval {user}",
+ "Moved by {user}" : "Přesunul {user}",
+ "You created {file}" : "Vytvořil(a) jste {file}",
+ "{user} created {file}" : "{user} vytvořil(a) {file}",
+ "{file} was created in a public folder" : "Soubor {file} byl vytvořen ve veřejné složce",
+ "You changed {file}" : "Změnil(a) jste {file}",
+ "{user} changed {file}" : "{user} změnil(a) {file}",
+ "You deleted {file}" : "Odstranil(a) jste {file}",
+ "{user} deleted {file}" : "{user} smazal(a) {file}",
+ "You restored {file}" : "Obnovil(a) jste {file}",
+ "{user} restored {file}" : "{user} obnovil {file}",
+ "You renamed {oldfile} to {newfile}" : "Přejmenoval(a) jste {oldfile} na {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} přejmenoval {oldfile} na {newfile}",
+ "You moved {oldfile} to {newfile}" : "{oldfile} jste přesunul(a) do {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} přesunul(a) {oldfile} do {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Soubor byl přidán, nebo odstraněn z vašich <strong>oblíbených</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Soubor nebo adresář byl <strong>změněn</strong> nebo <strong>přejmenován</strong>",
"A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo adresář",
"A new file or folder has been <strong>deleted</strong>" : "Nový soubor nebo adresář byl <strong>smazán</strong>",
@@ -130,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Celková velikost souboru {size1} překračuje povolenou velikost pro nahrávání {size2}",
"Error uploading file \"{fileName}\": {message}" : "Chyba nahrávání souboru \"{fileName}\": {message}",
"Could not get result from server." : "Nepodařilo se získat výsledek ze serveru.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "zbývá {hours}:{minutes}:{seconds} hour{plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "zbývá {minutes}:{seconds} minute{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} sekund{plural_s} zbývá",
+ "{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í.",
"No entries in this folder match '{filter}'" : "V tomto adresáři nic nesouhlasí s '{filter}'",
"Local link" : "Místní odkaz",
"{newname} already exists" : "{newname} již existuje",
@@ -147,8 +172,6 @@
"%2$s restored %1$s" : "%2$s obnovil(a) %1$s",
"Changed by %2$s" : "Změněno uživatelem %2$s",
"Deleted by %2$s" : "Smazáno uživatelem %2$s",
- "Restored by %2$s" : "Obnoveno uživatelem %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup ke svým Souborům přes WebDAV</a>",
- "Cancel upload" : "Ukončit nahrávání"
+ "Restored by %2$s" : "Obnoveno uživatelem %2$s"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index d2bffead321..257e9d7844d 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -4,9 +4,8 @@ OC.L10N.register(
"Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar",
"Storage invalid" : "Speicher ungültig",
"Unknown error" : "Unbekannter Fehler",
- "Files" : "Dateien",
"All files" : "Alle Dateien",
- "Recent" : "Akuelle",
+ "Recent" : "Aktuelle",
"File could not be found" : "Datei konnte nicht gefunden werden",
"Home" : "Home",
"Close" : "Schließen",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "Nicht genügend freier Speicherplatz",
"Uploading..." : "Hochladen…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
- "{hours}:{minutes}h" : "{hours}:{minutes} Std.",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute(n) übrig",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} Sekunden übrig",
- "{seconds}s" : "{seconds}n",
- "Any moment now..." : "Jeden Augenblick...",
- "Soon..." : "Bald...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})",
- "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.",
"Actions" : "Aktionen",
"Download" : "Herunterladen",
"Rename" : "Umbenennen",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
+ "Could not load info for file \"{file}\"" : "Die Informationen zur Datei \"{file}\" konnten nicht geladen werden",
+ "Files" : "Dateien",
"Details" : "Details",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
@@ -84,7 +76,7 @@ OC.L10N.register(
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -106,7 +98,7 @@ OC.L10N.register(
"You moved {oldfile} to {newfile}" : "Du hast {oldfile} nach {newfile} verschoben",
"{user} moved {oldfile} to {newfile}" : "{user} hat {oldfile} nach {newfile} verschoben",
"A file has been added to or removed from your <strong>favorites</strong>" : "Eine Datei wurde deinen <strong>Favoriten</strong> hinzugefügt oder daraus entfernt",
- "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurden <strong>geändert</strong> oder <strong>umbenannt</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei / Ordner wurde <strong>geändert</strong> oder <strong>umbenannt</strong>",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Neue Datei oder Verzeichnis wurde <strong>gelöscht</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
@@ -156,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Die Gesamt-Größe {size1} überschreitet die Upload-Begrenzung {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fehler beim Hochladen der Datei \"{fileName}\": {message}",
"Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
+ "{hours}:{minutes}h" : "{hours}:{minutes} Std.",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute(n) übrig",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} Sekunden übrig",
+ "{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.",
"No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein",
"Local link" : "Lokaler Link",
"{newname} already exists" : "{newname} existiert bereits",
@@ -173,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s wiederhergestellt %1$s",
"Changed by %2$s" : "Geändert von %2$s",
"Deleted by %2$s" : "Gelöscht von %2$s",
- "Restored by %2$s" : "Wiederhergestellt von %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf deine Dateien zuzugreifen</a>",
- "Cancel upload" : "Hochladen abbrechen"
+ "Restored by %2$s" : "Wiederhergestellt von %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index d012d33f352..29809c70bd4 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -2,9 +2,8 @@
"Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar",
"Storage invalid" : "Speicher ungültig",
"Unknown error" : "Unbekannter Fehler",
- "Files" : "Dateien",
"All files" : "Alle Dateien",
- "Recent" : "Akuelle",
+ "Recent" : "Aktuelle",
"File could not be found" : "Datei konnte nicht gefunden werden",
"Home" : "Home",
"Close" : "Schließen",
@@ -17,16 +16,7 @@
"Not enough free space" : "Nicht genügend freier Speicherplatz",
"Uploading..." : "Hochladen…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
- "{hours}:{minutes}h" : "{hours}:{minutes} Std.",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute(n) übrig",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} Sekunden übrig",
- "{seconds}s" : "{seconds}n",
- "Any moment now..." : "Jeden Augenblick...",
- "Soon..." : "Bald...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})",
- "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.",
"Actions" : "Aktionen",
"Download" : "Herunterladen",
"Rename" : "Umbenennen",
@@ -35,6 +25,8 @@
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
+ "Could not load info for file \"{file}\"" : "Die Informationen zur Datei \"{file}\" konnten nicht geladen werden",
+ "Files" : "Dateien",
"Details" : "Details",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
@@ -82,7 +74,7 @@
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -104,7 +96,7 @@
"You moved {oldfile} to {newfile}" : "Du hast {oldfile} nach {newfile} verschoben",
"{user} moved {oldfile} to {newfile}" : "{user} hat {oldfile} nach {newfile} verschoben",
"A file has been added to or removed from your <strong>favorites</strong>" : "Eine Datei wurde deinen <strong>Favoriten</strong> hinzugefügt oder daraus entfernt",
- "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurden <strong>geändert</strong> oder <strong>umbenannt</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei / Ordner wurde <strong>geändert</strong> oder <strong>umbenannt</strong>",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Neue Datei oder Verzeichnis wurde <strong>gelöscht</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
@@ -154,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Die Gesamt-Größe {size1} überschreitet die Upload-Begrenzung {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fehler beim Hochladen der Datei \"{fileName}\": {message}",
"Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
+ "{hours}:{minutes}h" : "{hours}:{minutes} Std.",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute(n) übrig",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} Sekunden übrig",
+ "{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.",
"No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein",
"Local link" : "Lokaler Link",
"{newname} already exists" : "{newname} existiert bereits",
@@ -171,8 +172,6 @@
"%2$s restored %1$s" : "%2$s wiederhergestellt %1$s",
"Changed by %2$s" : "Geändert von %2$s",
"Deleted by %2$s" : "Gelöscht von %2$s",
- "Restored by %2$s" : "Wiederhergestellt von %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf deine Dateien zuzugreifen</a>",
- "Cancel upload" : "Hochladen abbrechen"
+ "Restored by %2$s" : "Wiederhergestellt von %2$s"
},"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 42eaeb46600..8b0521a4f8c 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar",
"Storage invalid" : "Speicher ungültig",
"Unknown error" : "Unbekannter Fehler",
- "Files" : "Dateien",
"All files" : "Alle Dateien",
"Recent" : "Aktuelle",
"File could not be found" : "Datei konnte nicht gefunden werden",
@@ -19,24 +18,17 @@ OC.L10N.register(
"Not enough free space" : "Nicht genug freier Speicher",
"Uploading..." : "Hochladen…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minuten übrig",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} Sekunden übrig",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Jeden Augenblick...",
- "Soon..." : "Bald...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})",
- "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.",
"Actions" : "Aktionen",
"Download" : "Herunterladen",
"Rename" : "Umbenennen",
"Move" : "Verschieben",
- "Target folder" : "Zielverzeichnis",
+ "Target folder" : "Zielordner",
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
+ "Could not load info for file \"{file}\"" : "Die Informationen zur Datei \"{file}\" konnten nicht geladen werden",
+ "Files" : "Dateien",
"Details" : "Details",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
@@ -60,7 +52,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["%n Ordner","%n Ordner"],
"_%n file_::_%n files_" : ["%n Datei","%n Dateien"],
"{dirs} and {files}" : "{dirs} und {files}",
- "_including %n hidden_::_including %n hidden_" : ["%n versteckten eingeschlossen","%n versteckten eingeschlossen"],
+ "_including %n hidden_::_including %n hidden_" : ["%n versteckte eingeschlossen","%n versteckten eingeschlossen"],
"You don’t have permission to upload or create files here" : "Sie haben keine Berechtigung, hier Dateien hochzuladen oder zu erstellen",
"_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hoch geladen","%n Dateien werden hoch geladen"],
"New" : "Neu",
@@ -76,7 +68,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Favorited" : "Favorisiert",
"Favorite" : "Favorit",
- "Copy local link" : "Kopiere lokale Verknüpfung",
+ "Copy local link" : "Lokalen Link kopieren",
"Folder" : "Ordner",
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
@@ -84,7 +76,7 @@ OC.L10N.register(
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -94,7 +86,7 @@ OC.L10N.register(
"Moved by {user}" : "Verschoben durch {user}",
"You created {file}" : "Sie haben {file} erstellt",
"{user} created {file}" : "{user} hat {file} erstellt",
- "{file} was created in a public folder" : "{file} wurde in einem öffentlichen Verzeichnis erstellt",
+ "{file} was created in a public folder" : "{file} wurde in einem öffentlichen Ordner erstellt",
"You changed {file}" : "Sie haben {file} geändert",
"{user} changed {file}" : "{user} hat {file} geändert",
"You deleted {file}" : "Sie haben {file} gelöscht",
@@ -104,13 +96,13 @@ OC.L10N.register(
"You renamed {oldfile} to {newfile}" : "Sie haben {oldfile} in {newfile} umbenannt",
"{user} renamed {oldfile} to {newfile}" : "{user} hat {oldfile} in {newfile} umbenannt",
"You moved {oldfile} to {newfile}" : "Sie haben {oldfile} nach {newfile} verschoben",
- "{user} moved {oldfile} to {newfile}" : "{user} hat{oldfile} nach {newfile} verschoben",
+ "{user} moved {oldfile} to {newfile}" : "{user} hat {oldfile} nach {newfile} verschoben",
"A file has been added to or removed from your <strong>favorites</strong>" : "Eine Datei wurde Ihren <strong>Favoriten</strong> hinzugefügt oder daraus entfernt",
- "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurden <strong>geändert</strong> oder <strong>umbenannt</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurde <strong>geändert</strong> oder <strong>umbenannt</strong>",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
- "A new file or folder has been <strong>deleted</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>gelöscht</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "Eine neue Datei oder Ordner wurde <strong>gelöscht</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen zu Ihren <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
- "A new file or folder has been <strong>restored</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>wiederhergestellt</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "Eine neue Datei oder Ordner wurde <strong>wiederhergestellt</strong>",
"Upload (max. %s)" : "Hochladen (max. %s)",
"File handling" : "Dateibehandlung",
"Maximum upload size" : "Maximale Upload-Größe",
@@ -156,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Die Gesamt-Größe {size1} überschreitet die Upload-Begrenzung {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fehler beim Hochladen der Datei \"{fileName}\": {message}",
"Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minuten übrig",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} Sekunden übrig",
+ "{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.",
"No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein",
"Local link" : "Lokaler Link",
"{newname} already exists" : "{newname} existiert bereits",
@@ -173,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s hat %1$s wiederhergestellt ",
"Changed by %2$s" : "Geändert von %2$s",
"Deleted by %2$s" : "Gelöscht von %2$s",
- "Restored by %2$s" : "Wiederhergestellt von %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">via WebDAV auf deine Dateien zuzugreifen</a>",
- "Cancel upload" : "Hochladen abbrechen"
+ "Restored by %2$s" : "Wiederhergestellt von %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 10ecffbb1aa..5a54978e41b 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar",
"Storage invalid" : "Speicher ungültig",
"Unknown error" : "Unbekannter Fehler",
- "Files" : "Dateien",
"All files" : "Alle Dateien",
"Recent" : "Aktuelle",
"File could not be found" : "Datei konnte nicht gefunden werden",
@@ -17,24 +16,17 @@
"Not enough free space" : "Nicht genug freier Speicher",
"Uploading..." : "Hochladen…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minuten übrig",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} Sekunden übrig",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Jeden Augenblick...",
- "Soon..." : "Bald...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})",
- "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.",
"Actions" : "Aktionen",
"Download" : "Herunterladen",
"Rename" : "Umbenennen",
"Move" : "Verschieben",
- "Target folder" : "Zielverzeichnis",
+ "Target folder" : "Zielordner",
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
+ "Could not load info for file \"{file}\"" : "Die Informationen zur Datei \"{file}\" konnten nicht geladen werden",
+ "Files" : "Dateien",
"Details" : "Details",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
@@ -58,7 +50,7 @@
"_%n folder_::_%n folders_" : ["%n Ordner","%n Ordner"],
"_%n file_::_%n files_" : ["%n Datei","%n Dateien"],
"{dirs} and {files}" : "{dirs} und {files}",
- "_including %n hidden_::_including %n hidden_" : ["%n versteckten eingeschlossen","%n versteckten eingeschlossen"],
+ "_including %n hidden_::_including %n hidden_" : ["%n versteckte eingeschlossen","%n versteckten eingeschlossen"],
"You don’t have permission to upload or create files here" : "Sie haben keine Berechtigung, hier Dateien hochzuladen oder zu erstellen",
"_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hoch geladen","%n Dateien werden hoch geladen"],
"New" : "Neu",
@@ -74,7 +66,7 @@
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Favorited" : "Favorisiert",
"Favorite" : "Favorit",
- "Copy local link" : "Kopiere lokale Verknüpfung",
+ "Copy local link" : "Lokalen Link kopieren",
"Folder" : "Ordner",
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
@@ -82,7 +74,7 @@
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
@@ -92,7 +84,7 @@
"Moved by {user}" : "Verschoben durch {user}",
"You created {file}" : "Sie haben {file} erstellt",
"{user} created {file}" : "{user} hat {file} erstellt",
- "{file} was created in a public folder" : "{file} wurde in einem öffentlichen Verzeichnis erstellt",
+ "{file} was created in a public folder" : "{file} wurde in einem öffentlichen Ordner erstellt",
"You changed {file}" : "Sie haben {file} geändert",
"{user} changed {file}" : "{user} hat {file} geändert",
"You deleted {file}" : "Sie haben {file} gelöscht",
@@ -102,13 +94,13 @@
"You renamed {oldfile} to {newfile}" : "Sie haben {oldfile} in {newfile} umbenannt",
"{user} renamed {oldfile} to {newfile}" : "{user} hat {oldfile} in {newfile} umbenannt",
"You moved {oldfile} to {newfile}" : "Sie haben {oldfile} nach {newfile} verschoben",
- "{user} moved {oldfile} to {newfile}" : "{user} hat{oldfile} nach {newfile} verschoben",
+ "{user} moved {oldfile} to {newfile}" : "{user} hat {oldfile} nach {newfile} verschoben",
"A file has been added to or removed from your <strong>favorites</strong>" : "Eine Datei wurde Ihren <strong>Favoriten</strong> hinzugefügt oder daraus entfernt",
- "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurden <strong>geändert</strong> oder <strong>umbenannt</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eine Datei oder Ordner wurde <strong>geändert</strong> oder <strong>umbenannt</strong>",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
- "A new file or folder has been <strong>deleted</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>gelöscht</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "Eine neue Datei oder Ordner wurde <strong>gelöscht</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen zu Ihren <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
- "A new file or folder has been <strong>restored</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>wiederhergestellt</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "Eine neue Datei oder Ordner wurde <strong>wiederhergestellt</strong>",
"Upload (max. %s)" : "Hochladen (max. %s)",
"File handling" : "Dateibehandlung",
"Maximum upload size" : "Maximale Upload-Größe",
@@ -154,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Die Gesamt-Größe {size1} überschreitet die Upload-Begrenzung {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fehler beim Hochladen der Datei \"{fileName}\": {message}",
"Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minuten übrig",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} Sekunden übrig",
+ "{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.",
"No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein",
"Local link" : "Lokaler Link",
"{newname} already exists" : "{newname} existiert bereits",
@@ -171,8 +172,6 @@
"%2$s restored %1$s" : "%2$s hat %1$s wiederhergestellt ",
"Changed by %2$s" : "Geändert von %2$s",
"Deleted by %2$s" : "Gelöscht von %2$s",
- "Restored by %2$s" : "Wiederhergestellt von %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">via WebDAV auf deine Dateien zuzugreifen</a>",
- "Cancel upload" : "Hochladen abbrechen"
+ "Restored by %2$s" : "Wiederhergestellt von %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index e9f493c869a..da2fb2398e4 100644
--- a/apps/files/l10n/el.js
+++ b/apps/files/l10n/el.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "Μη διαθέσιμος χώρος αποθήκευσης προσωρινά",
"Storage invalid" : "Μη έγκυρος αποθηκευτικός χώρος",
"Unknown error" : "Άγνωστο σφάλμα",
- "Files" : "Αρχεία",
"All files" : "Όλα τα αρχεία",
"Recent" : "Τελευταία",
"File could not be found" : "Δεν μπορεί να βρεθεί το αρχείο",
@@ -17,13 +17,14 @@ OC.L10N.register(
"Not enough free space" : "Δεν υπάρχει αρκετός ελεύθερος χώρος.",
"Uploading..." : "Μεταφόρτωση...",
"..." : "...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.",
"Actions" : "Ενέργειες",
"Download" : "Λήψη",
"Rename" : "Μετονομασία",
+ "Move" : "Μετακίνηση",
"Delete" : "Διαγραφή",
"Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος",
"Unshare" : "Διακοπή διαμοιρασμού",
+ "Files" : "Αρχεία",
"Details" : "Λεπτομέρειες",
"Select" : "Επιλογή",
"Pending" : "Εκκρεμεί",
@@ -57,27 +58,20 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Προτιμώμενα",
"Favorite" : "Αγαπημένο",
- "Local link" : "Τοπικός σύνδεσμος",
+ "Copy local link" : "Αντιγραφή τοπικού συνδέσμου",
"Folder" : "Φάκελος",
"New folder" : "Νέος φάκελος",
"Upload" : "Μεταφόρτωση",
"An error occurred while trying to update the tags" : "Ένα σφάλμα προέκυψε κατά τη διάρκεια ενημέρωσης των ετικετών",
+ "Added to favorites" : "Προσθήκη στα αγαπημένα",
+ "Removed from favorites" : "Αφαίρεση από τα αγαπημένα",
+ "File changes" : "Αλλαγές αρχείου",
+ "Created by {user}" : "Δημιουργήθηκε από τον/την {user}",
+ "You deleted {file}" : "Διαγράψτε το {file}",
+ "{user} deleted {file}" : "ο {user} διέγραψε το {file}",
"A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "Ένα νέο αρχείο ή φάκελος έχει <strong>διαγραφεί</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Βάλτε όριο στις ειδοποιήσεις για τη δημιουργία και αλλαγές στα <strong>αγαπημένα σας αρχεία</strong> <em>(Μόνο Stream)</em>",
- "A file or folder has been <strong>deleted</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>διαγραφεί</strong>",
- "A file or folder has been <strong>restored</strong>" : "Ένα αρχείο ή φάκελος <strong>επαναφέρθηκε</ strong>",
- "You created %1$s" : "Δημιουργήσατε το %1$s",
- "%2$s created %1$s" : "Ο χρήστης %2$s δημιούργησε το %1$s",
- "%1$s was created in a public folder" : "Το %1$s δημιουργήθηκε σε έναν δημόσιο φάκελο",
- "You changed %1$s" : "Αλλάξατε το %1$s",
- "%2$s changed %1$s" : "Ο χρήστης %2$s άλλαξε το %1$s",
- "You deleted %1$s" : "Διαγράψατε το %1$s",
- "%2$s deleted %1$s" : "Ο χρήστης %2$s διέγραψε το %1$s",
- "You restored %1$s" : "Επαναφέρατε το %1$s",
- "%2$s restored %1$s" : "Ο χρήστης %2$s επανέφερε το %1$s",
- "Changed by %2$s" : "Άλλαξε από το χρήστη %2$s",
- "Deleted by %2$s" : "Διαγράφηκε από το χρήστη %2$s",
- "Restored by %2$s" : "Επαναφορά από το χρήστη %2$s",
"Upload (max. %s)" : "Διαμοιρασμός (max. %s)",
"File handling" : "Διαχείριση αρχείων",
"Maximum upload size" : "Μέγιστο μέγεθος αποστολής",
@@ -88,6 +82,7 @@ OC.L10N.register(
"Settings" : "Ρυθμίσεις",
"Show hidden files" : "Προβολή κρυφών αρχείων",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Χρησιμοποιήστε αυτή τη διεύθυνση για να έχετε <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">πρόσβαση στα Αρχεία σας μέσω WebDAV</a>",
"No files in here" : "Δεν υπάρχουν αρχεία",
"Upload some content or sync with your devices!" : "Μεταφόρτωση περιεχομένου ή συγχρονισμός με τις συσκευές σας!",
"No entries found in this folder" : "Δεν βρέθηκαν καταχωρήσεις σε αυτόν το φάκελο",
@@ -96,6 +91,11 @@ OC.L10N.register(
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν τον διακομιστή.",
"No favorites" : "Δεν υπάρχουν αγαπημένα",
"Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ ",
+ "Shared with you" : "Διαμοιρασμένα με εσάς",
+ "Shared with others" : "Διαμοιρασμένα με άλλους",
+ "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου",
+ "Tags" : "Ετικέτες",
+ "Deleted files" : "Διεγραμμένα αρχεία",
"Text file" : "Αρχείο κειμένου",
"New text file.txt" : "Νέο αρχείο κειμένου.txt",
"Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος",
@@ -116,9 +116,25 @@ OC.L10N.register(
"Invalid directory." : "Μη έγκυρος φάκελος.",
"Total file size {size1} exceeds upload limit {size2}" : "Το συνολικό μέγεθος αρχείου {size1} υπερβαίνει το όριο μεταφόρτωσης {size2}",
"Could not get result from server." : "Αδυναμία λήψης αποτελέσματος από το διακομιστή.",
+ "Soon..." : "Σύντομα...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.",
"No entries in this folder match '{filter}'" : "Δεν ταιριάζουν καταχωρήσεις σε αυτόν το φάκελο '{filter}'",
+ "Local link" : "Τοπικός σύνδεσμος",
"{newname} already exists" : "το {newname} υπάρχει ήδη",
"A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>",
- "Cancel upload" : "Ακύρωση αποστολής"
+ "A file or folder has been <strong>deleted</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>διαγραφεί</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Ένα αρχείο ή φάκελος <strong>επαναφέρθηκε</ strong>",
+ "You created %1$s" : "Δημιουργήσατε το %1$s",
+ "%2$s created %1$s" : "Ο χρήστης %2$s δημιούργησε το %1$s",
+ "%1$s was created in a public folder" : "Το %1$s δημιουργήθηκε σε έναν δημόσιο φάκελο",
+ "You changed %1$s" : "Αλλάξατε το %1$s",
+ "%2$s changed %1$s" : "Ο χρήστης %2$s άλλαξε το %1$s",
+ "You deleted %1$s" : "Διαγράψατε το %1$s",
+ "%2$s deleted %1$s" : "Ο χρήστης %2$s διέγραψε το %1$s",
+ "You restored %1$s" : "Επαναφέρατε το %1$s",
+ "%2$s restored %1$s" : "Ο χρήστης %2$s επανέφερε το %1$s",
+ "Changed by %2$s" : "Άλλαξε από το χρήστη %2$s",
+ "Deleted by %2$s" : "Διαγράφηκε από το χρήστη %2$s",
+ "Restored by %2$s" : "Επαναφορά από το χρήστη %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json
index 0cc22446e91..a4421b819fa 100644
--- a/apps/files/l10n/el.json
+++ b/apps/files/l10n/el.json
@@ -1,7 +1,7 @@
{ "translations": {
+ "Storage is temporarily not available" : "Μη διαθέσιμος χώρος αποθήκευσης προσωρινά",
"Storage invalid" : "Μη έγκυρος αποθηκευτικός χώρος",
"Unknown error" : "Άγνωστο σφάλμα",
- "Files" : "Αρχεία",
"All files" : "Όλα τα αρχεία",
"Recent" : "Τελευταία",
"File could not be found" : "Δεν μπορεί να βρεθεί το αρχείο",
@@ -15,13 +15,14 @@
"Not enough free space" : "Δεν υπάρχει αρκετός ελεύθερος χώρος.",
"Uploading..." : "Μεταφόρτωση...",
"..." : "...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.",
"Actions" : "Ενέργειες",
"Download" : "Λήψη",
"Rename" : "Μετονομασία",
+ "Move" : "Μετακίνηση",
"Delete" : "Διαγραφή",
"Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος",
"Unshare" : "Διακοπή διαμοιρασμού",
+ "Files" : "Αρχεία",
"Details" : "Λεπτομέρειες",
"Select" : "Επιλογή",
"Pending" : "Εκκρεμεί",
@@ -55,27 +56,20 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Προτιμώμενα",
"Favorite" : "Αγαπημένο",
- "Local link" : "Τοπικός σύνδεσμος",
+ "Copy local link" : "Αντιγραφή τοπικού συνδέσμου",
"Folder" : "Φάκελος",
"New folder" : "Νέος φάκελος",
"Upload" : "Μεταφόρτωση",
"An error occurred while trying to update the tags" : "Ένα σφάλμα προέκυψε κατά τη διάρκεια ενημέρωσης των ετικετών",
+ "Added to favorites" : "Προσθήκη στα αγαπημένα",
+ "Removed from favorites" : "Αφαίρεση από τα αγαπημένα",
+ "File changes" : "Αλλαγές αρχείου",
+ "Created by {user}" : "Δημιουργήθηκε από τον/την {user}",
+ "You deleted {file}" : "Διαγράψτε το {file}",
+ "{user} deleted {file}" : "ο {user} διέγραψε το {file}",
"A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "Ένα νέο αρχείο ή φάκελος έχει <strong>διαγραφεί</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Βάλτε όριο στις ειδοποιήσεις για τη δημιουργία και αλλαγές στα <strong>αγαπημένα σας αρχεία</strong> <em>(Μόνο Stream)</em>",
- "A file or folder has been <strong>deleted</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>διαγραφεί</strong>",
- "A file or folder has been <strong>restored</strong>" : "Ένα αρχείο ή φάκελος <strong>επαναφέρθηκε</ strong>",
- "You created %1$s" : "Δημιουργήσατε το %1$s",
- "%2$s created %1$s" : "Ο χρήστης %2$s δημιούργησε το %1$s",
- "%1$s was created in a public folder" : "Το %1$s δημιουργήθηκε σε έναν δημόσιο φάκελο",
- "You changed %1$s" : "Αλλάξατε το %1$s",
- "%2$s changed %1$s" : "Ο χρήστης %2$s άλλαξε το %1$s",
- "You deleted %1$s" : "Διαγράψατε το %1$s",
- "%2$s deleted %1$s" : "Ο χρήστης %2$s διέγραψε το %1$s",
- "You restored %1$s" : "Επαναφέρατε το %1$s",
- "%2$s restored %1$s" : "Ο χρήστης %2$s επανέφερε το %1$s",
- "Changed by %2$s" : "Άλλαξε από το χρήστη %2$s",
- "Deleted by %2$s" : "Διαγράφηκε από το χρήστη %2$s",
- "Restored by %2$s" : "Επαναφορά από το χρήστη %2$s",
"Upload (max. %s)" : "Διαμοιρασμός (max. %s)",
"File handling" : "Διαχείριση αρχείων",
"Maximum upload size" : "Μέγιστο μέγεθος αποστολής",
@@ -86,6 +80,7 @@
"Settings" : "Ρυθμίσεις",
"Show hidden files" : "Προβολή κρυφών αρχείων",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Χρησιμοποιήστε αυτή τη διεύθυνση για να έχετε <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">πρόσβαση στα Αρχεία σας μέσω WebDAV</a>",
"No files in here" : "Δεν υπάρχουν αρχεία",
"Upload some content or sync with your devices!" : "Μεταφόρτωση περιεχομένου ή συγχρονισμός με τις συσκευές σας!",
"No entries found in this folder" : "Δεν βρέθηκαν καταχωρήσεις σε αυτόν το φάκελο",
@@ -94,6 +89,11 @@
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν τον διακομιστή.",
"No favorites" : "Δεν υπάρχουν αγαπημένα",
"Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ ",
+ "Shared with you" : "Διαμοιρασμένα με εσάς",
+ "Shared with others" : "Διαμοιρασμένα με άλλους",
+ "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου",
+ "Tags" : "Ετικέτες",
+ "Deleted files" : "Διεγραμμένα αρχεία",
"Text file" : "Αρχείο κειμένου",
"New text file.txt" : "Νέο αρχείο κειμένου.txt",
"Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος",
@@ -114,9 +114,25 @@
"Invalid directory." : "Μη έγκυρος φάκελος.",
"Total file size {size1} exceeds upload limit {size2}" : "Το συνολικό μέγεθος αρχείου {size1} υπερβαίνει το όριο μεταφόρτωσης {size2}",
"Could not get result from server." : "Αδυναμία λήψης αποτελέσματος από το διακομιστή.",
+ "Soon..." : "Σύντομα...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.",
"No entries in this folder match '{filter}'" : "Δεν ταιριάζουν καταχωρήσεις σε αυτόν το φάκελο '{filter}'",
+ "Local link" : "Τοπικός σύνδεσμος",
"{newname} already exists" : "το {newname} υπάρχει ήδη",
"A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>",
- "Cancel upload" : "Ακύρωση αποστολής"
+ "A file or folder has been <strong>deleted</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>διαγραφεί</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Ένα αρχείο ή φάκελος <strong>επαναφέρθηκε</ strong>",
+ "You created %1$s" : "Δημιουργήσατε το %1$s",
+ "%2$s created %1$s" : "Ο χρήστης %2$s δημιούργησε το %1$s",
+ "%1$s was created in a public folder" : "Το %1$s δημιουργήθηκε σε έναν δημόσιο φάκελο",
+ "You changed %1$s" : "Αλλάξατε το %1$s",
+ "%2$s changed %1$s" : "Ο χρήστης %2$s άλλαξε το %1$s",
+ "You deleted %1$s" : "Διαγράψατε το %1$s",
+ "%2$s deleted %1$s" : "Ο χρήστης %2$s διέγραψε το %1$s",
+ "You restored %1$s" : "Επαναφέρατε το %1$s",
+ "%2$s restored %1$s" : "Ο χρήστης %2$s επανέφερε το %1$s",
+ "Changed by %2$s" : "Άλλαξε από το χρήστη %2$s",
+ "Deleted by %2$s" : "Διαγράφηκε από το χρήστη %2$s",
+ "Restored by %2$s" : "Επαναφορά από το χρήστη %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js
index 139e56ad170..7feab942842 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Storage invalid" : "Storage invalid",
"Unknown error" : "Unknown error",
- "Files" : "Files",
"All files" : "All files",
"File could not be found" : "File could not be found",
"Home" : "Home",
@@ -15,22 +14,14 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Not enough free space, you are uploading {size1} but only {size2} is left",
"Uploading..." : "Uploading...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} left",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} second{plural_s} left",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Any moment now...",
- "Soon..." : "Soon...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})",
- "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.",
"Actions" : "Actions",
"Download" : "Download",
"Rename" : "Rename",
"Delete" : "Delete",
"Disconnect storage" : "Disconnect storage",
"Unshare" : "Unshare",
+ "Files" : "Files",
"Details" : "Details",
"Select" : "Select",
"Pending" : "Pending",
@@ -114,6 +105,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Total file size {size1} exceeds upload limit {size2}",
"Error uploading file \"{fileName}\": {message}" : "Error uploading file \"{fileName}\": {message}",
"Could not get result from server." : "Could not get result from server.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} left",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} second{plural_s} left",
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "Any moment now...",
+ "Soon..." : "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.",
"No entries in this folder match '{filter}'" : "No entries in this folder match '{filter}'",
"Local link" : "Local link",
"{newname} already exists" : "{newname} already exists",
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index e2b0b07d56a..1187441344f 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -1,7 +1,6 @@
{ "translations": {
"Storage invalid" : "Storage invalid",
"Unknown error" : "Unknown error",
- "Files" : "Files",
"All files" : "All files",
"File could not be found" : "File could not be found",
"Home" : "Home",
@@ -13,22 +12,14 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Not enough free space, you are uploading {size1} but only {size2} is left",
"Uploading..." : "Uploading...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} left",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} second{plural_s} left",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Any moment now...",
- "Soon..." : "Soon...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})",
- "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.",
"Actions" : "Actions",
"Download" : "Download",
"Rename" : "Rename",
"Delete" : "Delete",
"Disconnect storage" : "Disconnect storage",
"Unshare" : "Unshare",
+ "Files" : "Files",
"Details" : "Details",
"Select" : "Select",
"Pending" : "Pending",
@@ -112,6 +103,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Total file size {size1} exceeds upload limit {size2}",
"Error uploading file \"{fileName}\": {message}" : "Error uploading file \"{fileName}\": {message}",
"Could not get result from server." : "Could not get result from server.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} left",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} second{plural_s} left",
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "Any moment now...",
+ "Soon..." : "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.",
"No entries in this folder match '{filter}'" : "No entries in this folder match '{filter}'",
"Local link" : "Local link",
"{newname} already exists" : "{newname} already exists",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index bf3885b7d96..db230990a5e 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "El almacenamiento no esta disponible temporalmente",
"Storage invalid" : "Almacenamiento inválido",
"Unknown error" : "Error desconocido",
- "Files" : "Archivos",
"All files" : "Todos los archivos",
"Recent" : "Reciente",
"File could not be found" : "El archivo no se ha encontrado",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "No hay espacio libre suficiente",
"Uploading..." : "Subiendo...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hora{plural_s} pendiente",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuto{plural_s} pendiente",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} segundo{plural_s} pendiente",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "En cualquier momento...",
- "Soon..." : "Dentro de poco...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
- "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.",
"Actions" : "Acciones",
"Download" : "Descargar",
"Rename" : "Renombrar",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar almacenamiento",
"Unshare" : "Dejar de compartir",
+ "Could not load info for file \"{file}\"" : "No se pudo cargar información para el archivo \"{file}\"",
+ "Files" : "Archivos",
"Details" : "Detalles",
"Select" : "Seleccionar",
"Pending" : "Pendiente",
@@ -81,6 +73,10 @@ OC.L10N.register(
"New folder" : "Nueva carpeta",
"Upload" : "Subir",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
+ "Added to favorites" : "Agregado a favoritos",
+ "Removed from favorites" : "Borrado de favoritos",
+ "You added {file} to your favorites" : "Agregado {file} a tus favoritos",
+ "You removed {file} from your favorites" : "Borrado {file} de tus favoritos",
"File changes" : "Cambios del archivo",
"Created by {user}" : "Creado por {user}",
"Changed by {user}" : "Cambiado por {user}",
@@ -101,6 +97,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} ha renombrado {oldfile } como {newfile}",
"You moved {oldfile} to {newfile}" : "Ha movido {oldfile } a {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo fue agregado o borrado de tus <strong>favoritos</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado</strong> o <strong>renombrado</strong>.",
"A new file or folder has been <strong>created</strong>" : "Se ha <strong>creado</strong> un nuevo archivo o carpeta",
"A new file or folder has been <strong>deleted</strong>" : "Un nuevo archivo o carpeta ha sido <strong>eliminado</strong>.",
@@ -151,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "El tamaño total del archivo {size1} excede el límite {size2}",
"Error uploading file \"{fileName}\": {message}" : "Error subiendo el archivo \"{fileName}\": {message}",
"Could not get result from server." : "No se pudo obtener respuesta del servidor.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hora{plural_s} pendiente",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuto{plural_s} pendiente",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} segundo{plural_s} pendiente",
+ "{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.",
"No entries in this folder match '{filter}'" : "No hay resultados que coincidan con '{filter}'",
"Local link" : "Enlace local",
"{newname} already exists" : "{newname} ya existe",
@@ -168,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s recuperó %1$s",
"Changed by %2$s" : "Cambiado por %2$s",
"Deleted by %2$s" : "Eliminado por %2$s",
- "Restored by %2$s" : "Restaurado por %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta direccioń para <a href=\"%s\" target=\"_blank\">acceder a sus archivos vía WebDAV<a>",
- "Cancel upload" : "Cancelar la subida"
+ "Restored by %2$s" : "Restaurado por %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index c3a48182939..a2099073e0b 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "El almacenamiento no esta disponible temporalmente",
"Storage invalid" : "Almacenamiento inválido",
"Unknown error" : "Error desconocido",
- "Files" : "Archivos",
"All files" : "Todos los archivos",
"Recent" : "Reciente",
"File could not be found" : "El archivo no se ha encontrado",
@@ -17,16 +16,7 @@
"Not enough free space" : "No hay espacio libre suficiente",
"Uploading..." : "Subiendo...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hora{plural_s} pendiente",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuto{plural_s} pendiente",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} segundo{plural_s} pendiente",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "En cualquier momento...",
- "Soon..." : "Dentro de poco...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
- "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.",
"Actions" : "Acciones",
"Download" : "Descargar",
"Rename" : "Renombrar",
@@ -35,6 +25,8 @@
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar almacenamiento",
"Unshare" : "Dejar de compartir",
+ "Could not load info for file \"{file}\"" : "No se pudo cargar información para el archivo \"{file}\"",
+ "Files" : "Archivos",
"Details" : "Detalles",
"Select" : "Seleccionar",
"Pending" : "Pendiente",
@@ -79,6 +71,10 @@
"New folder" : "Nueva carpeta",
"Upload" : "Subir",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
+ "Added to favorites" : "Agregado a favoritos",
+ "Removed from favorites" : "Borrado de favoritos",
+ "You added {file} to your favorites" : "Agregado {file} a tus favoritos",
+ "You removed {file} from your favorites" : "Borrado {file} de tus favoritos",
"File changes" : "Cambios del archivo",
"Created by {user}" : "Creado por {user}",
"Changed by {user}" : "Cambiado por {user}",
@@ -99,6 +95,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} ha renombrado {oldfile } como {newfile}",
"You moved {oldfile} to {newfile}" : "Ha movido {oldfile } a {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo fue agregado o borrado de tus <strong>favoritos</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado</strong> o <strong>renombrado</strong>.",
"A new file or folder has been <strong>created</strong>" : "Se ha <strong>creado</strong> un nuevo archivo o carpeta",
"A new file or folder has been <strong>deleted</strong>" : "Un nuevo archivo o carpeta ha sido <strong>eliminado</strong>.",
@@ -149,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "El tamaño total del archivo {size1} excede el límite {size2}",
"Error uploading file \"{fileName}\": {message}" : "Error subiendo el archivo \"{fileName}\": {message}",
"Could not get result from server." : "No se pudo obtener respuesta del servidor.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hora{plural_s} pendiente",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuto{plural_s} pendiente",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} segundo{plural_s} pendiente",
+ "{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.",
"No entries in this folder match '{filter}'" : "No hay resultados que coincidan con '{filter}'",
"Local link" : "Enlace local",
"{newname} already exists" : "{newname} ya existe",
@@ -166,8 +172,6 @@
"%2$s restored %1$s" : "%2$s recuperó %1$s",
"Changed by %2$s" : "Cambiado por %2$s",
"Deleted by %2$s" : "Eliminado por %2$s",
- "Restored by %2$s" : "Restaurado por %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta direccioń para <a href=\"%s\" target=\"_blank\">acceder a sus archivos vía WebDAV<a>",
- "Cancel upload" : "Cancelar la subida"
+ "Restored by %2$s" : "Restaurado por %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js
index 3f476cf7ffd..e5deef567a8 100644
--- a/apps/files/l10n/fi_FI.js
+++ b/apps/files/l10n/fi_FI.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Storage invalid" : "Virheellinen tallennustila",
"Unknown error" : "Tuntematon virhe",
- "Files" : "Tiedostot",
"All files" : "Kaikki tiedostot",
"Recent" : "Viimeaikaiset",
"File could not be found" : "TIedostoa ei löytynyt",
@@ -16,22 +15,14 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ei riittävästi vapaata tilaa. Lähetyksesi koko on {size1}, mutta vain {size2} on jäljellä",
"Uploading..." : "Lähetetään...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} jäljellä",
- "{hours}:{minutes}h" : "{hours}h {minutes}m",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}m {seconds}s jäljellä",
- "{minutes}:{seconds}m" : "{minutes}m {seconds}s",
- "{seconds} second{plural_s} left" : "{seconds}s jäljellä",
- "{seconds}s" : "{seconds} s",
- "Any moment now..." : "Minä tahansa hetkenä...",
- "Soon..." : "Pian...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{totalSize} ({bitrate})",
- "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.",
"Actions" : "Toiminnot",
"Download" : "Lataa",
"Rename" : "Nimeä uudelleen",
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
+ "Files" : "Tiedostot",
"Details" : "Tiedot",
"Select" : "Valitse",
"Pending" : "Odottaa",
@@ -116,6 +107,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Yhteiskoko {size1} ylittää lähetysrajan {size2}",
"Error uploading file \"{fileName}\": {message}" : "Virhe lähettäessä tiedostoa \"{fileName}\": {message}",
"Could not get result from server." : "Tuloksien saaminen palvelimelta ei onnistunut.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} jäljellä",
+ "{hours}:{minutes}h" : "{hours}h {minutes}m",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}m {seconds}s jäljellä",
+ "{minutes}:{seconds}m" : "{minutes}m {seconds}s",
+ "{seconds} second{plural_s} left" : "{seconds}s jäljellä",
+ "{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.",
"No entries in this folder match '{filter}'" : "Mikään tässä kansiossa ei vastaa suodatusta '{filter}'",
"Local link" : "Paikallinen linkki",
"{newname} already exists" : "{newname} on jo olemassa",
@@ -133,8 +133,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s palautti kohteen %1$s",
"Changed by %2$s" : "Muuttanut %2$s",
"Deleted by %2$s" : "Poistanut %2$s",
- "Restored by %2$s" : "Palauttanut %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAV:n yli</a>",
- "Cancel upload" : "Peru lähetys"
+ "Restored by %2$s" : "Palauttanut %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json
index 79a1fc0ec58..6b60b94f6b4 100644
--- a/apps/files/l10n/fi_FI.json
+++ b/apps/files/l10n/fi_FI.json
@@ -1,7 +1,6 @@
{ "translations": {
"Storage invalid" : "Virheellinen tallennustila",
"Unknown error" : "Tuntematon virhe",
- "Files" : "Tiedostot",
"All files" : "Kaikki tiedostot",
"Recent" : "Viimeaikaiset",
"File could not be found" : "TIedostoa ei löytynyt",
@@ -14,22 +13,14 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ei riittävästi vapaata tilaa. Lähetyksesi koko on {size1}, mutta vain {size2} on jäljellä",
"Uploading..." : "Lähetetään...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} jäljellä",
- "{hours}:{minutes}h" : "{hours}h {minutes}m",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}m {seconds}s jäljellä",
- "{minutes}:{seconds}m" : "{minutes}m {seconds}s",
- "{seconds} second{plural_s} left" : "{seconds}s jäljellä",
- "{seconds}s" : "{seconds} s",
- "Any moment now..." : "Minä tahansa hetkenä...",
- "Soon..." : "Pian...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{totalSize} ({bitrate})",
- "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.",
"Actions" : "Toiminnot",
"Download" : "Lataa",
"Rename" : "Nimeä uudelleen",
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
+ "Files" : "Tiedostot",
"Details" : "Tiedot",
"Select" : "Valitse",
"Pending" : "Odottaa",
@@ -114,6 +105,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Yhteiskoko {size1} ylittää lähetysrajan {size2}",
"Error uploading file \"{fileName}\": {message}" : "Virhe lähettäessä tiedostoa \"{fileName}\": {message}",
"Could not get result from server." : "Tuloksien saaminen palvelimelta ei onnistunut.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} jäljellä",
+ "{hours}:{minutes}h" : "{hours}h {minutes}m",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}m {seconds}s jäljellä",
+ "{minutes}:{seconds}m" : "{minutes}m {seconds}s",
+ "{seconds} second{plural_s} left" : "{seconds}s jäljellä",
+ "{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.",
"No entries in this folder match '{filter}'" : "Mikään tässä kansiossa ei vastaa suodatusta '{filter}'",
"Local link" : "Paikallinen linkki",
"{newname} already exists" : "{newname} on jo olemassa",
@@ -131,8 +131,6 @@
"%2$s restored %1$s" : "%2$s palautti kohteen %1$s",
"Changed by %2$s" : "Muuttanut %2$s",
"Deleted by %2$s" : "Poistanut %2$s",
- "Restored by %2$s" : "Palauttanut %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAV:n yli</a>",
- "Cancel upload" : "Peru lähetys"
+ "Restored by %2$s" : "Palauttanut %2$s"
},"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 b3ba81c1896..bb040d3ae45 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -1,34 +1,24 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible",
- "Storage invalid" : "Support de stockage non valable",
+ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
+ "Storage invalid" : "Support de stockage invalide",
"Unknown error" : "Erreur inconnue ",
- "Files" : "Fichiers",
"All files" : "Tous les fichiers",
"Recent" : "Récent",
- "File could not be found" : "Ce fichier n'a pu être trouvé.",
+ "File could not be found" : "Fichier introuvable",
"Home" : "Mes fichiers",
"Close" : "Fermer",
"Favorites" : "Favoris",
"Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"",
- "Upload cancelled." : "Envoi annulé.",
+ "Upload cancelled." : "Téléversement annulé.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
- "Not enough free space" : "Pas assez d'espace disponible",
+ "Not enough free space" : "Espace disponible insuffisant",
"Uploading..." : "Téléversement en cours…",
- "..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} heure{plural_s} restante{plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} restante{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} seconde{plural_s} restante{plural_s}",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "D'ici quelques instants…",
- "Soon..." : "Bientôt...",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
- "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.",
"Actions" : "Actions",
"Download" : "Télécharger",
"Rename" : "Renommer",
@@ -37,12 +27,14 @@ OC.L10N.register(
"Delete" : "Supprimer",
"Disconnect storage" : "Déconnecter ce support de stockage",
"Unshare" : "Ne plus partager",
+ "Could not load info for file \"{file}\"" : "Impossible de charger les informations du fichier \"{file}\"",
+ "Files" : "Fichiers",
"Details" : "Détails",
"Select" : "Sélectionner",
"Pending" : "En attente",
"Unable to determine date" : "Impossible de déterminer la date",
"This operation is forbidden" : "Cette opération est interdite",
- "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ce dossier n'est pas disponible. Consultez les logs ou contactez votre administrateur",
"Could not move \"{file}\", target exists" : "Impossible de déplacer \"{file}\", la cible existe",
"Could not move \"{file}\"" : "Impossible de déplacer \"{file}\"",
"{newName} already exists" : "{newName} existe déjà",
@@ -60,18 +52,18 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["%n dossier","%n dossiers"],
"_%n file_::_%n files_" : ["%n fichier","%n fichiers"],
"{dirs} and {files}" : "{dirs} et {files}",
- "_including %n hidden_::_including %n hidden_" : ["inclus %n caché","inclus %n cachés"],
- "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici",
+ "_including %n hidden_::_including %n hidden_" : ["inclus %n masqué","inclus %n masqués"],
+ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'envoyer ou de créer des fichiers ici",
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"New" : "Nouveau",
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!",
- "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
+ "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"],
- "View in folder" : "Voir dans le dossier",
+ "View in folder" : "Afficher dans le dossier",
"Path" : "Chemin",
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Favorited" : "Marqué comme favori",
@@ -79,13 +71,13 @@ OC.L10N.register(
"Copy local link" : "Copier le dossier local",
"Folder" : "Dossier",
"New folder" : "Nouveau dossier",
- "Upload" : "Chargement",
+ "Upload" : "Téléverser",
"An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes",
"Added to favorites" : "Ajouté aux favoris",
"Removed from favorites" : "Retiré des favoris",
"You added {file} to your favorites" : "Vous avez ajouté {file} à vos favoris",
"You removed {file} from your favorites" : "Vous avez retiré {file} de vos favoris",
- "File changes" : "Modifications du fichier",
+ "File changes" : "Modifications de fichiers",
"Created by {user}" : "Créé par {user}",
"Changed by {user}" : "Modifié par {user}",
"Deleted by {user}" : "Supprimé par {user}",
@@ -115,9 +107,9 @@ OC.L10N.register(
"File handling" : "Gestion de fichiers",
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
- "Save" : "Sauvegarder",
+ "Save" : "Enregistrer",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Avec PHP-FPM il peut se passer jusqu'à 5 minutes pour que les changements soient appliqués.",
- "Missing permissions to edit from here." : "Manque de permissions pour éditer à partir d'ici.",
+ "Missing permissions to edit from here." : "Permissions insuffisantes pour modifier à partir d'ici.",
"Settings" : "Paramètres",
"Show hidden files" : "Afficher les fichiers cachés",
"WebDAV" : "WebDAV",
@@ -137,27 +129,36 @@ OC.L10N.register(
"Deleted files" : "Fichiers supprimés",
"Text file" : "Fichier texte",
"New text file.txt" : "Nouveau fichier texte.txt",
- "Storage not available" : "Support de stockage non disponible",
+ "Storage not available" : "Espace de stockage non disponible",
"Unable to set upload directory." : "Impossible de définir le dossier de destination.",
"Invalid Token" : "Jeton non valide",
"No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue",
- "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.",
+ "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.",
"The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.",
"No file was uploaded" : "Pas de fichier envoyé.",
"Missing a temporary folder" : "Absence de dossier temporaire",
"Failed to write to disk" : "Erreur d'écriture sur le disque",
- "Not enough storage available" : "Trop peu d'espace de stockage disponible",
+ "Not enough storage available" : "Espace disponible insuffisant",
"The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.",
- "Upload failed. Could not find uploaded file" : "L'envoi a échoué. Impossible de trouver le fichier envoyé.",
- "Upload failed. Could not get file info." : "L'envoi a échoué. Impossible d'obtenir les informations du fichier.",
+ "Upload failed. Could not find uploaded file" : "Le téléversement a échoué. Impossible de trouver le fichier envoyé.",
+ "Upload failed. Could not get file info." : "Le téléversement a échoué. Impossible d'obtenir les informations du fichier.",
"Invalid directory." : "Dossier non valide.",
"Total file size {size1} exceeds upload limit {size2}" : "La taille totale du fichier {size1} excède la taille maximale d'envoi {size2}",
"Error uploading file \"{fileName}\": {message}" : "Erreur lors de l'envoi du fichier \"{fileName}\" : {message}",
"Could not get result from server." : "Ne peut recevoir les résultats du serveur.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} heure{plural_s} restante{plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} restante{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} seconde{plural_s} restante{plural_s}",
+ "{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.",
"No entries in this folder match '{filter}'" : "Aucune entrée de ce dossier ne correspond à '{filter}'",
- "Local link" : "Dossier local",
+ "Local link" : "Lien local",
"{newname} already exists" : "{newname} existe déjà",
"A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>",
"A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>",
@@ -173,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s a restauré %1$s",
"Changed by %2$s" : "Modifié par %2$s",
"Deleted by %2$s" : "Supprimé par %2$s",
- "Restored by %2$s" : "Restauré par %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">accéder à vos fichiers par WebDAV</a>",
- "Cancel upload" : "Annuler le téléversement"
+ "Restored by %2$s" : "Restauré par %2$s"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 84bd72be643..c38524fbe31 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -1,32 +1,22 @@
{ "translations": {
- "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible",
- "Storage invalid" : "Support de stockage non valable",
+ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
+ "Storage invalid" : "Support de stockage invalide",
"Unknown error" : "Erreur inconnue ",
- "Files" : "Fichiers",
"All files" : "Tous les fichiers",
"Recent" : "Récent",
- "File could not be found" : "Ce fichier n'a pu être trouvé.",
+ "File could not be found" : "Fichier introuvable",
"Home" : "Mes fichiers",
"Close" : "Fermer",
"Favorites" : "Favoris",
"Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"",
- "Upload cancelled." : "Envoi annulé.",
+ "Upload cancelled." : "Téléversement annulé.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
- "Not enough free space" : "Pas assez d'espace disponible",
+ "Not enough free space" : "Espace disponible insuffisant",
"Uploading..." : "Téléversement en cours…",
- "..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} heure{plural_s} restante{plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} restante{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} seconde{plural_s} restante{plural_s}",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "D'ici quelques instants…",
- "Soon..." : "Bientôt...",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
- "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.",
"Actions" : "Actions",
"Download" : "Télécharger",
"Rename" : "Renommer",
@@ -35,12 +25,14 @@
"Delete" : "Supprimer",
"Disconnect storage" : "Déconnecter ce support de stockage",
"Unshare" : "Ne plus partager",
+ "Could not load info for file \"{file}\"" : "Impossible de charger les informations du fichier \"{file}\"",
+ "Files" : "Fichiers",
"Details" : "Détails",
"Select" : "Sélectionner",
"Pending" : "En attente",
"Unable to determine date" : "Impossible de déterminer la date",
"This operation is forbidden" : "Cette opération est interdite",
- "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ce dossier n'est pas disponible. Consultez les logs ou contactez votre administrateur",
"Could not move \"{file}\", target exists" : "Impossible de déplacer \"{file}\", la cible existe",
"Could not move \"{file}\"" : "Impossible de déplacer \"{file}\"",
"{newName} already exists" : "{newName} existe déjà",
@@ -58,18 +50,18 @@
"_%n folder_::_%n folders_" : ["%n dossier","%n dossiers"],
"_%n file_::_%n files_" : ["%n fichier","%n fichiers"],
"{dirs} and {files}" : "{dirs} et {files}",
- "_including %n hidden_::_including %n hidden_" : ["inclus %n caché","inclus %n cachés"],
- "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici",
+ "_including %n hidden_::_including %n hidden_" : ["inclus %n masqué","inclus %n masqués"],
+ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'envoyer ou de créer des fichiers ici",
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"New" : "Nouveau",
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!",
- "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
+ "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"],
- "View in folder" : "Voir dans le dossier",
+ "View in folder" : "Afficher dans le dossier",
"Path" : "Chemin",
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Favorited" : "Marqué comme favori",
@@ -77,13 +69,13 @@
"Copy local link" : "Copier le dossier local",
"Folder" : "Dossier",
"New folder" : "Nouveau dossier",
- "Upload" : "Chargement",
+ "Upload" : "Téléverser",
"An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes",
"Added to favorites" : "Ajouté aux favoris",
"Removed from favorites" : "Retiré des favoris",
"You added {file} to your favorites" : "Vous avez ajouté {file} à vos favoris",
"You removed {file} from your favorites" : "Vous avez retiré {file} de vos favoris",
- "File changes" : "Modifications du fichier",
+ "File changes" : "Modifications de fichiers",
"Created by {user}" : "Créé par {user}",
"Changed by {user}" : "Modifié par {user}",
"Deleted by {user}" : "Supprimé par {user}",
@@ -113,9 +105,9 @@
"File handling" : "Gestion de fichiers",
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
- "Save" : "Sauvegarder",
+ "Save" : "Enregistrer",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Avec PHP-FPM il peut se passer jusqu'à 5 minutes pour que les changements soient appliqués.",
- "Missing permissions to edit from here." : "Manque de permissions pour éditer à partir d'ici.",
+ "Missing permissions to edit from here." : "Permissions insuffisantes pour modifier à partir d'ici.",
"Settings" : "Paramètres",
"Show hidden files" : "Afficher les fichiers cachés",
"WebDAV" : "WebDAV",
@@ -135,27 +127,36 @@
"Deleted files" : "Fichiers supprimés",
"Text file" : "Fichier texte",
"New text file.txt" : "Nouveau fichier texte.txt",
- "Storage not available" : "Support de stockage non disponible",
+ "Storage not available" : "Espace de stockage non disponible",
"Unable to set upload directory." : "Impossible de définir le dossier de destination.",
"Invalid Token" : "Jeton non valide",
"No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue",
- "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.",
+ "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.",
"The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.",
"No file was uploaded" : "Pas de fichier envoyé.",
"Missing a temporary folder" : "Absence de dossier temporaire",
"Failed to write to disk" : "Erreur d'écriture sur le disque",
- "Not enough storage available" : "Trop peu d'espace de stockage disponible",
+ "Not enough storage available" : "Espace disponible insuffisant",
"The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.",
- "Upload failed. Could not find uploaded file" : "L'envoi a échoué. Impossible de trouver le fichier envoyé.",
- "Upload failed. Could not get file info." : "L'envoi a échoué. Impossible d'obtenir les informations du fichier.",
+ "Upload failed. Could not find uploaded file" : "Le téléversement a échoué. Impossible de trouver le fichier envoyé.",
+ "Upload failed. Could not get file info." : "Le téléversement a échoué. Impossible d'obtenir les informations du fichier.",
"Invalid directory." : "Dossier non valide.",
"Total file size {size1} exceeds upload limit {size2}" : "La taille totale du fichier {size1} excède la taille maximale d'envoi {size2}",
"Error uploading file \"{fileName}\": {message}" : "Erreur lors de l'envoi du fichier \"{fileName}\" : {message}",
"Could not get result from server." : "Ne peut recevoir les résultats du serveur.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} heure{plural_s} restante{plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} restante{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} seconde{plural_s} restante{plural_s}",
+ "{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.",
"No entries in this folder match '{filter}'" : "Aucune entrée de ce dossier ne correspond à '{filter}'",
- "Local link" : "Dossier local",
+ "Local link" : "Lien local",
"{newname} already exists" : "{newname} existe déjà",
"A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>",
"A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>",
@@ -171,8 +172,6 @@
"%2$s restored %1$s" : "%2$s a restauré %1$s",
"Changed by %2$s" : "Modifié par %2$s",
"Deleted by %2$s" : "Supprimé par %2$s",
- "Restored by %2$s" : "Restauré par %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">accéder à vos fichiers par WebDAV</a>",
- "Cancel upload" : "Annuler le téléversement"
+ "Restored by %2$s" : "Restauré par %2$s"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/he.js b/apps/files/l10n/he.js
index b35738132fc..5d510f5bb2f 100644
--- a/apps/files/l10n/he.js
+++ b/apps/files/l10n/he.js
@@ -15,16 +15,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "לא קיים מספיק מקום פנוי, הקובץ המיועד להעלאה {size1} אבל נשאר {size2} בלבד",
"Uploading..." : "העלאה...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left",
- "{hours}:{minutes}h" : "{hours}:{minutes}שעות",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} דקות{plural_s} נשארו",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}דקות",
- "{seconds} second{plural_s} left" : "{seconds} שניות{plural_s} נשארו",
- "{seconds}s" : "{seconds}שניות",
- "Any moment now..." : "עכשיו בכל רגע...",
- "Soon..." : "בקרוב...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} מתוך {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.",
"Actions" : "פעולות",
"Download" : "הורדה",
"Rename" : "שינוי שם",
@@ -113,6 +104,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "גודל הקובת {size1} עובר את מגבלת הגודל להעלאה {size2}",
"Error uploading file \"{fileName}\": {message}" : "שגיאה בזמן העלאת קובץ \"{fileName}\": {message}",
"Could not get result from server." : "לא ניתן לגשת לתוצאות מהשרת.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left",
+ "{hours}:{minutes}h" : "{hours}:{minutes}שעות",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} דקות{plural_s} נשארו",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}דקות",
+ "{seconds} second{plural_s} left" : "{seconds} שניות{plural_s} נשארו",
+ "{seconds}s" : "{seconds}שניות",
+ "Any moment now..." : "עכשיו בכל רגע...",
+ "Soon..." : "בקרוב...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.",
"No entries in this folder match '{filter}'" : "לא נמצאו התאמות בתיקייה זו ל- '{filter}'",
"Local link" : "קישור מקומי",
"{newname} already exists" : "{newname} כבר קיים",
diff --git a/apps/files/l10n/he.json b/apps/files/l10n/he.json
index e9a5a32f5a5..e926f718f46 100644
--- a/apps/files/l10n/he.json
+++ b/apps/files/l10n/he.json
@@ -13,16 +13,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "לא קיים מספיק מקום פנוי, הקובץ המיועד להעלאה {size1} אבל נשאר {size2} בלבד",
"Uploading..." : "העלאה...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left",
- "{hours}:{minutes}h" : "{hours}:{minutes}שעות",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} דקות{plural_s} נשארו",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}דקות",
- "{seconds} second{plural_s} left" : "{seconds} שניות{plural_s} נשארו",
- "{seconds}s" : "{seconds}שניות",
- "Any moment now..." : "עכשיו בכל רגע...",
- "Soon..." : "בקרוב...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} מתוך {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.",
"Actions" : "פעולות",
"Download" : "הורדה",
"Rename" : "שינוי שם",
@@ -111,6 +102,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "גודל הקובת {size1} עובר את מגבלת הגודל להעלאה {size2}",
"Error uploading file \"{fileName}\": {message}" : "שגיאה בזמן העלאת קובץ \"{fileName}\": {message}",
"Could not get result from server." : "לא ניתן לגשת לתוצאות מהשרת.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left",
+ "{hours}:{minutes}h" : "{hours}:{minutes}שעות",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} דקות{plural_s} נשארו",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}דקות",
+ "{seconds} second{plural_s} left" : "{seconds} שניות{plural_s} נשארו",
+ "{seconds}s" : "{seconds}שניות",
+ "Any moment now..." : "עכשיו בכל רגע...",
+ "Soon..." : "בקרוב...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.",
"No entries in this folder match '{filter}'" : "לא נמצאו התאמות בתיקייה זו ל- '{filter}'",
"Local link" : "קישור מקומי",
"{newname} already exists" : "{newname} כבר קיים",
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index a4df0cf66c2..a238f7ec83e 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "A tároló átmenetileg nem érhető el",
"Storage invalid" : "A tároló érvénytelen",
"Unknown error" : "Ismeretlen hiba",
- "Files" : "Fájlok",
"All files" : "Az összes fájl",
"Recent" : "Legutóbbi",
"File could not be found" : "Fájl nem található",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "Nincs elég szabad hely",
"Uploading..." : "Feltöltés...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} óra{plural_s} maradt hátra",
- "{hours}:{minutes}h" : "{hours}:{minutes}ó",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} perc{plural_s} maradt hátra",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}p",
- "{seconds} second{plural_s} left" : "{seconds} másodperc maradt hátra",
- "{seconds}s" : "{seconds}mp",
- "Any moment now..." : "Mostmár bármelyik pillanatban...",
- "Soon..." : "Hamarosan...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "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.",
"Actions" : "Műveletek",
"Download" : "Letöltés",
"Rename" : "Átnevezés",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
+ "Could not load info for file \"{file}\"" : "Nem sikerült betölteni az információs fájl ehhez: \"{file}\"",
+ "Files" : "Fájlok",
"Details" : "Részletek",
"Select" : "Kiválaszt",
"Pending" : "Folyamatban",
@@ -156,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "A teljes fájlméret: {size1} meghaladja a feltöltési limitet: {size2}",
"Error uploading file \"{fileName}\": {message}" : "Hiba történt a fájlfeltöltés közben: \"{fileName}\": {message}",
"Could not get result from server." : "A szervertől nem kapható meg a művelet eredménye.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} óra{plural_s} maradt hátra",
+ "{hours}:{minutes}h" : "{hours}:{minutes}ó",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} perc{plural_s} maradt hátra",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}p",
+ "{seconds} second{plural_s} left" : "{seconds} másodperc maradt hátra",
+ "{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.",
"No entries in this folder match '{filter}'" : "Nincsenek egyező bejegyzések ebben a mappában '{filter}'",
"Local link" : "Helyi hivatkozás",
"{newname} already exists" : "{newname} már létezik",
@@ -173,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%1$s visszatöltötte %2$s",
"Changed by %2$s" : "Megváltoztatta: %2$s",
"Deleted by %2$s" : "Törölte: %2$s",
- "Restored by %2$s" : "Visszaállította: %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Használd ezt a címet <a href=\"%s\" target=\"_blank\">a Fájlok eléréséhez WebDAV-on keresztül</a>.",
- "Cancel upload" : "Feltöltés megszakítása"
+ "Restored by %2$s" : "Visszaállította: %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 2a615dfeb9f..111a1a51a9c 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "A tároló átmenetileg nem érhető el",
"Storage invalid" : "A tároló érvénytelen",
"Unknown error" : "Ismeretlen hiba",
- "Files" : "Fájlok",
"All files" : "Az összes fájl",
"Recent" : "Legutóbbi",
"File could not be found" : "Fájl nem található",
@@ -17,16 +16,7 @@
"Not enough free space" : "Nincs elég szabad hely",
"Uploading..." : "Feltöltés...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} óra{plural_s} maradt hátra",
- "{hours}:{minutes}h" : "{hours}:{minutes}ó",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} perc{plural_s} maradt hátra",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}p",
- "{seconds} second{plural_s} left" : "{seconds} másodperc maradt hátra",
- "{seconds}s" : "{seconds}mp",
- "Any moment now..." : "Mostmár bármelyik pillanatban...",
- "Soon..." : "Hamarosan...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "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.",
"Actions" : "Műveletek",
"Download" : "Letöltés",
"Rename" : "Átnevezés",
@@ -35,6 +25,8 @@
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
+ "Could not load info for file \"{file}\"" : "Nem sikerült betölteni az információs fájl ehhez: \"{file}\"",
+ "Files" : "Fájlok",
"Details" : "Részletek",
"Select" : "Kiválaszt",
"Pending" : "Folyamatban",
@@ -154,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "A teljes fájlméret: {size1} meghaladja a feltöltési limitet: {size2}",
"Error uploading file \"{fileName}\": {message}" : "Hiba történt a fájlfeltöltés közben: \"{fileName}\": {message}",
"Could not get result from server." : "A szervertől nem kapható meg a művelet eredménye.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} óra{plural_s} maradt hátra",
+ "{hours}:{minutes}h" : "{hours}:{minutes}ó",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} perc{plural_s} maradt hátra",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}p",
+ "{seconds} second{plural_s} left" : "{seconds} másodperc maradt hátra",
+ "{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.",
"No entries in this folder match '{filter}'" : "Nincsenek egyező bejegyzések ebben a mappában '{filter}'",
"Local link" : "Helyi hivatkozás",
"{newname} already exists" : "{newname} már létezik",
@@ -171,8 +172,6 @@
"%2$s restored %1$s" : "%1$s visszatöltötte %2$s",
"Changed by %2$s" : "Megváltoztatta: %2$s",
"Deleted by %2$s" : "Törölte: %2$s",
- "Restored by %2$s" : "Visszaállította: %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Használd ezt a címet <a href=\"%s\" target=\"_blank\">a Fájlok eléréséhez WebDAV-on keresztül</a>.",
- "Cancel upload" : "Feltöltés megszakítása"
+ "Restored by %2$s" : "Visszaállította: %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js
index 84acbbe921f..14022655d62 100644
--- a/apps/files/l10n/id.js
+++ b/apps/files/l10n/id.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Storage invalid" : "Penyimpanan tidak sah",
"Unknown error" : "Kesalahan tidak diketahui",
- "Files" : "Berkas",
"All files" : "Semua berkas",
"Recent" : "Terbaru",
"File could not be found" : "Berkas tidak ditemukan",
@@ -16,22 +15,14 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ruang bebas tidak mencukupi, Anda mengunggah {size1} tetapi hanya {size2} yang tersisa",
"Uploading..." : "Mengunggah...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Masih {hours}:{minutes}:{seconds} lagi",
- "{hours}:{minutes}h" : "{hours}:{minutes}j",
- "{minutes}:{seconds} minute{plural_s} left" : "Masih {minutes}:{seconds} lagi",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "Masih {seconds} detik lagi",
- "{seconds}s" : "{seconds}d",
- "Any moment now..." : "Sedikit lagi...",
- "Soon..." : "Segera...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} dari {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.",
"Actions" : "Tindakan",
"Download" : "Unduh",
"Rename" : "Ubah nama",
"Delete" : "Hapus",
"Disconnect storage" : "Memutuskan penyimpaan",
"Unshare" : "Batalkan berbagi",
+ "Files" : "Berkas",
"Details" : "Rincian",
"Select" : "Pilih",
"Pending" : "Tertunda",
@@ -115,6 +106,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Jumlah ukuran berkas {size1} melampaui batas unggah {size2}",
"Error uploading file \"{fileName}\": {message}" : "Kesalahan saat mengunggah \"{filename}\": {message}",
"Could not get result from server." : "Tidak mendapatkan hasil dari server.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Masih {hours}:{minutes}:{seconds} lagi",
+ "{hours}:{minutes}h" : "{hours}:{minutes}j",
+ "{minutes}:{seconds} minute{plural_s} left" : "Masih {minutes}:{seconds} lagi",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "Masih {seconds} detik lagi",
+ "{seconds}s" : "{seconds}d",
+ "Any moment now..." : "Sedikit lagi...",
+ "Soon..." : "Segera...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.",
"No entries in this folder match '{filter}'" : "Tidak ada entri di folder ini yang cocok dengan '{filter}'",
"Local link" : "Pranala lokal",
"{newname} already exists" : "{newname} sudah ada",
@@ -132,8 +132,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s memulihkan %1$s",
"Changed by %2$s" : "Diubah oleh %2$s",
"Deleted by %2$s" : "Dihapus oleh %2$s",
- "Restored by %2$s" : "Dipulihkan oleh %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses berkas Anda melalui WebDAV</a>",
- "Cancel upload" : "Batalkan pengunggahan"
+ "Restored by %2$s" : "Dipulihkan oleh %2$s"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json
index 62892ca60c5..e245cc7847c 100644
--- a/apps/files/l10n/id.json
+++ b/apps/files/l10n/id.json
@@ -1,7 +1,6 @@
{ "translations": {
"Storage invalid" : "Penyimpanan tidak sah",
"Unknown error" : "Kesalahan tidak diketahui",
- "Files" : "Berkas",
"All files" : "Semua berkas",
"Recent" : "Terbaru",
"File could not be found" : "Berkas tidak ditemukan",
@@ -14,22 +13,14 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ruang bebas tidak mencukupi, Anda mengunggah {size1} tetapi hanya {size2} yang tersisa",
"Uploading..." : "Mengunggah...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Masih {hours}:{minutes}:{seconds} lagi",
- "{hours}:{minutes}h" : "{hours}:{minutes}j",
- "{minutes}:{seconds} minute{plural_s} left" : "Masih {minutes}:{seconds} lagi",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "Masih {seconds} detik lagi",
- "{seconds}s" : "{seconds}d",
- "Any moment now..." : "Sedikit lagi...",
- "Soon..." : "Segera...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} dari {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.",
"Actions" : "Tindakan",
"Download" : "Unduh",
"Rename" : "Ubah nama",
"Delete" : "Hapus",
"Disconnect storage" : "Memutuskan penyimpaan",
"Unshare" : "Batalkan berbagi",
+ "Files" : "Berkas",
"Details" : "Rincian",
"Select" : "Pilih",
"Pending" : "Tertunda",
@@ -113,6 +104,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Jumlah ukuran berkas {size1} melampaui batas unggah {size2}",
"Error uploading file \"{fileName}\": {message}" : "Kesalahan saat mengunggah \"{filename}\": {message}",
"Could not get result from server." : "Tidak mendapatkan hasil dari server.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Masih {hours}:{minutes}:{seconds} lagi",
+ "{hours}:{minutes}h" : "{hours}:{minutes}j",
+ "{minutes}:{seconds} minute{plural_s} left" : "Masih {minutes}:{seconds} lagi",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "Masih {seconds} detik lagi",
+ "{seconds}s" : "{seconds}d",
+ "Any moment now..." : "Sedikit lagi...",
+ "Soon..." : "Segera...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.",
"No entries in this folder match '{filter}'" : "Tidak ada entri di folder ini yang cocok dengan '{filter}'",
"Local link" : "Pranala lokal",
"{newname} already exists" : "{newname} sudah ada",
@@ -130,8 +130,6 @@
"%2$s restored %1$s" : "%2$s memulihkan %1$s",
"Changed by %2$s" : "Diubah oleh %2$s",
"Deleted by %2$s" : "Dihapus oleh %2$s",
- "Restored by %2$s" : "Dipulihkan oleh %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses berkas Anda melalui WebDAV</a>",
- "Cancel upload" : "Batalkan pengunggahan"
+ "Restored by %2$s" : "Dipulihkan oleh %2$s"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index 745976258f7..e908ae6d018 100644
--- a/apps/files/l10n/is.js
+++ b/apps/files/l10n/is.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Storage invalid" : "Ógild geymsla",
"Unknown error" : "Óþekkt villa",
- "Files" : "Skrár",
"All files" : "Allar skrár",
"Recent" : "Nýlegt",
"File could not be found" : "Skrá finnst ekki",
@@ -16,22 +15,14 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ekki nægilegt laust pláss, þú ert að senda inn {size1} en einungis {size2} eru eftir",
"Uploading..." : "Sendi inn ...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} klukkustundir eftir",
- "{hours}:{minutes}h" : "{hours}:{minutes}klst",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} mínútur eftir",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}mín",
- "{seconds} second{plural_s} left" : "{seconds} sekúndur eftir",
- "{seconds}s" : "{seconds}sek",
- "Any moment now..." : "Á hverri stundu...",
- "Soon..." : "Bráðum...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} af {totalSize} ({bitrate})",
- "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.",
"Actions" : "Aðgerðir",
"Download" : "Niðurhal",
"Rename" : "Endurnefna",
"Delete" : "Eyða",
"Disconnect storage" : "Aftengja geymslu",
"Unshare" : "Hætta deilingu",
+ "Files" : "Skrár",
"Details" : "Nánar",
"Select" : "Velja",
"Pending" : "Í bið",
@@ -116,6 +107,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Heildarskráastærð {size1} er meiri en leyfilegt innsendingahámark {size2}",
"Error uploading file \"{fileName}\": {message}" : "Villa við að senda inn skrána \"{fileName}\": {message}",
"Could not get result from server." : "Fékk ekki niðurstöður frá þjóni.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} klukkustundir eftir",
+ "{hours}:{minutes}h" : "{hours}:{minutes}klst",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} mínútur eftir",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}mín",
+ "{seconds} second{plural_s} left" : "{seconds} sekúndur eftir",
+ "{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.",
"No entries in this folder match '{filter}'" : "Engar færslur í þessari möppu samsvara '{filter}'",
"Local link" : "Staðvær tengill",
"{newname} already exists" : "{newname} er þegar til",
@@ -133,8 +133,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s endurheimti %1$s",
"Changed by %2$s" : "Breytt af %2$s",
"Deleted by %2$s" : "Eytt af %2$s",
- "Restored by %2$s" : "Endurheimt af %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Notaðu þetta vistfang til að <a href=\"%s\" target=\"_blank\">nálgast skrárnar þínar með WebDAV</a>",
- "Cancel upload" : "Hætta við innsendingu"
+ "Restored by %2$s" : "Endurheimt af %2$s"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index ecb3a035de3..e56755d96f6 100644
--- a/apps/files/l10n/is.json
+++ b/apps/files/l10n/is.json
@@ -1,7 +1,6 @@
{ "translations": {
"Storage invalid" : "Ógild geymsla",
"Unknown error" : "Óþekkt villa",
- "Files" : "Skrár",
"All files" : "Allar skrár",
"Recent" : "Nýlegt",
"File could not be found" : "Skrá finnst ekki",
@@ -14,22 +13,14 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ekki nægilegt laust pláss, þú ert að senda inn {size1} en einungis {size2} eru eftir",
"Uploading..." : "Sendi inn ...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} klukkustundir eftir",
- "{hours}:{minutes}h" : "{hours}:{minutes}klst",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} mínútur eftir",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}mín",
- "{seconds} second{plural_s} left" : "{seconds} sekúndur eftir",
- "{seconds}s" : "{seconds}sek",
- "Any moment now..." : "Á hverri stundu...",
- "Soon..." : "Bráðum...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} af {totalSize} ({bitrate})",
- "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.",
"Actions" : "Aðgerðir",
"Download" : "Niðurhal",
"Rename" : "Endurnefna",
"Delete" : "Eyða",
"Disconnect storage" : "Aftengja geymslu",
"Unshare" : "Hætta deilingu",
+ "Files" : "Skrár",
"Details" : "Nánar",
"Select" : "Velja",
"Pending" : "Í bið",
@@ -114,6 +105,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Heildarskráastærð {size1} er meiri en leyfilegt innsendingahámark {size2}",
"Error uploading file \"{fileName}\": {message}" : "Villa við að senda inn skrána \"{fileName}\": {message}",
"Could not get result from server." : "Fékk ekki niðurstöður frá þjóni.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} klukkustundir eftir",
+ "{hours}:{minutes}h" : "{hours}:{minutes}klst",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} mínútur eftir",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}mín",
+ "{seconds} second{plural_s} left" : "{seconds} sekúndur eftir",
+ "{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.",
"No entries in this folder match '{filter}'" : "Engar færslur í þessari möppu samsvara '{filter}'",
"Local link" : "Staðvær tengill",
"{newname} already exists" : "{newname} er þegar til",
@@ -131,8 +131,6 @@
"%2$s restored %1$s" : "%2$s endurheimti %1$s",
"Changed by %2$s" : "Breytt af %2$s",
"Deleted by %2$s" : "Eytt af %2$s",
- "Restored by %2$s" : "Endurheimt af %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Notaðu þetta vistfang til að <a href=\"%s\" target=\"_blank\">nálgast skrárnar þínar með WebDAV</a>",
- "Cancel upload" : "Hætta við innsendingu"
+ "Restored by %2$s" : "Endurheimt af %2$s"
},"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 a7d84102ea0..ee3bf41bf7f 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "L'archiviazione è temporaneamente non disponibile",
"Storage invalid" : "Archiviazione non valida",
"Unknown error" : "Errore sconosciuto",
- "Files" : "File",
"All files" : "Tutti i file",
"Recent" : "Recenti",
"File could not be found" : "Il file non può essere trovato",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "Spazio libero insufficiente",
"Uploading..." : "Caricamento in corso...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} ore rimanenti",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuti rimanenti",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} secondi rimanenti",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Da un momento all'altro...",
- "Soon..." : "Presto...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} di {totalSize} ({bitrate})",
- "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.",
"Actions" : "Azioni",
"Download" : "Scarica",
"Rename" : "Rinomina",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "Elimina",
"Disconnect storage" : "Disconnetti archiviazione",
"Unshare" : "Rimuovi condivisione",
+ "Could not load info for file \"{file}\"" : "Impossibile caricare le informazioni per il file \"{file}\"",
+ "Files" : "File",
"Details" : "Dettagli",
"Select" : "Seleziona",
"Pending" : "In corso",
@@ -156,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "La dimensione totale del file {size1} supera il limite di caricamento {size2}",
"Error uploading file \"{fileName}\": {message}" : "Errore durante il caricamento del file \"{fileName}\": {message}",
"Could not get result from server." : "Impossibile ottenere il risultato dal server.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} ore rimanenti",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuti rimanenti",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} secondi rimanenti",
+ "{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.",
"No entries in this folder match '{filter}'" : "Nessuna voce in questa cartella corrisponde a '{filter}'",
"Local link" : "Collegamento locale",
"{newname} already exists" : "{newname} esiste già",
@@ -173,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s ha ripristinato %1$s",
"Changed by %2$s" : "Modificata da %2$s",
"Deleted by %2$s" : "Eliminata da %2$s",
- "Restored by %2$s" : "Ripristinata da %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>",
- "Cancel upload" : "Annulla caricamento"
+ "Restored by %2$s" : "Ripristinata da %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index d3df120e90a..e9ab9c622e1 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "L'archiviazione è temporaneamente non disponibile",
"Storage invalid" : "Archiviazione non valida",
"Unknown error" : "Errore sconosciuto",
- "Files" : "File",
"All files" : "Tutti i file",
"Recent" : "Recenti",
"File could not be found" : "Il file non può essere trovato",
@@ -17,16 +16,7 @@
"Not enough free space" : "Spazio libero insufficiente",
"Uploading..." : "Caricamento in corso...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} ore rimanenti",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuti rimanenti",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} secondi rimanenti",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Da un momento all'altro...",
- "Soon..." : "Presto...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} di {totalSize} ({bitrate})",
- "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.",
"Actions" : "Azioni",
"Download" : "Scarica",
"Rename" : "Rinomina",
@@ -35,6 +25,8 @@
"Delete" : "Elimina",
"Disconnect storage" : "Disconnetti archiviazione",
"Unshare" : "Rimuovi condivisione",
+ "Could not load info for file \"{file}\"" : "Impossibile caricare le informazioni per il file \"{file}\"",
+ "Files" : "File",
"Details" : "Dettagli",
"Select" : "Seleziona",
"Pending" : "In corso",
@@ -154,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "La dimensione totale del file {size1} supera il limite di caricamento {size2}",
"Error uploading file \"{fileName}\": {message}" : "Errore durante il caricamento del file \"{fileName}\": {message}",
"Could not get result from server." : "Impossibile ottenere il risultato dal server.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} ore rimanenti",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuti rimanenti",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} secondi rimanenti",
+ "{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.",
"No entries in this folder match '{filter}'" : "Nessuna voce in questa cartella corrisponde a '{filter}'",
"Local link" : "Collegamento locale",
"{newname} already exists" : "{newname} esiste già",
@@ -171,8 +172,6 @@
"%2$s restored %1$s" : "%2$s ha ripristinato %1$s",
"Changed by %2$s" : "Modificata da %2$s",
"Deleted by %2$s" : "Eliminata da %2$s",
- "Restored by %2$s" : "Ripristinata da %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>",
- "Cancel upload" : "Annulla caricamento"
+ "Restored by %2$s" : "Ripristinata da %2$s"
},"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 cdd87e4536a..58585944f9c 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "ストレージは一時的に利用できません",
"Storage invalid" : "ストレージが無効です",
"Unknown error" : "不明なエラー",
- "Files" : "ファイル",
"All files" : "すべてのファイル",
"Recent" : "最新",
"File could not be found" : "ファイルを見つけられませんでした",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "十分な空き容量がありません",
"Uploading..." : "アップロード中...",
"..." : "…",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "残り{hours}:{minutes}:{seconds} 時間",
- "{hours}:{minutes}h" : "{hours}:{minutes} 時間",
- "{minutes}:{seconds} minute{plural_s} left" : "残り{minutes}:{seconds} 分",
- "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
- "{seconds} second{plural_s} left" : "残り{minutes}:{seconds} 秒",
- "{seconds}s" : "{seconds} 秒",
- "Any moment now..." : "もうすぐ…",
- "Soon..." : "もうすぐ…",
"{loadedSize} of {totalSize} ({bitrate})" : "{totalSize} 中 {loadedSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
"Actions" : "アクション",
"Download" : "ダウンロード",
"Rename" : "名前の変更",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
"Unshare" : "共有解除",
+ "Could not load info for file \"{file}\"" : "\"{file}\" ファイルの情報を読み込めませんでした",
+ "Files" : "ファイル",
"Details" : "詳細",
"Select" : "選択",
"Pending" : "中断",
@@ -81,6 +73,10 @@ OC.L10N.register(
"New folder" : "新しいフォルダー",
"Upload" : "アップロード",
"An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました",
+ "Added to favorites" : "お気に入りに追加",
+ "Removed from favorites" : "お気に入りから削除",
+ "You added {file} to your favorites" : "{file} をお気に入りに追加しました",
+ "You removed {file} from your favorites" : "{file} をお気に入りから削除しました",
"File changes" : "ファイル更新",
"Created by {user}" : "{user} が作成しました",
"Changed by {user}" : "{user} が更新しました",
@@ -101,6 +97,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} が {oldfile} を{newfile} に変更しました",
"You moved {oldfile} to {newfile}" : "{oldfile} を {newfile} に移動しました",
"{user} moved {oldfile} to {newfile}" : "{user} が {oldfile} を {newfile} に移動しました",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "<strong>お気に入り</strong>にファイルが追加または削除されました。",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "ファイルまたはフォルダが <strong>更新</ strong>されたか、<strong>名前が変更されました</strong>",
"A new file or folder has been <strong>created</strong>" : "新しいファイルまたはフォルダーを<strong>作成</strong>したとき",
"A new file or folder has been <strong>deleted</strong>" : "新しいファイルまたはフォルダが<strong>削除されました</strong>",
@@ -151,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "合計ファイルサイズ {size1} はアップロード制限 {size2} を超過しています。",
"Error uploading file \"{fileName}\": {message}" : "ファイル\"{fileName}\"のアップロードエラー: {message}",
"Could not get result from server." : "サーバーから結果を取得できませんでした。",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "残り{hours}:{minutes}:{seconds} 時間",
+ "{hours}:{minutes}h" : "{hours}:{minutes} 時間",
+ "{minutes}:{seconds} minute{plural_s} left" : "残り{minutes}:{seconds} 分",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
+ "{seconds} second{plural_s} left" : "残り{minutes}:{seconds} 秒",
+ "{seconds}s" : "{seconds} 秒",
+ "Any moment now..." : "まもなく…",
+ "Soon..." : "まもなく…",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
"No entries in this folder match '{filter}'" : "このフォルダー内で '{filter}' にマッチするものはありません",
"Local link" : "ローカルリンク",
"{newname} already exists" : "{newname} はすでに存在します",
@@ -168,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s は、 %1$s を復元しました",
"Changed by %2$s" : "%2$s により更新",
"Deleted by %2$s" : "%2$s により削除",
- "Restored by %2$s" : "%2$s により復元",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">WebDAV 経由でファイルにアクセス</a> するにはこのアドレスを利用してください",
- "Cancel upload" : "アップロードをキャンセル"
+ "Restored by %2$s" : "%2$s により復元"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 9818de44a42..12cf9d4907c 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "ストレージは一時的に利用できません",
"Storage invalid" : "ストレージが無効です",
"Unknown error" : "不明なエラー",
- "Files" : "ファイル",
"All files" : "すべてのファイル",
"Recent" : "最新",
"File could not be found" : "ファイルを見つけられませんでした",
@@ -17,16 +16,7 @@
"Not enough free space" : "十分な空き容量がありません",
"Uploading..." : "アップロード中...",
"..." : "…",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "残り{hours}:{minutes}:{seconds} 時間",
- "{hours}:{minutes}h" : "{hours}:{minutes} 時間",
- "{minutes}:{seconds} minute{plural_s} left" : "残り{minutes}:{seconds} 分",
- "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
- "{seconds} second{plural_s} left" : "残り{minutes}:{seconds} 秒",
- "{seconds}s" : "{seconds} 秒",
- "Any moment now..." : "もうすぐ…",
- "Soon..." : "もうすぐ…",
"{loadedSize} of {totalSize} ({bitrate})" : "{totalSize} 中 {loadedSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
"Actions" : "アクション",
"Download" : "ダウンロード",
"Rename" : "名前の変更",
@@ -35,6 +25,8 @@
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
"Unshare" : "共有解除",
+ "Could not load info for file \"{file}\"" : "\"{file}\" ファイルの情報を読み込めませんでした",
+ "Files" : "ファイル",
"Details" : "詳細",
"Select" : "選択",
"Pending" : "中断",
@@ -79,6 +71,10 @@
"New folder" : "新しいフォルダー",
"Upload" : "アップロード",
"An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました",
+ "Added to favorites" : "お気に入りに追加",
+ "Removed from favorites" : "お気に入りから削除",
+ "You added {file} to your favorites" : "{file} をお気に入りに追加しました",
+ "You removed {file} from your favorites" : "{file} をお気に入りから削除しました",
"File changes" : "ファイル更新",
"Created by {user}" : "{user} が作成しました",
"Changed by {user}" : "{user} が更新しました",
@@ -99,6 +95,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} が {oldfile} を{newfile} に変更しました",
"You moved {oldfile} to {newfile}" : "{oldfile} を {newfile} に移動しました",
"{user} moved {oldfile} to {newfile}" : "{user} が {oldfile} を {newfile} に移動しました",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "<strong>お気に入り</strong>にファイルが追加または削除されました。",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "ファイルまたはフォルダが <strong>更新</ strong>されたか、<strong>名前が変更されました</strong>",
"A new file or folder has been <strong>created</strong>" : "新しいファイルまたはフォルダーを<strong>作成</strong>したとき",
"A new file or folder has been <strong>deleted</strong>" : "新しいファイルまたはフォルダが<strong>削除されました</strong>",
@@ -149,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "合計ファイルサイズ {size1} はアップロード制限 {size2} を超過しています。",
"Error uploading file \"{fileName}\": {message}" : "ファイル\"{fileName}\"のアップロードエラー: {message}",
"Could not get result from server." : "サーバーから結果を取得できませんでした。",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "残り{hours}:{minutes}:{seconds} 時間",
+ "{hours}:{minutes}h" : "{hours}:{minutes} 時間",
+ "{minutes}:{seconds} minute{plural_s} left" : "残り{minutes}:{seconds} 分",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
+ "{seconds} second{plural_s} left" : "残り{minutes}:{seconds} 秒",
+ "{seconds}s" : "{seconds} 秒",
+ "Any moment now..." : "まもなく…",
+ "Soon..." : "まもなく…",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
"No entries in this folder match '{filter}'" : "このフォルダー内で '{filter}' にマッチするものはありません",
"Local link" : "ローカルリンク",
"{newname} already exists" : "{newname} はすでに存在します",
@@ -166,8 +172,6 @@
"%2$s restored %1$s" : "%2$s は、 %1$s を復元しました",
"Changed by %2$s" : "%2$s により更新",
"Deleted by %2$s" : "%2$s により削除",
- "Restored by %2$s" : "%2$s により復元",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">WebDAV 経由でファイルにアクセス</a> するにはこのアドレスを利用してください",
- "Cancel upload" : "アップロードをキャンセル"
+ "Restored by %2$s" : "%2$s により復元"
},"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 6cc1b090b91..ac9513e8c27 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "저장소를 일시적으로 사용할 수 없습니다",
"Storage invalid" : "저장소가 잘못됨",
"Unknown error" : "알 수 없는 오류",
- "Files" : "파일",
"All files" : "모든 파일",
"Recent" : "최근",
"File could not be found" : "파일을 찾을 수 없음",
@@ -14,18 +14,19 @@ OC.L10N.register(
"Upload cancelled." : "업로드가 취소되었습니다.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename}을(를) 업로드할 수 없습니다. 폴더이거나 0 바이트 파일입니다.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "빈 공간이 부족합니다. 업로드할 파일 크기는 {size1}이지만 현재 {size2}만큼 비었습니다",
+ "Target folder \"{dir}\" does not exist any more" : "대상 폴더 \"{dir}\"가 존재하지 않습니다",
+ "Not enough free space" : "빈 공간이 부족합니다",
"Uploading..." : "업로드 중...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} 시간 {plural_s} 남음",
- "{seconds}s" : "{seconds}초",
- "Soon..." : "곧...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
"Actions" : "작업",
"Download" : "다운로드",
"Rename" : "이름 바꾸기",
+ "Move" : "이동",
+ "Target folder" : "대상 폴더",
"Delete" : "삭제",
"Disconnect storage" : "저장소 연결 해제",
"Unshare" : "공유 해제",
+ "Files" : "파일",
"Details" : "자세한 정보",
"Select" : "선택",
"Pending" : "대기 중",
@@ -42,12 +43,14 @@ OC.L10N.register(
"Could not create file \"{file}\" because it already exists" : "파일이 이미 존재하므로 \"{file}\"을(를) 만들 수 없음",
"Could not create folder \"{dir}\" because it already exists" : "폴더가 이미 존재하므로 폴더 \"{dir}\"을(를) 만들 수 없음",
"Error deleting file \"{fileName}\"." : "파일 \"{fileName}\"을(를) 삭제할 수 없습니다.",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "폴더의 검색 결과 없음 '{tag}{filter}{endtag}'",
"Name" : "이름",
"Size" : "크기",
"Modified" : "수정됨",
"_%n folder_::_%n folders_" : ["폴더 %n개"],
"_%n file_::_%n files_" : ["파일 %n개"],
"{dirs} and {files}" : "{dirs} 그리고 {files}",
+ "_including %n hidden_::_including %n hidden_" : ["%n개의 숨겨진 파일 포함"],
"You don’t have permission to upload or create files here" : "여기에 파일을 업로드하거나 만들 권한이 없습니다",
"_Uploading %n file_::_Uploading %n files_" : ["파일 %n개 업로드 중"],
"New" : "새로 만들기",
@@ -63,27 +66,40 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n바이트"],
"Favorited" : "책갈피에 추가됨",
"Favorite" : "즐겨찾기",
- "Local link" : "로컬 링크",
+ "Copy local link" : "로컬 링크 복사",
"Folder" : "폴더",
"New folder" : "새 폴더",
"Upload" : "업로드",
"An error occurred while trying to update the tags" : "태그를 업데이트하는 중 오류 발생",
+ "Added to favorites" : "즐겨찾기에 추가됨",
+ "Removed from favorites" : "즐겨찾기에서 삭제됨",
+ "You added {file} to your favorites" : "내가 {file}을(를) 즐겨찾기에 추가함",
+ "You removed {file} from your favorites" : "내가 {file}을(를) 즐겨찾기에서 삭제함",
+ "Created by {user}" : "{user} 님이 만듬",
+ "Changed by {user}" : "{user} 님이 변경함",
+ "Deleted by {user}" : "{user} 님이 삭제함",
+ "Restored by {user}" : "{user} 님이 복원함",
+ "Renamed by {user}" : "{user} 님이 이름을 변경함",
+ "Moved by {user}" : "{user} 님이 이동함",
+ "You created {file}" : "내가 {file}을(를) 만듬",
+ "{user} created {file}" : "{user} 님이 {file}을(를) 만듬",
+ "{file} was created in a public folder" : "공유 폴더에 {file} 이(가) 생성됨",
+ "You changed {file}" : "내가 {file} 을(를) 변경함",
+ "{user} changed {file}" : "{user} 님이 {file} 을(를) 변경함",
+ "You deleted {file}" : "내가 {file} 을(를) 삭제함",
+ "{user} deleted {file}" : "{user} 님이 {file} 을(를) 삭제함",
+ "You restored {file}" : "내가 {file} 을(를) 복원함",
+ "{user} restored {file}" : "{user} 님이 {file} 을(를) 복원함",
+ "You renamed {oldfile} to {newfile}" : "내가 {oldfile} 을(를) {newfile} 로 이름을 바꿈",
+ "{user} renamed {oldfile} to {newfile}" : "{user} 님이 {oldfile} 을(를) {newfile} 로 이름을 바꿈",
+ "You moved {oldfile} to {newfile}" : "내가 {oldfile} 을(를) {newfile} 로 이동함",
+ "{user} moved {oldfile} to {newfile}" : "{user} 님이 {oldfile} 을(를) {newfile} 로 이동함",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "파일이 <strong>즐겨찾기</strong>에서 추가 또는 삭제됨",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "파일이나 폴더가 <strong>변경되거나</strong> <strong>이름이 바뀜</strong>",
"A new file or folder has been <strong>created</strong>" : "새 파일이나 폴더가 <strong>생성됨</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "새 파일이나 폴더가 <strong>삭제됨</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>즐겨찾는 파일</strong>의 생성 및 변경 사항에 대한 알림을 줄일 수 있습니다<em>(스트림에서만)</em>",
- "A file or folder has been <strong>deleted</strong>" : "파일이나 폴더가 <strong>삭제됨</strong>",
- "A file or folder has been <strong>restored</strong>" : "파일이나 폴더가 <strong>복원됨</strong>",
- "You created %1$s" : "내가 %1$s을(를) 생성함",
- "%2$s created %1$s" : "%2$s 님이 %1$s을(를) 생성함",
- "%1$s was created in a public folder" : "공유 폴더에 %1$s 생성됨",
- "You changed %1$s" : "내가 %1$s을(를) 변경함",
- "%2$s changed %1$s" : "%2$s 님이 %1$s을(를) 변경함",
- "You deleted %1$s" : "내가 %1$s을(를) 삭제함",
- "%2$s deleted %1$s" : "%2$s 님이 %1$s을(를) 삭제함",
- "You restored %1$s" : "내가 %1$s을(를) 복원함",
- "%2$s restored %1$s" : "%2$s 님이 %1$s을(를) 복원함",
- "Changed by %2$s" : "%2$s 님이 변경함",
- "Deleted by %2$s" : "%2$s 님이 삭제함",
- "Restored by %2$s" : "%2$s 님이 복원함",
+ "A new file or folder has been <strong>restored</strong>" : "새 파일이나 폴더가 <strong>복원됨</strong>",
"Upload (max. %s)" : "업로드(최대 %s)",
"File handling" : "파일 처리",
"Maximum upload size" : "최대 업로드 크기",
@@ -94,6 +110,7 @@ OC.L10N.register(
"Settings" : "설정",
"Show hidden files" : "숨겨진 파일보기",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "이 주소를 사용하여 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">WebDAV를 통해 파일에 접근할 수 있습니다</a>",
"No files in here" : "여기에 파일 없음",
"Upload some content or sync with your devices!" : "파일을 업로드하거나 장치와 동기화하십시오!",
"No entries found in this folder" : "이 폴더에 항목 없음",
@@ -102,6 +119,11 @@ OC.L10N.register(
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
"No favorites" : "책갈피 없음",
"Files and folders you mark as favorite will show up here" : "책갈피에 추가한 파일과 폴더가 여기에 나타납니다",
+ "Shared with you" : "나와 공유됨",
+ "Shared with others" : "다른 사람과 공유됨",
+ "Shared by link" : "링크로 공유됨",
+ "Tags" : "태그",
+ "Deleted files" : "삭제된 파일",
"Text file" : "텍스트 파일",
"New text file.txt" : "새 텍스트 파일.txt",
"Storage not available" : "저장소를 사용할 수 없음",
@@ -123,9 +145,32 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "총 파일 크기 {size1}이(가) 업로드 제한 {size2}을(를) 초과함",
"Error uploading file \"{fileName}\": {message}" : "\"{fileName}\"을(를) 업로드할 수 없음: {message}",
"Could not get result from server." : "서버에서 결과를 가져올 수 없습니다.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} 시간 {plural_s} 남음",
+ "{hours}:{minutes}h" : "{hours}:{minutes} 시간",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} 분 남음",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} 분",
+ "{seconds} second{plural_s} left" : "{seconds} 초 남음",
+ "{seconds}s" : "{seconds}초",
+ "Any moment now..." : "조금 남음",
+ "Soon..." : "곧...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
"No entries in this folder match '{filter}'" : "이 폴더에 '{filter}'와(과) 일치하는 항목 없음",
+ "Local link" : "로컬 링크",
"{newname} already exists" : "{newname} 항목이 이미 존재함",
"A file or folder has been <strong>changed</strong>" : "파일이나 폴더가 <strong>변경됨</strong>",
- "Cancel upload" : "업로드 취소"
+ "A file or folder has been <strong>deleted</strong>" : "파일이나 폴더가 <strong>삭제됨</strong>",
+ "A file or folder has been <strong>restored</strong>" : "파일이나 폴더가 <strong>복원됨</strong>",
+ "You created %1$s" : "내가 %1$s을(를) 생성함",
+ "%2$s created %1$s" : "%2$s 님이 %1$s을(를) 생성함",
+ "%1$s was created in a public folder" : "공유 폴더에 %1$s 생성됨",
+ "You changed %1$s" : "내가 %1$s을(를) 변경함",
+ "%2$s changed %1$s" : "%2$s 님이 %1$s을(를) 변경함",
+ "You deleted %1$s" : "내가 %1$s을(를) 삭제함",
+ "%2$s deleted %1$s" : "%2$s 님이 %1$s을(를) 삭제함",
+ "You restored %1$s" : "내가 %1$s을(를) 복원함",
+ "%2$s restored %1$s" : "%2$s 님이 %1$s을(를) 복원함",
+ "Changed by %2$s" : "%2$s 님이 변경함",
+ "Deleted by %2$s" : "%2$s 님이 삭제함",
+ "Restored by %2$s" : "%2$s 님이 복원함"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index b9bb99351fb..a52f9d75dc3 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -1,7 +1,7 @@
{ "translations": {
+ "Storage is temporarily not available" : "저장소를 일시적으로 사용할 수 없습니다",
"Storage invalid" : "저장소가 잘못됨",
"Unknown error" : "알 수 없는 오류",
- "Files" : "파일",
"All files" : "모든 파일",
"Recent" : "최근",
"File could not be found" : "파일을 찾을 수 없음",
@@ -12,18 +12,19 @@
"Upload cancelled." : "업로드가 취소되었습니다.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename}을(를) 업로드할 수 없습니다. 폴더이거나 0 바이트 파일입니다.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "빈 공간이 부족합니다. 업로드할 파일 크기는 {size1}이지만 현재 {size2}만큼 비었습니다",
+ "Target folder \"{dir}\" does not exist any more" : "대상 폴더 \"{dir}\"가 존재하지 않습니다",
+ "Not enough free space" : "빈 공간이 부족합니다",
"Uploading..." : "업로드 중...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} 시간 {plural_s} 남음",
- "{seconds}s" : "{seconds}초",
- "Soon..." : "곧...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
"Actions" : "작업",
"Download" : "다운로드",
"Rename" : "이름 바꾸기",
+ "Move" : "이동",
+ "Target folder" : "대상 폴더",
"Delete" : "삭제",
"Disconnect storage" : "저장소 연결 해제",
"Unshare" : "공유 해제",
+ "Files" : "파일",
"Details" : "자세한 정보",
"Select" : "선택",
"Pending" : "대기 중",
@@ -40,12 +41,14 @@
"Could not create file \"{file}\" because it already exists" : "파일이 이미 존재하므로 \"{file}\"을(를) 만들 수 없음",
"Could not create folder \"{dir}\" because it already exists" : "폴더가 이미 존재하므로 폴더 \"{dir}\"을(를) 만들 수 없음",
"Error deleting file \"{fileName}\"." : "파일 \"{fileName}\"을(를) 삭제할 수 없습니다.",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "폴더의 검색 결과 없음 '{tag}{filter}{endtag}'",
"Name" : "이름",
"Size" : "크기",
"Modified" : "수정됨",
"_%n folder_::_%n folders_" : ["폴더 %n개"],
"_%n file_::_%n files_" : ["파일 %n개"],
"{dirs} and {files}" : "{dirs} 그리고 {files}",
+ "_including %n hidden_::_including %n hidden_" : ["%n개의 숨겨진 파일 포함"],
"You don’t have permission to upload or create files here" : "여기에 파일을 업로드하거나 만들 권한이 없습니다",
"_Uploading %n file_::_Uploading %n files_" : ["파일 %n개 업로드 중"],
"New" : "새로 만들기",
@@ -61,27 +64,40 @@
"_%n byte_::_%n bytes_" : ["%n바이트"],
"Favorited" : "책갈피에 추가됨",
"Favorite" : "즐겨찾기",
- "Local link" : "로컬 링크",
+ "Copy local link" : "로컬 링크 복사",
"Folder" : "폴더",
"New folder" : "새 폴더",
"Upload" : "업로드",
"An error occurred while trying to update the tags" : "태그를 업데이트하는 중 오류 발생",
+ "Added to favorites" : "즐겨찾기에 추가됨",
+ "Removed from favorites" : "즐겨찾기에서 삭제됨",
+ "You added {file} to your favorites" : "내가 {file}을(를) 즐겨찾기에 추가함",
+ "You removed {file} from your favorites" : "내가 {file}을(를) 즐겨찾기에서 삭제함",
+ "Created by {user}" : "{user} 님이 만듬",
+ "Changed by {user}" : "{user} 님이 변경함",
+ "Deleted by {user}" : "{user} 님이 삭제함",
+ "Restored by {user}" : "{user} 님이 복원함",
+ "Renamed by {user}" : "{user} 님이 이름을 변경함",
+ "Moved by {user}" : "{user} 님이 이동함",
+ "You created {file}" : "내가 {file}을(를) 만듬",
+ "{user} created {file}" : "{user} 님이 {file}을(를) 만듬",
+ "{file} was created in a public folder" : "공유 폴더에 {file} 이(가) 생성됨",
+ "You changed {file}" : "내가 {file} 을(를) 변경함",
+ "{user} changed {file}" : "{user} 님이 {file} 을(를) 변경함",
+ "You deleted {file}" : "내가 {file} 을(를) 삭제함",
+ "{user} deleted {file}" : "{user} 님이 {file} 을(를) 삭제함",
+ "You restored {file}" : "내가 {file} 을(를) 복원함",
+ "{user} restored {file}" : "{user} 님이 {file} 을(를) 복원함",
+ "You renamed {oldfile} to {newfile}" : "내가 {oldfile} 을(를) {newfile} 로 이름을 바꿈",
+ "{user} renamed {oldfile} to {newfile}" : "{user} 님이 {oldfile} 을(를) {newfile} 로 이름을 바꿈",
+ "You moved {oldfile} to {newfile}" : "내가 {oldfile} 을(를) {newfile} 로 이동함",
+ "{user} moved {oldfile} to {newfile}" : "{user} 님이 {oldfile} 을(를) {newfile} 로 이동함",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "파일이 <strong>즐겨찾기</strong>에서 추가 또는 삭제됨",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "파일이나 폴더가 <strong>변경되거나</strong> <strong>이름이 바뀜</strong>",
"A new file or folder has been <strong>created</strong>" : "새 파일이나 폴더가 <strong>생성됨</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "새 파일이나 폴더가 <strong>삭제됨</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>즐겨찾는 파일</strong>의 생성 및 변경 사항에 대한 알림을 줄일 수 있습니다<em>(스트림에서만)</em>",
- "A file or folder has been <strong>deleted</strong>" : "파일이나 폴더가 <strong>삭제됨</strong>",
- "A file or folder has been <strong>restored</strong>" : "파일이나 폴더가 <strong>복원됨</strong>",
- "You created %1$s" : "내가 %1$s을(를) 생성함",
- "%2$s created %1$s" : "%2$s 님이 %1$s을(를) 생성함",
- "%1$s was created in a public folder" : "공유 폴더에 %1$s 생성됨",
- "You changed %1$s" : "내가 %1$s을(를) 변경함",
- "%2$s changed %1$s" : "%2$s 님이 %1$s을(를) 변경함",
- "You deleted %1$s" : "내가 %1$s을(를) 삭제함",
- "%2$s deleted %1$s" : "%2$s 님이 %1$s을(를) 삭제함",
- "You restored %1$s" : "내가 %1$s을(를) 복원함",
- "%2$s restored %1$s" : "%2$s 님이 %1$s을(를) 복원함",
- "Changed by %2$s" : "%2$s 님이 변경함",
- "Deleted by %2$s" : "%2$s 님이 삭제함",
- "Restored by %2$s" : "%2$s 님이 복원함",
+ "A new file or folder has been <strong>restored</strong>" : "새 파일이나 폴더가 <strong>복원됨</strong>",
"Upload (max. %s)" : "업로드(최대 %s)",
"File handling" : "파일 처리",
"Maximum upload size" : "최대 업로드 크기",
@@ -92,6 +108,7 @@
"Settings" : "설정",
"Show hidden files" : "숨겨진 파일보기",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "이 주소를 사용하여 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">WebDAV를 통해 파일에 접근할 수 있습니다</a>",
"No files in here" : "여기에 파일 없음",
"Upload some content or sync with your devices!" : "파일을 업로드하거나 장치와 동기화하십시오!",
"No entries found in this folder" : "이 폴더에 항목 없음",
@@ -100,6 +117,11 @@
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
"No favorites" : "책갈피 없음",
"Files and folders you mark as favorite will show up here" : "책갈피에 추가한 파일과 폴더가 여기에 나타납니다",
+ "Shared with you" : "나와 공유됨",
+ "Shared with others" : "다른 사람과 공유됨",
+ "Shared by link" : "링크로 공유됨",
+ "Tags" : "태그",
+ "Deleted files" : "삭제된 파일",
"Text file" : "텍스트 파일",
"New text file.txt" : "새 텍스트 파일.txt",
"Storage not available" : "저장소를 사용할 수 없음",
@@ -121,9 +143,32 @@
"Total file size {size1} exceeds upload limit {size2}" : "총 파일 크기 {size1}이(가) 업로드 제한 {size2}을(를) 초과함",
"Error uploading file \"{fileName}\": {message}" : "\"{fileName}\"을(를) 업로드할 수 없음: {message}",
"Could not get result from server." : "서버에서 결과를 가져올 수 없습니다.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} 시간 {plural_s} 남음",
+ "{hours}:{minutes}h" : "{hours}:{minutes} 시간",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} 분 남음",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} 분",
+ "{seconds} second{plural_s} left" : "{seconds} 초 남음",
+ "{seconds}s" : "{seconds}초",
+ "Any moment now..." : "조금 남음",
+ "Soon..." : "곧...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
"No entries in this folder match '{filter}'" : "이 폴더에 '{filter}'와(과) 일치하는 항목 없음",
+ "Local link" : "로컬 링크",
"{newname} already exists" : "{newname} 항목이 이미 존재함",
"A file or folder has been <strong>changed</strong>" : "파일이나 폴더가 <strong>변경됨</strong>",
- "Cancel upload" : "업로드 취소"
+ "A file or folder has been <strong>deleted</strong>" : "파일이나 폴더가 <strong>삭제됨</strong>",
+ "A file or folder has been <strong>restored</strong>" : "파일이나 폴더가 <strong>복원됨</strong>",
+ "You created %1$s" : "내가 %1$s을(를) 생성함",
+ "%2$s created %1$s" : "%2$s 님이 %1$s을(를) 생성함",
+ "%1$s was created in a public folder" : "공유 폴더에 %1$s 생성됨",
+ "You changed %1$s" : "내가 %1$s을(를) 변경함",
+ "%2$s changed %1$s" : "%2$s 님이 %1$s을(를) 변경함",
+ "You deleted %1$s" : "내가 %1$s을(를) 삭제함",
+ "%2$s deleted %1$s" : "%2$s 님이 %1$s을(를) 삭제함",
+ "You restored %1$s" : "내가 %1$s을(를) 복원함",
+ "%2$s restored %1$s" : "%2$s 님이 %1$s을(를) 복원함",
+ "Changed by %2$s" : "%2$s 님이 변경함",
+ "Deleted by %2$s" : "%2$s 님이 삭제함",
+ "Restored by %2$s" : "%2$s 님이 복원함"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js
index 35f1e357ee1..c19df9fb5f3 100644
--- a/apps/files/l10n/lv.js
+++ b/apps/files/l10n/lv.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "Glabātuve īslaicīgi nav pieejama",
"Storage invalid" : "Nepareiza glabātuve",
"Unknown error" : "Nezināma kļūda",
- "Files" : "Datnes",
"All files" : "Visas datnes",
"Recent" : "Nesenās",
"File could not be found" : "Datni nevar atrast",
@@ -14,24 +14,21 @@ OC.L10N.register(
"Upload cancelled." : "Augšupielāde ir atcelta.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Neizdodas augšupielādēt {filename}, jo tā ir vai nu mape vai 0 baitu saturoša datne.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nav pietiekami daudz brīvas vietas. Tiek augšupielādēti {size1}, bet pieejami tikai {size2}",
+ "Target folder \"{dir}\" does not exist any more" : "Mape \"{dir}\" vairs neeksistē",
+ "Not enough free space" : "Nav pietiekami daudz brīvas vietas",
"Uploading..." : "Augšupielādē...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} stunda{plural_s} atlicis",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minūte{plural_s} atlicis",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} sekunde{plural_s} atlicis",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Jebkurā brīdī tagad...",
- "Soon..." : "Drīz...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} no {totalSize} ({bitrate})",
- "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.",
"Actions" : "Darbības",
"Download" : "Lejupielādēt",
"Rename" : "Pārsaukt",
+ "Move" : "Pārvietot",
+ "Target folder" : "Mērķa mape",
"Delete" : "Dzēst",
"Disconnect storage" : "Atvienot glabātuvi",
"Unshare" : "Pārtraukt koplietošanu",
+ "Could not load info for file \"{file}\"" : "Nevar ielādēt informāciju par failu \"{file}\"",
+ "Files" : "Datnes",
"Details" : "Detaļas",
"Select" : "Norādīt",
"Pending" : "Gaida savu kārtu",
@@ -48,12 +45,14 @@ OC.L10N.register(
"Could not create file \"{file}\" because it already exists" : "Nevarēja izveidot datni \"{file}\", jo tā jau eksistē",
"Could not create folder \"{dir}\" because it already exists" : "Nevarēja izveidot mapi \"{dir}\", jo tā jau eksistē",
"Error deleting file \"{fileName}\"." : "Kļūda dzēšot datni \"{fileName}\".",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Nav nekas atrasts citā mapēs '{tag}{filter}{endtag}'",
"Name" : "Nosaukums",
"Size" : "Izmērs",
"Modified" : "Mainīts",
"_%n folder_::_%n folders_" : ["%n mapes","%n mape","%n mapes"],
"_%n file_::_%n files_" : ["%n datnes","%n datne","%n datnes"],
"{dirs} and {files}" : "{dirs} un {files}",
+ "_including %n hidden_::_including %n hidden_" : ["ieskaitot %n paslēptos","ieskaitot %n paslēptos","ieskaitot %n paslēptos"],
"You don’t have permission to upload or create files here" : "Jums nav tiesību šeit augšupielādēt vai veidot datnes",
"_Uploading %n file_::_Uploading %n files_" : ["%n","Augšupielāde %n failu","Augšupielādē %n datnes"],
"New" : "Jauna",
@@ -69,12 +68,41 @@ 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",
"An error occurred while trying to update the tags" : "Notika kļūda atjaunojot atzīmi",
+ "Added to favorites" : "Pievienot izlasei",
+ "Removed from favorites" : "Noņemt no izlases",
+ "You added {file} to your favorites" : "Pievienoji {file} savai izlasei",
+ "You removed {file} from your favorites" : "Noņēmi {file} no savas izlases",
+ "File changes" : "Faila izmaiņas",
+ "Created by {user}" : "Izveidoja {user}",
+ "Changed by {user}" : "Izmainīja {user}",
+ "Deleted by {user}" : "Dzēsa {user}",
+ "Restored by {user}" : "Atjaunoja {user}",
+ "Renamed by {user}" : "Pārdēvēja {user}",
+ "Moved by {user}" : "Pārvietoja {user}",
+ "You created {file}" : "Izveidoji {file}",
+ "{user} created {file}" : "{user} izveidoja {file}",
+ "{file} was created in a public folder" : "{file} tika izveidots publiskajā mapē",
+ "You changed {file}" : "Izmainīji {file}",
+ "{user} changed {file}" : "{user} mainīts {file}",
+ "You deleted {file}" : "Tu izdzēsi {file}",
+ "{user} deleted {file}" : "{user} izdzēsa {file}",
+ "You restored {file}" : "Tu atjaunoji {file}",
+ "{user} restored {file}" : "{user} atjaunoja {file}",
+ "You renamed {oldfile} to {newfile}" : "Pārdēvēji {oldfile} uz {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} pārdēvēja {oldfile} uz {newfile}",
+ "You moved {oldfile} to {newfile}" : "Pārvietoji {oldfile} uz {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} pārvietoja {oldfile} uz {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Fails ir pievienots vai noņemts no jūsu <strong>izlases</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Fails vai mape tika <strong>mainīts</strong> vai <strong>pārsaukts</strong>",
"A new file or folder has been <strong>created</strong>" : "<strong>Izveidota</strong> jauna datne vai mape",
+ "A new file or folder has been <strong>deleted</strong>" : "Fails vai mape tika <strong>dzēsts</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitēt ziņojumus par jūsu <strong>iecienīto datņu</strong> izveidošanu un izmaiņām <em>(tikai datu straumei)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "Fails vai mape tika <strong>atjaunots</strong>",
"Upload (max. %s)" : "Augšupielādēt (maks. %s)",
"File handling" : "Datņu pārvaldība",
"Maximum upload size" : "Maksimālais datņu augšupielādes apjoms",
@@ -94,6 +122,11 @@ OC.L10N.register(
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu",
"No favorites" : "Nav favorītu",
"Files and folders you mark as favorite will show up here" : "Datnes un mapes, ko atzīmēsiet kā favorītus, tiks rādīti šeit",
+ "Shared with you" : "Koplietots ar tevi",
+ "Shared with others" : "Koplietots ar citiem",
+ "Shared by link" : "Koplietots ar saiti",
+ "Tags" : "Atzīmes",
+ "Deleted files" : "Dzēstās datnes",
"Text file" : "Teksta datne",
"New text file.txt" : "Jauna teksta datne.txt",
"Storage not available" : "Glabātuve nav pieejama",
@@ -115,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Kopējais datnes izmērs {size1} pārsniedz augšupielādes ierobežojumu {size2}",
"Error uploading file \"{fileName}\": {message}" : "Kļūda augšupielādējot datni \"{fileName}\": {message}",
"Could not get result from server." : "Nevar saņemt rezultātus no servera",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} stunda{plural_s} atlicis",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minūte{plural_s} atlicis",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} sekunde{plural_s} atlicis",
+ "{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.",
"No entries in this folder match '{filter}'" : "Šajā mapē nekas nav atrasts, meklējot pēc '{filter}'",
"Local link" : "Lokāla saite",
"{newname} already exists" : "{newname} jau eksistē",
@@ -132,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s atjaunoja %1$s",
"Changed by %2$s" : "Izmainīja %2$s",
"Deleted by %2$s" : "Dzēsa %2$s",
- "Restored by %2$s" : "Atjaunoja %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Izmanto šo adresi, lai <a href=\"%s\" target=\"_blank\">sasniegtu savas datnes caur WebDAV</a>",
- "Cancel upload" : "Atcelt augšupielādi"
+ "Restored by %2$s" : "Atjaunoja %2$s"
},
"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 4d161a26cda..7e27a04d4c7 100644
--- a/apps/files/l10n/lv.json
+++ b/apps/files/l10n/lv.json
@@ -1,7 +1,7 @@
{ "translations": {
+ "Storage is temporarily not available" : "Glabātuve īslaicīgi nav pieejama",
"Storage invalid" : "Nepareiza glabātuve",
"Unknown error" : "Nezināma kļūda",
- "Files" : "Datnes",
"All files" : "Visas datnes",
"Recent" : "Nesenās",
"File could not be found" : "Datni nevar atrast",
@@ -12,24 +12,21 @@
"Upload cancelled." : "Augšupielāde ir atcelta.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Neizdodas augšupielādēt {filename}, jo tā ir vai nu mape vai 0 baitu saturoša datne.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nav pietiekami daudz brīvas vietas. Tiek augšupielādēti {size1}, bet pieejami tikai {size2}",
+ "Target folder \"{dir}\" does not exist any more" : "Mape \"{dir}\" vairs neeksistē",
+ "Not enough free space" : "Nav pietiekami daudz brīvas vietas",
"Uploading..." : "Augšupielādē...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} stunda{plural_s} atlicis",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minūte{plural_s} atlicis",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} sekunde{plural_s} atlicis",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Jebkurā brīdī tagad...",
- "Soon..." : "Drīz...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} no {totalSize} ({bitrate})",
- "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.",
"Actions" : "Darbības",
"Download" : "Lejupielādēt",
"Rename" : "Pārsaukt",
+ "Move" : "Pārvietot",
+ "Target folder" : "Mērķa mape",
"Delete" : "Dzēst",
"Disconnect storage" : "Atvienot glabātuvi",
"Unshare" : "Pārtraukt koplietošanu",
+ "Could not load info for file \"{file}\"" : "Nevar ielādēt informāciju par failu \"{file}\"",
+ "Files" : "Datnes",
"Details" : "Detaļas",
"Select" : "Norādīt",
"Pending" : "Gaida savu kārtu",
@@ -46,12 +43,14 @@
"Could not create file \"{file}\" because it already exists" : "Nevarēja izveidot datni \"{file}\", jo tā jau eksistē",
"Could not create folder \"{dir}\" because it already exists" : "Nevarēja izveidot mapi \"{dir}\", jo tā jau eksistē",
"Error deleting file \"{fileName}\"." : "Kļūda dzēšot datni \"{fileName}\".",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Nav nekas atrasts citā mapēs '{tag}{filter}{endtag}'",
"Name" : "Nosaukums",
"Size" : "Izmērs",
"Modified" : "Mainīts",
"_%n folder_::_%n folders_" : ["%n mapes","%n mape","%n mapes"],
"_%n file_::_%n files_" : ["%n datnes","%n datne","%n datnes"],
"{dirs} and {files}" : "{dirs} un {files}",
+ "_including %n hidden_::_including %n hidden_" : ["ieskaitot %n paslēptos","ieskaitot %n paslēptos","ieskaitot %n paslēptos"],
"You don’t have permission to upload or create files here" : "Jums nav tiesību šeit augšupielādēt vai veidot datnes",
"_Uploading %n file_::_Uploading %n files_" : ["%n","Augšupielāde %n failu","Augšupielādē %n datnes"],
"New" : "Jauna",
@@ -67,12 +66,41 @@
"_%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",
"An error occurred while trying to update the tags" : "Notika kļūda atjaunojot atzīmi",
+ "Added to favorites" : "Pievienot izlasei",
+ "Removed from favorites" : "Noņemt no izlases",
+ "You added {file} to your favorites" : "Pievienoji {file} savai izlasei",
+ "You removed {file} from your favorites" : "Noņēmi {file} no savas izlases",
+ "File changes" : "Faila izmaiņas",
+ "Created by {user}" : "Izveidoja {user}",
+ "Changed by {user}" : "Izmainīja {user}",
+ "Deleted by {user}" : "Dzēsa {user}",
+ "Restored by {user}" : "Atjaunoja {user}",
+ "Renamed by {user}" : "Pārdēvēja {user}",
+ "Moved by {user}" : "Pārvietoja {user}",
+ "You created {file}" : "Izveidoji {file}",
+ "{user} created {file}" : "{user} izveidoja {file}",
+ "{file} was created in a public folder" : "{file} tika izveidots publiskajā mapē",
+ "You changed {file}" : "Izmainīji {file}",
+ "{user} changed {file}" : "{user} mainīts {file}",
+ "You deleted {file}" : "Tu izdzēsi {file}",
+ "{user} deleted {file}" : "{user} izdzēsa {file}",
+ "You restored {file}" : "Tu atjaunoji {file}",
+ "{user} restored {file}" : "{user} atjaunoja {file}",
+ "You renamed {oldfile} to {newfile}" : "Pārdēvēji {oldfile} uz {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} pārdēvēja {oldfile} uz {newfile}",
+ "You moved {oldfile} to {newfile}" : "Pārvietoji {oldfile} uz {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} pārvietoja {oldfile} uz {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Fails ir pievienots vai noņemts no jūsu <strong>izlases</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Fails vai mape tika <strong>mainīts</strong> vai <strong>pārsaukts</strong>",
"A new file or folder has been <strong>created</strong>" : "<strong>Izveidota</strong> jauna datne vai mape",
+ "A new file or folder has been <strong>deleted</strong>" : "Fails vai mape tika <strong>dzēsts</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitēt ziņojumus par jūsu <strong>iecienīto datņu</strong> izveidošanu un izmaiņām <em>(tikai datu straumei)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "Fails vai mape tika <strong>atjaunots</strong>",
"Upload (max. %s)" : "Augšupielādēt (maks. %s)",
"File handling" : "Datņu pārvaldība",
"Maximum upload size" : "Maksimālais datņu augšupielādes apjoms",
@@ -92,6 +120,11 @@
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu",
"No favorites" : "Nav favorītu",
"Files and folders you mark as favorite will show up here" : "Datnes un mapes, ko atzīmēsiet kā favorītus, tiks rādīti šeit",
+ "Shared with you" : "Koplietots ar tevi",
+ "Shared with others" : "Koplietots ar citiem",
+ "Shared by link" : "Koplietots ar saiti",
+ "Tags" : "Atzīmes",
+ "Deleted files" : "Dzēstās datnes",
"Text file" : "Teksta datne",
"New text file.txt" : "Jauna teksta datne.txt",
"Storage not available" : "Glabātuve nav pieejama",
@@ -113,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Kopējais datnes izmērs {size1} pārsniedz augšupielādes ierobežojumu {size2}",
"Error uploading file \"{fileName}\": {message}" : "Kļūda augšupielādējot datni \"{fileName}\": {message}",
"Could not get result from server." : "Nevar saņemt rezultātus no servera",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} stunda{plural_s} atlicis",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minūte{plural_s} atlicis",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} sekunde{plural_s} atlicis",
+ "{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.",
"No entries in this folder match '{filter}'" : "Šajā mapē nekas nav atrasts, meklējot pēc '{filter}'",
"Local link" : "Lokāla saite",
"{newname} already exists" : "{newname} jau eksistē",
@@ -130,8 +172,6 @@
"%2$s restored %1$s" : "%2$s atjaunoja %1$s",
"Changed by %2$s" : "Izmainīja %2$s",
"Deleted by %2$s" : "Dzēsa %2$s",
- "Restored by %2$s" : "Atjaunoja %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Izmanto šo adresi, lai <a href=\"%s\" target=\"_blank\">sasniegtu savas datnes caur WebDAV</a>",
- "Cancel upload" : "Atcelt augšupielādi"
+ "Restored by %2$s" : "Atjaunoja %2$s"
},"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_NO.js b/apps/files/l10n/nb_NO.js
index 02cd27bda04..807a9c141e6 100644
--- a/apps/files/l10n/nb_NO.js
+++ b/apps/files/l10n/nb_NO.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "Lagring er midlertidig utilgjengelig",
"Storage invalid" : "Lagringsplass ugyldig",
"Unknown error" : "Ukjent feil",
- "Files" : "Filer",
"All files" : "Alle filer",
"Recent" : "Nylig",
"File could not be found" : "Filen ble ikke funnet",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "Ikke nok ledig diskplass",
"Uploading..." : "Laster opp...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timer{plural_s} igjen",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minutter{plural_s} igjen",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} sekunder{plural_s} igjen",
- "{seconds}s" : "{seconds}er",
- "Any moment now..." : "Hvert øyeblikk nå...",
- "Soon..." : "Snart...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
"Actions" : "Handlinger",
"Download" : "Last ned",
"Rename" : "Gi nytt navn",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "Slett",
"Disconnect storage" : "Koble fra lagring",
"Unshare" : "Avslutt deling",
+ "Could not load info for file \"{file}\"" : "Klarte ikke å hente informasjon som filen \"{file}\"",
+ "Files" : "Filer",
"Details" : "Detaljer",
"Select" : "Velg",
"Pending" : "Venter",
@@ -69,21 +61,48 @@ OC.L10N.register(
"Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!",
"Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)",
- "Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ({usedSpacePercent}%)",
"_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"],
"Favorited" : "Er favoritt",
"Favorite" : "Gjør til favoritt",
+ "Copy local link" : "Kopier lokal lenke",
"Folder" : "Mappe",
"New folder" : "Ny mappe",
"Upload" : "Last opp",
"An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av merkelappene",
+ "Added to favorites" : "Lagt til i favoritter",
+ "Removed from favorites" : "Fjernet fra favoritter",
+ "You added {file} to your favorites" : "Du la til {file} i dine favoritter",
+ "You removed {file} from your favorites" : "Du fjernet {file} fra dine favoritter",
"File changes" : "Filendringer",
+ "Created by {user}" : "Opprettet av {user}",
+ "Changed by {user}" : "Endret av {user}",
+ "Deleted by {user}" : "Slettet av {user}",
+ "Restored by {user}" : "Gjenopprettet av {user}",
+ "Renamed by {user}" : "Navn endret av {user}",
+ "Moved by {user}" : "Flyttet av {user}",
+ "You created {file}" : "Du opprettet {file}",
+ "{user} created {file}" : "{user} opprettet {file}",
+ "{file} was created in a public folder" : "{file} ble opprettet i en offentlig mappe",
+ "You changed {file}" : "Du endret {file}",
+ "{user} changed {file}" : "{user} endret {file}",
+ "You deleted {file}" : "Du slettet {file}",
+ "{user} deleted {file}" : "{user} slettet {file}",
+ "You restored {file}" : "Du gjenopprettet {file}",
+ "{user} restored {file}" : "{user} gjenopprettet {file}",
+ "You renamed {oldfile} to {newfile}" : "Du endret navn på {oldfile} til {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} endret navn på {oldfile} til {newfile}",
+ "You moved {oldfile} to {newfile}" : "Du flyttet {oldfile} til {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} flyttet {oldfile} til {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "En fil har blitt lagt til eller fjernet fra dine <strong>favoritter</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "En fil eller mappe ble <strong>endret</strong> eller <strong>omdøpt</strong>",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "En ny fil eller mappe har blitt <strong>slettet</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begrens varsling om oppretting og endringer til <strong>favorittfilene</strong> dine <em>(Kun strøm)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "En ny fil eller mappe har blitt <strong>gjenopprettet</strong>",
"Upload (max. %s)" : "Opplasting (maks. %s)",
"File handling" : "Filhåndtering",
"Maximum upload size" : "Største opplastingsstørrelse",
@@ -129,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Total filstørrelse {size1} overstiger grense for opplasting {size2}",
"Error uploading file \"{fileName}\": {message}" : "Feil ved opplasting av fil \"{fileName}\": {message}",
"Could not get result from server." : "Fikk ikke resultat fra tjeneren.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timer{plural_s} igjen",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minutter{plural_s} igjen",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} sekunder{plural_s} igjen",
+ "{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.",
"No entries in this folder match '{filter}'" : "Ingen oppføringer i denne mappen stemmer med '{filter}'",
"Local link" : "Lokal lenke",
"{newname} already exists" : "{newname} finnes allerede",
@@ -146,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s gjenopprettet %1$s",
"Changed by %2$s" : "Endret av %2$s",
"Deleted by %2$s" : "Slettet av %2$s",
- "Restored by %2$s" : "Gjenopprettet av %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk følgende adresse for <a href=\"%s\" target=\"_blank\">tilgang til filene via WebDAV</a>",
- "Cancel upload" : "Avbryt opplasting"
+ "Restored by %2$s" : "Gjenopprettet av %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json
index d6a055e3b92..c32c5d80e3d 100644
--- a/apps/files/l10n/nb_NO.json
+++ b/apps/files/l10n/nb_NO.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Lagring er midlertidig utilgjengelig",
"Storage invalid" : "Lagringsplass ugyldig",
"Unknown error" : "Ukjent feil",
- "Files" : "Filer",
"All files" : "Alle filer",
"Recent" : "Nylig",
"File could not be found" : "Filen ble ikke funnet",
@@ -17,16 +16,7 @@
"Not enough free space" : "Ikke nok ledig diskplass",
"Uploading..." : "Laster opp...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timer{plural_s} igjen",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minutter{plural_s} igjen",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} sekunder{plural_s} igjen",
- "{seconds}s" : "{seconds}er",
- "Any moment now..." : "Hvert øyeblikk nå...",
- "Soon..." : "Snart...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
"Actions" : "Handlinger",
"Download" : "Last ned",
"Rename" : "Gi nytt navn",
@@ -35,6 +25,8 @@
"Delete" : "Slett",
"Disconnect storage" : "Koble fra lagring",
"Unshare" : "Avslutt deling",
+ "Could not load info for file \"{file}\"" : "Klarte ikke å hente informasjon som filen \"{file}\"",
+ "Files" : "Filer",
"Details" : "Detaljer",
"Select" : "Velg",
"Pending" : "Venter",
@@ -67,21 +59,48 @@
"Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!",
"Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)",
- "Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ({usedSpacePercent}%)",
"_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"],
"Favorited" : "Er favoritt",
"Favorite" : "Gjør til favoritt",
+ "Copy local link" : "Kopier lokal lenke",
"Folder" : "Mappe",
"New folder" : "Ny mappe",
"Upload" : "Last opp",
"An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av merkelappene",
+ "Added to favorites" : "Lagt til i favoritter",
+ "Removed from favorites" : "Fjernet fra favoritter",
+ "You added {file} to your favorites" : "Du la til {file} i dine favoritter",
+ "You removed {file} from your favorites" : "Du fjernet {file} fra dine favoritter",
"File changes" : "Filendringer",
+ "Created by {user}" : "Opprettet av {user}",
+ "Changed by {user}" : "Endret av {user}",
+ "Deleted by {user}" : "Slettet av {user}",
+ "Restored by {user}" : "Gjenopprettet av {user}",
+ "Renamed by {user}" : "Navn endret av {user}",
+ "Moved by {user}" : "Flyttet av {user}",
+ "You created {file}" : "Du opprettet {file}",
+ "{user} created {file}" : "{user} opprettet {file}",
+ "{file} was created in a public folder" : "{file} ble opprettet i en offentlig mappe",
+ "You changed {file}" : "Du endret {file}",
+ "{user} changed {file}" : "{user} endret {file}",
+ "You deleted {file}" : "Du slettet {file}",
+ "{user} deleted {file}" : "{user} slettet {file}",
+ "You restored {file}" : "Du gjenopprettet {file}",
+ "{user} restored {file}" : "{user} gjenopprettet {file}",
+ "You renamed {oldfile} to {newfile}" : "Du endret navn på {oldfile} til {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} endret navn på {oldfile} til {newfile}",
+ "You moved {oldfile} to {newfile}" : "Du flyttet {oldfile} til {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} flyttet {oldfile} til {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "En fil har blitt lagt til eller fjernet fra dine <strong>favoritter</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "En fil eller mappe ble <strong>endret</strong> eller <strong>omdøpt</strong>",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "En ny fil eller mappe har blitt <strong>slettet</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begrens varsling om oppretting og endringer til <strong>favorittfilene</strong> dine <em>(Kun strøm)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "En ny fil eller mappe har blitt <strong>gjenopprettet</strong>",
"Upload (max. %s)" : "Opplasting (maks. %s)",
"File handling" : "Filhåndtering",
"Maximum upload size" : "Største opplastingsstørrelse",
@@ -127,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Total filstørrelse {size1} overstiger grense for opplasting {size2}",
"Error uploading file \"{fileName}\": {message}" : "Feil ved opplasting av fil \"{fileName}\": {message}",
"Could not get result from server." : "Fikk ikke resultat fra tjeneren.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timer{plural_s} igjen",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minutter{plural_s} igjen",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} sekunder{plural_s} igjen",
+ "{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.",
"No entries in this folder match '{filter}'" : "Ingen oppføringer i denne mappen stemmer med '{filter}'",
"Local link" : "Lokal lenke",
"{newname} already exists" : "{newname} finnes allerede",
@@ -144,8 +172,6 @@
"%2$s restored %1$s" : "%2$s gjenopprettet %1$s",
"Changed by %2$s" : "Endret av %2$s",
"Deleted by %2$s" : "Slettet av %2$s",
- "Restored by %2$s" : "Gjenopprettet av %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk følgende adresse for <a href=\"%s\" target=\"_blank\">tilgang til filene via WebDAV</a>",
- "Cancel upload" : "Avbryt opplasting"
+ "Restored by %2$s" : "Gjenopprettet av %2$s"
},"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 db2af9cf43b..77cf7b1b938 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "Opslag is tijdelijk niet beschikbaar",
"Storage invalid" : "Opslag ongeldig",
"Unknown error" : "Onbekende fout",
- "Files" : "Bestanden",
"All files" : "Alle bestanden",
"Recent" : "Recent",
"File could not be found" : "Bestand kon niet worden gevonden",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "Onvoldoende vrije ruimte",
"Uploading..." : "Uploaden...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} uur{plural_s} over",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuten{plural_s} over",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} seconden{plural_s} over",
- "{seconds}s" : "{seconds}en",
- "Any moment now..." : "Heel snel nu...",
- "Soon..." : "Binnenkort...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} van {totalSize} ({bitrate})",
- "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.",
"Actions" : "Acties",
"Download" : "Downloaden",
"Rename" : "Naam wijzigen",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "Verwijderen",
"Disconnect storage" : "Verbinding met opslag verbreken",
"Unshare" : "Stop met delen",
+ "Could not load info for file \"{file}\"" : "Kon geen informatie laden voor bestand \"{file}\"",
+ "Files" : "Bestanden",
"Details" : "Details",
"Select" : "Selecteer",
"Pending" : "In behandeling",
@@ -156,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Totale bestandsgrootte {size1} groter dan uploadlimiet {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fout tijdens het uploaden van bestand \"{fileName}\": {message}",
"Could not get result from server." : "Kon het resultaat van de server niet terugkrijgen.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} uur{plural_s} over",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuten{plural_s} over",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} seconden{plural_s} over",
+ "{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.",
"No entries in this folder match '{filter}'" : "Niets in deze map komt overeen met '{filter}'",
"Local link" : "Lokale link",
"{newname} already exists" : "{newname} bestaat al",
@@ -173,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s herstelde %1$s",
"Changed by %2$s" : "Gewijzigd door %2$s",
"Deleted by %2$s" : "Verwijderd door %2$s",
- "Restored by %2$s" : "Hersteld door %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">om je bestanden via WebDAV te benaderen</a>",
- "Cancel upload" : "Upload annuleren"
+ "Restored by %2$s" : "Hersteld door %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index 12349fb41ca..e0f0d44e6e6 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Opslag is tijdelijk niet beschikbaar",
"Storage invalid" : "Opslag ongeldig",
"Unknown error" : "Onbekende fout",
- "Files" : "Bestanden",
"All files" : "Alle bestanden",
"Recent" : "Recent",
"File could not be found" : "Bestand kon niet worden gevonden",
@@ -17,16 +16,7 @@
"Not enough free space" : "Onvoldoende vrije ruimte",
"Uploading..." : "Uploaden...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} uur{plural_s} over",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuten{plural_s} over",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} seconden{plural_s} over",
- "{seconds}s" : "{seconds}en",
- "Any moment now..." : "Heel snel nu...",
- "Soon..." : "Binnenkort...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} van {totalSize} ({bitrate})",
- "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.",
"Actions" : "Acties",
"Download" : "Downloaden",
"Rename" : "Naam wijzigen",
@@ -35,6 +25,8 @@
"Delete" : "Verwijderen",
"Disconnect storage" : "Verbinding met opslag verbreken",
"Unshare" : "Stop met delen",
+ "Could not load info for file \"{file}\"" : "Kon geen informatie laden voor bestand \"{file}\"",
+ "Files" : "Bestanden",
"Details" : "Details",
"Select" : "Selecteer",
"Pending" : "In behandeling",
@@ -154,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Totale bestandsgrootte {size1} groter dan uploadlimiet {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fout tijdens het uploaden van bestand \"{fileName}\": {message}",
"Could not get result from server." : "Kon het resultaat van de server niet terugkrijgen.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} uur{plural_s} over",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuten{plural_s} over",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} seconden{plural_s} over",
+ "{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.",
"No entries in this folder match '{filter}'" : "Niets in deze map komt overeen met '{filter}'",
"Local link" : "Lokale link",
"{newname} already exists" : "{newname} bestaat al",
@@ -171,8 +172,6 @@
"%2$s restored %1$s" : "%2$s herstelde %1$s",
"Changed by %2$s" : "Gewijzigd door %2$s",
"Deleted by %2$s" : "Verwijderd door %2$s",
- "Restored by %2$s" : "Hersteld door %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">om je bestanden via WebDAV te benaderen</a>",
- "Cancel upload" : "Upload annuleren"
+ "Restored by %2$s" : "Hersteld door %2$s"
},"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 df171605ce2..ab84ccc90ac 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -4,9 +4,8 @@ OC.L10N.register(
"Storage is temporarily not available" : "Przechowywanie jest czasowo niedostępne",
"Storage invalid" : "Pamięć nieprawidłowa",
"Unknown error" : "Nieznany błąd",
- "Files" : "Pliki",
"All files" : "Wszystkie pliki",
- "Recent" : "Ostatni",
+ "Recent" : "Ostatnie",
"File could not be found" : "Nie można odnaleźć pliku",
"Home" : "Dom",
"Close" : "Zamknij",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "Za mało wolnego miejsca",
"Uploading..." : "Wgrywanie....",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Pozostało {hours}:{minutes}:{seconds} hour{plural_s} ",
- "{hours}:{minutes}h" : "{hours}:{minutes}godz.",
- "{minutes}:{seconds} minute{plural_s} left" : "Pozostało {minutes}:{seconds} minute{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}min.",
- "{seconds} second{plural_s} left" : "Pozostało sekund: {seconds}",
- "{seconds}s" : "{seconds} s",
- "Any moment now..." : "Jeszcze chwilę...",
- "Soon..." : "Wkrótce...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
- "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.",
"Actions" : "Akcje",
"Download" : "Pobierz",
"Rename" : "Zmień nazwę",
@@ -36,7 +26,9 @@ OC.L10N.register(
"Target folder" : "Folder docelowy",
"Delete" : "Usuń",
"Disconnect storage" : "Odłącz magazyn",
- "Unshare" : "Zatrzymaj współdzielenie",
+ "Unshare" : "Zatrzymaj udostępnianie",
+ "Could not load info for file \"{file}\"" : "Nie można było załadować informacji o pliku \"{file}\"",
+ "Files" : "Pliki",
"Details" : "Szczegóły",
"Select" : "Wybierz",
"Pending" : "Oczekujące",
@@ -57,12 +49,12 @@ OC.L10N.register(
"Name" : "Nazwa",
"Size" : "Rozmiar",
"Modified" : "Modyfikacja",
- "_%n folder_::_%n folders_" : ["%n katalog","%n katalogi","%n katalogów"],
- "_%n file_::_%n files_" : ["%n plik","%n pliki","%n plików"],
+ "_%n folder_::_%n folders_" : ["%n katalog","%n katalogi","%n katalogów","%n katalogów"],
+ "_%n file_::_%n files_" : ["%n plik","%n pliki","%n plików","%n plików"],
"{dirs} and {files}" : "{dirs} i {files}",
- "_including %n hidden_::_including %n hidden_" : ["w tym %n ukryty","w tym %n ukryte","w tym %n ukrytych"],
+ "_including %n hidden_::_including %n hidden_" : ["w tym %n ukryty","w tym %n ukryte","w tym %n ukrytych","w tym %n ukrytych"],
"You don’t have permission to upload or create files here" : "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu",
- "_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"],
+ "_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików","Wysyłanie %n plików"],
"New" : "Nowy",
"\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.",
"File name cannot be empty." : "Nazwa pliku nie może być pusta.",
@@ -70,18 +62,22 @@ OC.L10N.register(
"Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)",
- "_matches '{filter}'_::_match '{filter}'_" : ["pasujący '{filter}'","pasujące '{filter}'","pasujących '{filter}'"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["pasujący '{filter}'","pasujące '{filter}'","pasujących '{filter}'","pasujących '{filter}'"],
"View in folder" : "Zobacz w katalogu",
"Path" : "Ścieżka",
- "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów"],
- "Favorited" : "Ulubione",
+ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów","%n bajtów"],
+ "Favorited" : "Ulubiony",
"Favorite" : "Ulubione",
"Copy local link" : "Kopiowanie lokalnego linku",
"Folder" : "Folder",
"New folder" : "Nowy folder",
"Upload" : "Wyślij",
"An error occurred while trying to update the tags" : "Wystąpił błąd podczas aktualizacji tagów",
- "File changes" : "Zmień w plikach",
+ "Added to favorites" : "Dodano do ulubionych",
+ "Removed from favorites" : "Usunięto z ulubionych",
+ "You added {file} to your favorites" : "Dodałeś {file} do ulubionych",
+ "You removed {file} from your favorites" : "Usunąłeś {file} z ulubionych",
+ "File changes" : "Zmiany w plikach",
"Created by {user}" : "Utworzone przez {user}",
"Changed by {user}" : "Zmienione przez {user}",
"Deleted by {user}" : "Usunięte przez {user}",
@@ -101,6 +97,7 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} zmienił {oldfile} na {newfile}",
"You moved {oldfile} to {newfile}" : "Przeniosłeś {oldfile} do {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} przeniósł {oldfile} do {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Plik został dodany lub usunięty z Twoich <strong>ulubionych</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Plik lub folder został <strong>zmieniony</ strong> lub <strong>zastąpiony</ strong>",
"A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Nowy plik lub folder jest <strong>usunięty </strong>",
@@ -132,7 +129,7 @@ OC.L10N.register(
"Deleted files" : "Usunięte pliki",
"Text file" : "Plik tekstowy",
"New text file.txt" : "Nowy plik tekstowy.txt",
- "Storage not available" : "Pamięć nie dostępna",
+ "Storage not available" : "Zasoby dysku są niedostępne",
"Unable to set upload directory." : "Nie można ustawić katalog wczytywania.",
"Invalid Token" : "Nieprawidłowy Token",
"No file was uploaded. Unknown error" : "Żaden plik nie został załadowany. Nieznany błąd",
@@ -151,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Całkowity rozmiar {size1} przekracza limit uploadu {size2}",
"Error uploading file \"{fileName}\": {message}" : "Błąd podczas przekazywania \"{fileName}\": {message}",
"Could not get result from server." : "Nie można uzyskać wyniku z serwera.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Pozostało {hours}:{minutes}:{seconds} hour{plural_s} ",
+ "{hours}:{minutes}h" : "{hours}:{minutes}godz.",
+ "{minutes}:{seconds} minute{plural_s} left" : "Pozostało {minutes}:{seconds} minute{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}min.",
+ "{seconds} second{plural_s} left" : "Pozostało sekund: {seconds}",
+ "{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.",
"No entries in this folder match '{filter}'" : "Brak wyników pasujących do '{filter}'",
"Local link" : "Lokalny odnośnik",
"{newname} already exists" : "{newname} już istnieje",
@@ -168,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s przywrócił %1$s",
"Changed by %2$s" : "Zmienione przez %2$s",
"Deleted by %2$s" : "Usunięte przez %2$s",
- "Restored by %2$s" : "Przywrócone przez %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Użyj tego adresu aby uzyskać <a href=\"%s\" target=\"_blank\">dostęp do swoich plików poprzez WebDAV</a>",
- "Cancel upload" : "Anuluj wysyłanie"
+ "Restored by %2$s" : "Przywrócone przez %2$s"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index 702f2975b2d..7a7fdb17f6b 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -2,9 +2,8 @@
"Storage is temporarily not available" : "Przechowywanie jest czasowo niedostępne",
"Storage invalid" : "Pamięć nieprawidłowa",
"Unknown error" : "Nieznany błąd",
- "Files" : "Pliki",
"All files" : "Wszystkie pliki",
- "Recent" : "Ostatni",
+ "Recent" : "Ostatnie",
"File could not be found" : "Nie można odnaleźć pliku",
"Home" : "Dom",
"Close" : "Zamknij",
@@ -17,16 +16,7 @@
"Not enough free space" : "Za mało wolnego miejsca",
"Uploading..." : "Wgrywanie....",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Pozostało {hours}:{minutes}:{seconds} hour{plural_s} ",
- "{hours}:{minutes}h" : "{hours}:{minutes}godz.",
- "{minutes}:{seconds} minute{plural_s} left" : "Pozostało {minutes}:{seconds} minute{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}min.",
- "{seconds} second{plural_s} left" : "Pozostało sekund: {seconds}",
- "{seconds}s" : "{seconds} s",
- "Any moment now..." : "Jeszcze chwilę...",
- "Soon..." : "Wkrótce...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
- "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.",
"Actions" : "Akcje",
"Download" : "Pobierz",
"Rename" : "Zmień nazwę",
@@ -34,7 +24,9 @@
"Target folder" : "Folder docelowy",
"Delete" : "Usuń",
"Disconnect storage" : "Odłącz magazyn",
- "Unshare" : "Zatrzymaj współdzielenie",
+ "Unshare" : "Zatrzymaj udostępnianie",
+ "Could not load info for file \"{file}\"" : "Nie można było załadować informacji o pliku \"{file}\"",
+ "Files" : "Pliki",
"Details" : "Szczegóły",
"Select" : "Wybierz",
"Pending" : "Oczekujące",
@@ -55,12 +47,12 @@
"Name" : "Nazwa",
"Size" : "Rozmiar",
"Modified" : "Modyfikacja",
- "_%n folder_::_%n folders_" : ["%n katalog","%n katalogi","%n katalogów"],
- "_%n file_::_%n files_" : ["%n plik","%n pliki","%n plików"],
+ "_%n folder_::_%n folders_" : ["%n katalog","%n katalogi","%n katalogów","%n katalogów"],
+ "_%n file_::_%n files_" : ["%n plik","%n pliki","%n plików","%n plików"],
"{dirs} and {files}" : "{dirs} i {files}",
- "_including %n hidden_::_including %n hidden_" : ["w tym %n ukryty","w tym %n ukryte","w tym %n ukrytych"],
+ "_including %n hidden_::_including %n hidden_" : ["w tym %n ukryty","w tym %n ukryte","w tym %n ukrytych","w tym %n ukrytych"],
"You don’t have permission to upload or create files here" : "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu",
- "_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"],
+ "_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików","Wysyłanie %n plików"],
"New" : "Nowy",
"\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.",
"File name cannot be empty." : "Nazwa pliku nie może być pusta.",
@@ -68,18 +60,22 @@
"Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)",
- "_matches '{filter}'_::_match '{filter}'_" : ["pasujący '{filter}'","pasujące '{filter}'","pasujących '{filter}'"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["pasujący '{filter}'","pasujące '{filter}'","pasujących '{filter}'","pasujących '{filter}'"],
"View in folder" : "Zobacz w katalogu",
"Path" : "Ścieżka",
- "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów"],
- "Favorited" : "Ulubione",
+ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów","%n bajtów"],
+ "Favorited" : "Ulubiony",
"Favorite" : "Ulubione",
"Copy local link" : "Kopiowanie lokalnego linku",
"Folder" : "Folder",
"New folder" : "Nowy folder",
"Upload" : "Wyślij",
"An error occurred while trying to update the tags" : "Wystąpił błąd podczas aktualizacji tagów",
- "File changes" : "Zmień w plikach",
+ "Added to favorites" : "Dodano do ulubionych",
+ "Removed from favorites" : "Usunięto z ulubionych",
+ "You added {file} to your favorites" : "Dodałeś {file} do ulubionych",
+ "You removed {file} from your favorites" : "Usunąłeś {file} z ulubionych",
+ "File changes" : "Zmiany w plikach",
"Created by {user}" : "Utworzone przez {user}",
"Changed by {user}" : "Zmienione przez {user}",
"Deleted by {user}" : "Usunięte przez {user}",
@@ -99,6 +95,7 @@
"{user} renamed {oldfile} to {newfile}" : "{user} zmienił {oldfile} na {newfile}",
"You moved {oldfile} to {newfile}" : "Przeniosłeś {oldfile} do {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} przeniósł {oldfile} do {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Plik został dodany lub usunięty z Twoich <strong>ulubionych</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Plik lub folder został <strong>zmieniony</ strong> lub <strong>zastąpiony</ strong>",
"A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Nowy plik lub folder jest <strong>usunięty </strong>",
@@ -130,7 +127,7 @@
"Deleted files" : "Usunięte pliki",
"Text file" : "Plik tekstowy",
"New text file.txt" : "Nowy plik tekstowy.txt",
- "Storage not available" : "Pamięć nie dostępna",
+ "Storage not available" : "Zasoby dysku są niedostępne",
"Unable to set upload directory." : "Nie można ustawić katalog wczytywania.",
"Invalid Token" : "Nieprawidłowy Token",
"No file was uploaded. Unknown error" : "Żaden plik nie został załadowany. Nieznany błąd",
@@ -149,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Całkowity rozmiar {size1} przekracza limit uploadu {size2}",
"Error uploading file \"{fileName}\": {message}" : "Błąd podczas przekazywania \"{fileName}\": {message}",
"Could not get result from server." : "Nie można uzyskać wyniku z serwera.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Pozostało {hours}:{minutes}:{seconds} hour{plural_s} ",
+ "{hours}:{minutes}h" : "{hours}:{minutes}godz.",
+ "{minutes}:{seconds} minute{plural_s} left" : "Pozostało {minutes}:{seconds} minute{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}min.",
+ "{seconds} second{plural_s} left" : "Pozostało sekund: {seconds}",
+ "{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.",
"No entries in this folder match '{filter}'" : "Brak wyników pasujących do '{filter}'",
"Local link" : "Lokalny odnośnik",
"{newname} already exists" : "{newname} już istnieje",
@@ -166,8 +172,6 @@
"%2$s restored %1$s" : "%2$s przywrócił %1$s",
"Changed by %2$s" : "Zmienione przez %2$s",
"Deleted by %2$s" : "Usunięte przez %2$s",
- "Restored by %2$s" : "Przywrócone przez %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Użyj tego adresu aby uzyskać <a href=\"%s\" target=\"_blank\">dostęp do swoich plików poprzez WebDAV</a>",
- "Cancel upload" : "Anuluj wysyłanie"
+ "Restored by %2$s" : "Przywrócone przez %2$s"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index a6c93bd5b8a..b31977f2774 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Storage is temporarily not available" : "Storage esta, temporariamente, indisponível",
"Storage invalid" : "Armazenamento inválido",
"Unknown error" : "Erro desconhecido",
- "Files" : "Arquivos",
"All files" : "Todos os arquivos",
"Recent" : "Recente",
"File could not be found" : "O arquivo não foi encontrado",
@@ -19,16 +18,7 @@ OC.L10N.register(
"Not enough free space" : "Espaço livre insuficiente",
"Uploading..." : "Enviando...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hora{plural_s} esquerda",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuto{plural_s} esquerda",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} segundo{plural_s} esquerda",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "A qualquer momento...",
- "Soon..." : "Logo...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
- "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.",
"Actions" : "Ações",
"Download" : "Baixar",
"Rename" : "Renomear",
@@ -37,6 +27,8 @@ OC.L10N.register(
"Delete" : "Excluir",
"Disconnect storage" : "Desconectar armazenamento",
"Unshare" : "Descompartilhar",
+ "Could not load info for file \"{file}\"" : "Não foi possível carregar informações para o arquivo \"{file}\" ",
+ "Files" : "Arquivos",
"Details" : "Detalhes",
"Select" : "Selecionar",
"Pending" : "Pendente",
@@ -156,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "O tamanho total do arquivo {size1} excede o limite de envio {size2}",
"Error uploading file \"{fileName}\": {message}" : "Erro enviando o arquivo \"{fileName}\": {message}",
"Could not get result from server." : "Não foi possível obter o resultado do servidor.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hora{plural_s} restantes",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuto{plural_s} restantes",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} segundo{plural_s} restantes",
+ "{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.",
"No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'",
"Local link" : "Link local",
"{newname} already exists" : "{newname} já existe",
@@ -173,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s restaurou %1$s",
"Changed by %2$s" : "Modificado por %2$s",
"Deleted by %2$s" : "Excluído por %2$s",
- "Restored by %2$s" : "Restaurado por %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço para <a href=\"%s\" target=\"_blank\">acessar seus arquivos via WebDAV</a>",
- "Cancel upload" : "Cancelar envio"
+ "Restored by %2$s" : "Restaurado por %2$s"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 0e6b7050fc2..f5481c8ab0d 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -2,7 +2,6 @@
"Storage is temporarily not available" : "Storage esta, temporariamente, indisponível",
"Storage invalid" : "Armazenamento inválido",
"Unknown error" : "Erro desconhecido",
- "Files" : "Arquivos",
"All files" : "Todos os arquivos",
"Recent" : "Recente",
"File could not be found" : "O arquivo não foi encontrado",
@@ -17,16 +16,7 @@
"Not enough free space" : "Espaço livre insuficiente",
"Uploading..." : "Enviando...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hora{plural_s} esquerda",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuto{plural_s} esquerda",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{seconds} segundo{plural_s} esquerda",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "A qualquer momento...",
- "Soon..." : "Logo...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
- "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.",
"Actions" : "Ações",
"Download" : "Baixar",
"Rename" : "Renomear",
@@ -35,6 +25,8 @@
"Delete" : "Excluir",
"Disconnect storage" : "Desconectar armazenamento",
"Unshare" : "Descompartilhar",
+ "Could not load info for file \"{file}\"" : "Não foi possível carregar informações para o arquivo \"{file}\" ",
+ "Files" : "Arquivos",
"Details" : "Detalhes",
"Select" : "Selecionar",
"Pending" : "Pendente",
@@ -154,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "O tamanho total do arquivo {size1} excede o limite de envio {size2}",
"Error uploading file \"{fileName}\": {message}" : "Erro enviando o arquivo \"{fileName}\": {message}",
"Could not get result from server." : "Não foi possível obter o resultado do servidor.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hora{plural_s} restantes",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minuto{plural_s} restantes",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} segundo{plural_s} restantes",
+ "{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.",
"No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'",
"Local link" : "Link local",
"{newname} already exists" : "{newname} já existe",
@@ -171,8 +172,6 @@
"%2$s restored %1$s" : "%2$s restaurou %1$s",
"Changed by %2$s" : "Modificado por %2$s",
"Deleted by %2$s" : "Excluído por %2$s",
- "Restored by %2$s" : "Restaurado por %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço para <a href=\"%s\" target=\"_blank\">acessar seus arquivos via WebDAV</a>",
- "Cancel upload" : "Cancelar envio"
+ "Restored by %2$s" : "Restaurado por %2$s"
},"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 9c04ebf2740..1222778d596 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -4,39 +4,31 @@ OC.L10N.register(
"Storage is temporarily not available" : "Хранилище временно недоступно",
"Storage invalid" : "Хранилище неисправно",
"Unknown error" : "Неизвестная ошибка",
- "Files" : "Файлы",
"All files" : "Все файлы",
"Recent" : "Недавние",
"File could not be found" : "Невозможно найти файл",
"Home" : "Главная",
"Close" : "Закрыть",
"Favorites" : "Избранное",
- "Could not create folder \"{dir}\"" : "Невозможно создать папку \"{dir}\"",
+ "Could not create folder \"{dir}\"" : "Невозможно создать каталог \"{dir}\"",
"Upload cancelled." : "Загрузка отменена.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Невозможно загрузить {filename}, так как это либо каталог, либо файл нулевого размера",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостаточно свободного места, Вы загружаете {size1}, но осталось только {size2}",
- "Target folder \"{dir}\" does not exist any more" : "Целевая папка \"{dir}\" более не существует",
+ "Target folder \"{dir}\" does not exist any more" : "Целевой каталог \"{dir}\" более не существует",
"Not enough free space" : "Недостаточно свободного места",
"Uploading..." : "Загрузка...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Осталось часов {hours}:{minutes}:{seconds} {plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}ч",
- "{minutes}:{seconds} minute{plural_s} left" : "Осталось минут {minutes}:{seconds} {plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}м",
- "{seconds} second{plural_s} left" : "Осталось секунд {seconds} {plural_s}",
- "{seconds}s" : "{seconds}с",
- "Any moment now..." : "В любой момент...",
- "Soon..." : "Скоро...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} из {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.",
"Actions" : "Действия",
"Download" : "Скачать",
"Rename" : "Переименовать",
"Move" : "Перенести",
- "Target folder" : "Целевая папка",
+ "Target folder" : "Целевой каталог",
"Delete" : "Удалить",
"Disconnect storage" : "Отсоединить хранилище",
"Unshare" : "Закрыть доступ",
+ "Could not load info for file \"{file}\"" : "Не удаётся загрузить информацию для файла \"{file}\"",
+ "Files" : "Файлы",
"Details" : "Подробно",
"Select" : "Выбрать",
"Pending" : "Ожидается",
@@ -51,9 +43,9 @@ OC.L10N.register(
"Could not rename \"{fileName}\"" : "Невозможно переименовать \"{fileName}\"",
"Could not create file \"{file}\"" : "Невозможно создать файл \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "Невозможно создать файл \"{file}\" потому что уже имеется",
- "Could not create folder \"{dir}\" because it already exists" : "Невозможно создать папку \"{dir}\" потому что уже имеется",
+ "Could not create folder \"{dir}\" because it already exists" : "Невозможно создать каталог \"{dir}\" потому что он уже имеется",
"Error deleting file \"{fileName}\"." : "Ошибка удаления файла \"{fileName}\".",
- "No search results in other folders for '{tag}{filter}{endtag}'" : "Нет результатов поиска в других папках для '{tag}{filter}{endtag}'",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Нет результатов поиска в других каталогах для '{tag}{filter}{endtag}'",
"Name" : "Имя",
"Size" : "Размер",
"Modified" : "Изменён",
@@ -73,7 +65,7 @@ OC.L10N.register(
"_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"],
"View in folder" : "Посмотреть в каталоге",
"Path" : "Путь",
- "_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байтов","%n байта(ов)"],
+ "_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байт","%n байт"],
"Favorited" : "Избранное",
"Favorite" : "Избранное",
"Copy local link" : "Копировать локальную ссылку",
@@ -86,6 +78,25 @@ OC.L10N.register(
"You added {file} to your favorites" : "Вы добавили {file} в избранное",
"You removed {file} from your favorites" : "Вы удалили {file} из избранного",
"File changes" : "Файлы изменены",
+ "Created by {user}" : "Создано {user}",
+ "Changed by {user}" : "Изменено {user}",
+ "Deleted by {user}" : "Удалено {user}",
+ "Restored by {user}" : "Восстановлено {user}",
+ "Renamed by {user}" : "Переименовано {user}",
+ "Moved by {user}" : "Перемещено {user}",
+ "You created {file}" : "Вы создали {file}",
+ "{user} created {file}" : "{user} создал {file}",
+ "{file} was created in a public folder" : "{file} создан в общем каталоге",
+ "You changed {file}" : "Вы изменили {file}",
+ "{user} changed {file}" : "{user} изменил {file}",
+ "You deleted {file}" : "Вы удалили {file}",
+ "{user} deleted {file}" : "{user} удалил {file}",
+ "You restored {file}" : "Вы восстановили {file}",
+ "{user} restored {file}" : "{user} восстановил {file}",
+ "You renamed {oldfile} to {newfile}" : "Вы переименовали {oldfile} в {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} переименовал {oldfile} в {newfile}",
+ "You moved {oldfile} to {newfile}" : "Вы переместили {oldfile} в {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} переместил {oldfile} в {newfile}",
"A file has been added to or removed from your <strong>favorites</strong>" : "Файл был добавлен или удален из вашего <strong>избранного</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Фаил или каталог <strong>изменён</strong> или <strong>переименован</strong>",
"A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог",
@@ -137,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Полный размер файла {size1} превышает лимит по загрузке {size2}",
"Error uploading file \"{fileName}\": {message}" : "Ошибка загрузки файла \"{fileName}\": {message}",
"Could not get result from server." : "Не удалось получить ответ от сервера.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Осталось часов {hours}:{minutes}:{seconds} {plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}ч",
+ "{minutes}:{seconds} minute{plural_s} left" : "Осталось минут {minutes}:{seconds} {plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}м",
+ "{seconds} second{plural_s} left" : "Осталось секунд {seconds} {plural_s}",
+ "{seconds}s" : "{seconds}с",
+ "Any moment now..." : "В любой момент...",
+ "Soon..." : "Скоро...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.",
"No entries in this folder match '{filter}'" : "В данном каталоге нет элементов соответствующих '{filter}'",
"Local link" : "Локальная ссылка",
"{newname} already exists" : "{newname} уже существует",
@@ -154,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s восстановил %1$s",
"Changed by %2$s" : "Изменено %2$s",
"Deleted by %2$s" : "Удалено %2$s",
- "Restored by %2$s" : "Восстановлено %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Используйте этот адрес для <a href=\"%s\" target=\"_blank\">получения доступа к вашим файлам через WebDAV</a>",
- "Cancel upload" : "Отменить загрузку"
+ "Restored by %2$s" : "Восстановлено %2$s"
},
"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 8101188d7aa..c835f8c16cd 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -2,39 +2,31 @@
"Storage is temporarily not available" : "Хранилище временно недоступно",
"Storage invalid" : "Хранилище неисправно",
"Unknown error" : "Неизвестная ошибка",
- "Files" : "Файлы",
"All files" : "Все файлы",
"Recent" : "Недавние",
"File could not be found" : "Невозможно найти файл",
"Home" : "Главная",
"Close" : "Закрыть",
"Favorites" : "Избранное",
- "Could not create folder \"{dir}\"" : "Невозможно создать папку \"{dir}\"",
+ "Could not create folder \"{dir}\"" : "Невозможно создать каталог \"{dir}\"",
"Upload cancelled." : "Загрузка отменена.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Невозможно загрузить {filename}, так как это либо каталог, либо файл нулевого размера",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостаточно свободного места, Вы загружаете {size1}, но осталось только {size2}",
- "Target folder \"{dir}\" does not exist any more" : "Целевая папка \"{dir}\" более не существует",
+ "Target folder \"{dir}\" does not exist any more" : "Целевой каталог \"{dir}\" более не существует",
"Not enough free space" : "Недостаточно свободного места",
"Uploading..." : "Загрузка...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Осталось часов {hours}:{minutes}:{seconds} {plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}ч",
- "{minutes}:{seconds} minute{plural_s} left" : "Осталось минут {minutes}:{seconds} {plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}м",
- "{seconds} second{plural_s} left" : "Осталось секунд {seconds} {plural_s}",
- "{seconds}s" : "{seconds}с",
- "Any moment now..." : "В любой момент...",
- "Soon..." : "Скоро...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} из {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.",
"Actions" : "Действия",
"Download" : "Скачать",
"Rename" : "Переименовать",
"Move" : "Перенести",
- "Target folder" : "Целевая папка",
+ "Target folder" : "Целевой каталог",
"Delete" : "Удалить",
"Disconnect storage" : "Отсоединить хранилище",
"Unshare" : "Закрыть доступ",
+ "Could not load info for file \"{file}\"" : "Не удаётся загрузить информацию для файла \"{file}\"",
+ "Files" : "Файлы",
"Details" : "Подробно",
"Select" : "Выбрать",
"Pending" : "Ожидается",
@@ -49,9 +41,9 @@
"Could not rename \"{fileName}\"" : "Невозможно переименовать \"{fileName}\"",
"Could not create file \"{file}\"" : "Невозможно создать файл \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "Невозможно создать файл \"{file}\" потому что уже имеется",
- "Could not create folder \"{dir}\" because it already exists" : "Невозможно создать папку \"{dir}\" потому что уже имеется",
+ "Could not create folder \"{dir}\" because it already exists" : "Невозможно создать каталог \"{dir}\" потому что он уже имеется",
"Error deleting file \"{fileName}\"." : "Ошибка удаления файла \"{fileName}\".",
- "No search results in other folders for '{tag}{filter}{endtag}'" : "Нет результатов поиска в других папках для '{tag}{filter}{endtag}'",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Нет результатов поиска в других каталогах для '{tag}{filter}{endtag}'",
"Name" : "Имя",
"Size" : "Размер",
"Modified" : "Изменён",
@@ -71,7 +63,7 @@
"_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"],
"View in folder" : "Посмотреть в каталоге",
"Path" : "Путь",
- "_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байтов","%n байта(ов)"],
+ "_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байт","%n байт"],
"Favorited" : "Избранное",
"Favorite" : "Избранное",
"Copy local link" : "Копировать локальную ссылку",
@@ -84,6 +76,25 @@
"You added {file} to your favorites" : "Вы добавили {file} в избранное",
"You removed {file} from your favorites" : "Вы удалили {file} из избранного",
"File changes" : "Файлы изменены",
+ "Created by {user}" : "Создано {user}",
+ "Changed by {user}" : "Изменено {user}",
+ "Deleted by {user}" : "Удалено {user}",
+ "Restored by {user}" : "Восстановлено {user}",
+ "Renamed by {user}" : "Переименовано {user}",
+ "Moved by {user}" : "Перемещено {user}",
+ "You created {file}" : "Вы создали {file}",
+ "{user} created {file}" : "{user} создал {file}",
+ "{file} was created in a public folder" : "{file} создан в общем каталоге",
+ "You changed {file}" : "Вы изменили {file}",
+ "{user} changed {file}" : "{user} изменил {file}",
+ "You deleted {file}" : "Вы удалили {file}",
+ "{user} deleted {file}" : "{user} удалил {file}",
+ "You restored {file}" : "Вы восстановили {file}",
+ "{user} restored {file}" : "{user} восстановил {file}",
+ "You renamed {oldfile} to {newfile}" : "Вы переименовали {oldfile} в {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} переименовал {oldfile} в {newfile}",
+ "You moved {oldfile} to {newfile}" : "Вы переместили {oldfile} в {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} переместил {oldfile} в {newfile}",
"A file has been added to or removed from your <strong>favorites</strong>" : "Файл был добавлен или удален из вашего <strong>избранного</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Фаил или каталог <strong>изменён</strong> или <strong>переименован</strong>",
"A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог",
@@ -135,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Полный размер файла {size1} превышает лимит по загрузке {size2}",
"Error uploading file \"{fileName}\": {message}" : "Ошибка загрузки файла \"{fileName}\": {message}",
"Could not get result from server." : "Не удалось получить ответ от сервера.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Осталось часов {hours}:{minutes}:{seconds} {plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}ч",
+ "{minutes}:{seconds} minute{plural_s} left" : "Осталось минут {minutes}:{seconds} {plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}м",
+ "{seconds} second{plural_s} left" : "Осталось секунд {seconds} {plural_s}",
+ "{seconds}s" : "{seconds}с",
+ "Any moment now..." : "В любой момент...",
+ "Soon..." : "Скоро...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.",
"No entries in this folder match '{filter}'" : "В данном каталоге нет элементов соответствующих '{filter}'",
"Local link" : "Локальная ссылка",
"{newname} already exists" : "{newname} уже существует",
@@ -152,8 +172,6 @@
"%2$s restored %1$s" : "%2$s восстановил %1$s",
"Changed by %2$s" : "Изменено %2$s",
"Deleted by %2$s" : "Удалено %2$s",
- "Restored by %2$s" : "Восстановлено %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Используйте этот адрес для <a href=\"%s\" target=\"_blank\">получения доступа к вашим файлам через WebDAV</a>",
- "Cancel upload" : "Отменить загрузку"
+ "Restored by %2$s" : "Восстановлено %2$s"
},"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_SK.js b/apps/files/l10n/sk_SK.js
index db8c505b02b..370bb0626f5 100644
--- a/apps/files/l10n/sk_SK.js
+++ b/apps/files/l10n/sk_SK.js
@@ -1,56 +1,58 @@
OC.L10N.register(
"files",
{
- "Storage not available" : "Úložisko nie je dostupné",
+ "Storage is temporarily not available" : "Úložisko je dočasne nedostupné",
"Storage invalid" : "Úložisko nie je platné",
"Unknown error" : "Neznáma chyba",
- "Unable to set upload directory." : "Nemožno nastaviť priečinok pre nahrané súbory.",
- "Invalid Token" : "Neplatný token",
- "No file was uploaded. Unknown error" : "Žiaden súbor nebol nahraný. Neznáma chyba",
- "There is no error, the file uploaded with success" : "Nenastala žiadna chyba, súbor bol úspešne nahraný",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Nahraný súbor prekročil limit nastavený v upload_max_filesize v súbore php.ini:",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Ukladaný súbor prekračuje nastavenie MAX_FILE_SIZE z volieb HTML formulára.",
- "The uploaded file was only partially uploaded" : "Ukladaný súbor sa nahral len čiastočne",
- "No file was uploaded" : "Žiadny súbor nebol uložený",
- "Missing a temporary folder" : "Chýba dočasný priečinok",
- "Failed to write to disk" : "Zápis na disk sa nepodaril",
- "Not enough storage available" : "Nedostatok dostupného úložného priestoru",
- "The target folder has been moved or deleted." : "Cieľový priečinok bol premiestnený alebo odstránený.",
- "Upload failed. Could not find uploaded file" : "Nahrávanie zlyhalo. Nepodarilo sa nájsť nahrávaný súbor",
- "Upload failed. Could not get file info." : "Nahrávanie zlyhalo. Nepodarilo sa získať informácie o súbore.",
- "Invalid directory." : "Neplatný priečinok.",
- "Files" : "Súbory",
"All files" : "Všetky súbory",
+ "Recent" : "Nedávne",
+ "File could not be found" : "Súbor nie je možné nájsť",
"Home" : "Domov",
"Close" : "Zavrieť",
"Favorites" : "Obľúbené",
+ "Could not create folder \"{dir}\"" : "Nemožno vytvoriť priečinok \"{dir}\"",
"Upload cancelled." : "Odosielanie je zrušené.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nemožno nahrať súbor {filename}, pretože je to priečinok, alebo má 0 bitov",
- "Total file size {size1} exceeds upload limit {size2}" : "Celková veľkosť súboru {size1} prekračuje upload limit {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
- "Could not get result from server." : "Nepodarilo sa dostať výsledky zo servera.",
+ "Target folder \"{dir}\" does not exist any more" : "Cieľový priečinok \"{dir}\" už neexistuje",
+ "Not enough free space" : "Nedostatok voľného miesta",
"Uploading..." : "Nahrávam...",
"..." : "...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
"Actions" : "Akcie",
"Download" : "Sťahovanie",
"Rename" : "Premenovať",
+ "Move" : "Presunúť",
+ "Target folder" : "Cieľový priečinok",
"Delete" : "Zmazať",
"Disconnect storage" : "Odpojiť úložisko",
- "Unshare" : "Zrušiť zdieľanie",
+ "Unshare" : "Zneprístupniť",
+ "Could not load info for file \"{file}\"" : "Nebolo možné načítať informácie súboru \"{file}\"",
+ "Files" : "Súbory",
"Details" : "Podrobnosti",
"Select" : "Vybrať",
"Pending" : "Čaká",
"Unable to determine date" : "Nemožno určiť dátum",
"This operation is forbidden" : "Táto operácia je zakázaná",
"This directory is unavailable, please check the logs or contact the administrator" : "Priečinok je nedostupný, skontrolujte prosím logy, alebo kontaktujte správcu",
- "No entries in this folder match '{filter}'" : "V tomto priečinku nič nezodpovedá '{filter}'",
+ "Could not move \"{file}\", target exists" : "Nie je možné presunúť \"{file}\", cieľ už existuje",
+ "Could not move \"{file}\"" : "Nie je možné presunúť \"{file}\"",
+ "{newName} already exists" : "{newName} už existuje",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Nie je možné premenovať \"{fileName}\", cieľ už neexistuje",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Názov \"{targetName}\" je už použitý v priečinku \"{dir}\". Zvoľte prosím iný názov.",
+ "Could not rename \"{fileName}\"" : "Nie je možné premenovať \"{file}\"",
+ "Could not create file \"{file}\"" : "Nie je možné vytvoriť súbor \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "Nie je možné vytvoriť súbor \"{file}\" lebo už existuje",
+ "Could not create folder \"{dir}\" because it already exists" : "Nie je možné vytvoriť priečinok \"{dir}\" lebo už existuje",
+ "Error deleting file \"{fileName}\"." : "Chyba pri mazaní súboru \"{fileName}\".",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Žiadne výsledky vyhľadávania v ostatných priečinkoch pre '{tag}{filter}{endtag}'",
"Name" : "Názov",
"Size" : "Veľkosť",
"Modified" : "Upravené",
"_%n folder_::_%n folders_" : ["%n priečinok","%n priečinky","%n priečinkov"],
"_%n file_::_%n files_" : ["%n súbor","%n súbory","%n súborov"],
"{dirs} and {files}" : "{dirs} a {files}",
+ "_including %n hidden_::_including %n hidden_" : ["vrátane %n skytého","vrátane %n skrytých","vrátane %n skrytých"],
"You don’t have permission to upload or create files here" : "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory",
"_Uploading %n file_::_Uploading %n files_" : ["Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"],
"New" : "Nový",
@@ -61,36 +63,57 @@ OC.L10N.register(
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Úloisko používateľa {owner} je takmer plné ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"],
+ "View in folder" : "Zobraziť v priečinku",
"Path" : "Cesta",
"_%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",
- "{newname} already exists" : "{newname} už existuje",
"Upload" : "Nahrať",
"An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe",
+ "Added to favorites" : "Pridané do obľúbených",
+ "Removed from favorites" : "Odstránené z obľúbených",
+ "You added {file} to your favorites" : "Pridali ste {file} do vašich obľúbených",
+ "You removed {file} from your favorites" : "Odstránili ste {file} z vašich obľúbených",
+ "File changes" : "Zmeny v súboroch",
+ "Created by {user}" : "Vytvorené užívateľom {user}",
+ "Changed by {user}" : "Zmenené užívateľom {user}",
+ "Deleted by {user}" : "Zmazané užívateľom {user}",
+ "Restored by {user}" : "Obnovené užívateľom {user}",
+ "Renamed by {user}" : "Premenované užívateľom {user}",
+ "Moved by {user}" : "Presunuté užívateľom {user}",
+ "You created {file}" : "Vytvorili ste súbor {file}",
+ "{user} created {file}" : "{user} vytvoril súbor {file}",
+ "{file} was created in a public folder" : "{file} bol vytvorený vo verejnom priečinku",
+ "You changed {file}" : "Zmenili ste {file}",
+ "{user} changed {file}" : "{user} zmenil {file}",
+ "You deleted {file}" : "Zmazali ste {file}",
+ "{user} deleted {file}" : "{user} zmazal {file}",
+ "You restored {file}" : "Obnovili ste {file}",
+ "{user} restored {file}" : "{user} obnovil {file}",
+ "You renamed {oldfile} to {newfile}" : "Premenovali ste {oldfile} na {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} premenoval {oldfile} na {newfile}",
+ "You moved {oldfile} to {newfile}" : "Presunuli ste {oldfile} do {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} presunul {oldfile} do {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Súbor bol pridaný alebo odstránený z vašich <strong>obľúbených</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong> alebo <strong>premenovaný</strong>",
"A new file or folder has been <strong>created</strong>" : "Nový súbor alebo priečinok bol <strong>vytvorený</strong>",
- "A file or folder has been <strong>changed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "Nový súbor alebo priečinok bol <strong>zmazaný</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Obmedzte upozornenia na vytvorenie a zmeny na vaše <strong>obľúbené súbory</strong> <em>(Len streamy)</em>",
- "A file or folder has been <strong>deleted</strong>" : "Súbor alebo priečinok bol <strong>odstránený</strong>",
- "A file or folder has been <strong>restored</strong>" : "Súbor alebo priečinok bol <strong>obnovený</strong>",
- "You created %1$s" : "Vytvorili ste %1$s",
- "%2$s created %1$s" : "%2$s vytvoril %1$s",
- "%1$s was created in a public folder" : "%1$s vytvorený vo verejnom priečinku",
- "You changed %1$s" : "Zmenili ste %1$s",
- "%2$s changed %1$s" : "%2$s zmenil %1$s",
- "You deleted %1$s" : "Bol zmazaný %1$s",
- "%2$s deleted %1$s" : "%2$s zmazal %1$s",
- "You restored %1$s" : "Bol obnovený %1$s",
- "%2$s restored %1$s" : "%2$s obnovil %1$s",
+ "A new file or folder has been <strong>restored</strong>" : "Nový súbor alebo priečinok bol<strong>obnovený</strong>",
"Upload (max. %s)" : "Nahrať (max. %s)",
"File handling" : "Nastavenie správania sa k súborom",
"Maximum upload size" : "Maximálna veľkosť odosielaného súboru",
"max. possible: " : "najväčšie možné:",
"Save" : "Uložiť",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Použitím PHP-FPM môžu byť zmeny vykonané do 5 minút.",
+ "Missing permissions to edit from here." : "Chýbajú orávnenia pre možnosť tu upravovať.",
"Settings" : "Nastavenia",
+ "Show hidden files" : "Zobraziť skryté súbory",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Použi túto adresu pre <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">prístup ku svojím súborom cez WebDAV</a>",
"No files in here" : "Nie sú tu žiadne súbory",
"Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!",
"No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
@@ -99,7 +122,58 @@ OC.L10N.register(
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
"No favorites" : "Žiadne obľúbené",
"Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu",
+ "Shared with you" : "Vám sprístupnené",
+ "Shared with others" : "Sprístupnené ostatným",
+ "Shared by link" : "Sprístupnené prostredníctvom odkazu",
+ "Tags" : "Štítky",
+ "Deleted files" : "Zmazané súbory",
"Text file" : "Textový súbor",
- "New text file.txt" : "Nový text file.txt"
+ "New text file.txt" : "Nový text file.txt",
+ "Storage not available" : "Úložisko nie je dostupné",
+ "Unable to set upload directory." : "Nemožno nastaviť priečinok pre nahrané súbory.",
+ "Invalid Token" : "Neplatný token",
+ "No file was uploaded. Unknown error" : "Žiaden súbor nebol nahraný. Neznáma chyba",
+ "There is no error, the file uploaded with success" : "Nenastala žiadna chyba, súbor bol úspešne nahraný",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Nahraný súbor prekročil limit nastavený v upload_max_filesize v súbore php.ini:",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Ukladaný súbor prekračuje nastavenie MAX_FILE_SIZE z volieb HTML formulára.",
+ "The uploaded file was only partially uploaded" : "Ukladaný súbor sa nahral len čiastočne",
+ "No file was uploaded" : "Žiadny súbor nebol uložený",
+ "Missing a temporary folder" : "Chýba dočasný priečinok",
+ "Failed to write to disk" : "Zápis na disk sa nepodaril",
+ "Not enough storage available" : "Nedostatok dostupného úložného priestoru",
+ "The target folder has been moved or deleted." : "Cieľový priečinok bol premiestnený alebo odstránený.",
+ "Upload failed. Could not find uploaded file" : "Nahrávanie zlyhalo. Nepodarilo sa nájsť nahrávaný súbor",
+ "Upload failed. Could not get file info." : "Nahrávanie zlyhalo. Nepodarilo sa získať informácie o súbore.",
+ "Invalid directory." : "Neplatný priečinok.",
+ "Total file size {size1} exceeds upload limit {size2}" : "Celková veľkosť súboru {size1} prekračuje upload limit {size2}",
+ "Error uploading file \"{fileName}\": {message}" : "Chyba pri nahrávaní súboru \"{fileName}\": {message}",
+ "Could not get result from server." : "Nepodarilo sa dostať výsledky zo servera.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "zostáva {hours}:{minutes}:{seconds} hodín",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "zostáva {minutes}:{seconds} minút",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "zostáva {seconds} sekúnd",
+ "{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.",
+ "No entries in this folder match '{filter}'" : "V tomto priečinku nič nezodpovedá '{filter}'",
+ "Local link" : "Lokálny odkaz",
+ "{newname} already exists" : "{newname} už existuje",
+ "A file or folder has been <strong>changed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Súbor alebo priečinok bol <strong>odstránený</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Súbor alebo priečinok bol <strong>obnovený</strong>",
+ "You created %1$s" : "Vytvorili ste %1$s",
+ "%2$s created %1$s" : "%2$s vytvoril %1$s",
+ "%1$s was created in a public folder" : "%1$s vytvorený vo verejnom priečinku",
+ "You changed %1$s" : "Zmenili ste %1$s",
+ "%2$s changed %1$s" : "%2$s zmenil %1$s",
+ "You deleted %1$s" : "Bol zmazaný %1$s",
+ "%2$s deleted %1$s" : "%2$s zmazal %1$s",
+ "You restored %1$s" : "Bol obnovený %1$s",
+ "%2$s restored %1$s" : "%2$s obnovil %1$s",
+ "Changed by %2$s" : "Zmenené %2$s",
+ "Deleted by %2$s" : "Zmazané %2$s",
+ "Restored by %2$s" : "Obnovené %2$s"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files/l10n/sk_SK.json b/apps/files/l10n/sk_SK.json
index 1e1075ba958..9a548bdc382 100644
--- a/apps/files/l10n/sk_SK.json
+++ b/apps/files/l10n/sk_SK.json
@@ -1,54 +1,56 @@
{ "translations": {
- "Storage not available" : "Úložisko nie je dostupné",
+ "Storage is temporarily not available" : "Úložisko je dočasne nedostupné",
"Storage invalid" : "Úložisko nie je platné",
"Unknown error" : "Neznáma chyba",
- "Unable to set upload directory." : "Nemožno nastaviť priečinok pre nahrané súbory.",
- "Invalid Token" : "Neplatný token",
- "No file was uploaded. Unknown error" : "Žiaden súbor nebol nahraný. Neznáma chyba",
- "There is no error, the file uploaded with success" : "Nenastala žiadna chyba, súbor bol úspešne nahraný",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Nahraný súbor prekročil limit nastavený v upload_max_filesize v súbore php.ini:",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Ukladaný súbor prekračuje nastavenie MAX_FILE_SIZE z volieb HTML formulára.",
- "The uploaded file was only partially uploaded" : "Ukladaný súbor sa nahral len čiastočne",
- "No file was uploaded" : "Žiadny súbor nebol uložený",
- "Missing a temporary folder" : "Chýba dočasný priečinok",
- "Failed to write to disk" : "Zápis na disk sa nepodaril",
- "Not enough storage available" : "Nedostatok dostupného úložného priestoru",
- "The target folder has been moved or deleted." : "Cieľový priečinok bol premiestnený alebo odstránený.",
- "Upload failed. Could not find uploaded file" : "Nahrávanie zlyhalo. Nepodarilo sa nájsť nahrávaný súbor",
- "Upload failed. Could not get file info." : "Nahrávanie zlyhalo. Nepodarilo sa získať informácie o súbore.",
- "Invalid directory." : "Neplatný priečinok.",
- "Files" : "Súbory",
"All files" : "Všetky súbory",
+ "Recent" : "Nedávne",
+ "File could not be found" : "Súbor nie je možné nájsť",
"Home" : "Domov",
"Close" : "Zavrieť",
"Favorites" : "Obľúbené",
+ "Could not create folder \"{dir}\"" : "Nemožno vytvoriť priečinok \"{dir}\"",
"Upload cancelled." : "Odosielanie je zrušené.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nemožno nahrať súbor {filename}, pretože je to priečinok, alebo má 0 bitov",
- "Total file size {size1} exceeds upload limit {size2}" : "Celková veľkosť súboru {size1} prekračuje upload limit {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
- "Could not get result from server." : "Nepodarilo sa dostať výsledky zo servera.",
+ "Target folder \"{dir}\" does not exist any more" : "Cieľový priečinok \"{dir}\" už neexistuje",
+ "Not enough free space" : "Nedostatok voľného miesta",
"Uploading..." : "Nahrávam...",
"..." : "...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
"Actions" : "Akcie",
"Download" : "Sťahovanie",
"Rename" : "Premenovať",
+ "Move" : "Presunúť",
+ "Target folder" : "Cieľový priečinok",
"Delete" : "Zmazať",
"Disconnect storage" : "Odpojiť úložisko",
- "Unshare" : "Zrušiť zdieľanie",
+ "Unshare" : "Zneprístupniť",
+ "Could not load info for file \"{file}\"" : "Nebolo možné načítať informácie súboru \"{file}\"",
+ "Files" : "Súbory",
"Details" : "Podrobnosti",
"Select" : "Vybrať",
"Pending" : "Čaká",
"Unable to determine date" : "Nemožno určiť dátum",
"This operation is forbidden" : "Táto operácia je zakázaná",
"This directory is unavailable, please check the logs or contact the administrator" : "Priečinok je nedostupný, skontrolujte prosím logy, alebo kontaktujte správcu",
- "No entries in this folder match '{filter}'" : "V tomto priečinku nič nezodpovedá '{filter}'",
+ "Could not move \"{file}\", target exists" : "Nie je možné presunúť \"{file}\", cieľ už existuje",
+ "Could not move \"{file}\"" : "Nie je možné presunúť \"{file}\"",
+ "{newName} already exists" : "{newName} už existuje",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Nie je možné premenovať \"{fileName}\", cieľ už neexistuje",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Názov \"{targetName}\" je už použitý v priečinku \"{dir}\". Zvoľte prosím iný názov.",
+ "Could not rename \"{fileName}\"" : "Nie je možné premenovať \"{file}\"",
+ "Could not create file \"{file}\"" : "Nie je možné vytvoriť súbor \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "Nie je možné vytvoriť súbor \"{file}\" lebo už existuje",
+ "Could not create folder \"{dir}\" because it already exists" : "Nie je možné vytvoriť priečinok \"{dir}\" lebo už existuje",
+ "Error deleting file \"{fileName}\"." : "Chyba pri mazaní súboru \"{fileName}\".",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Žiadne výsledky vyhľadávania v ostatných priečinkoch pre '{tag}{filter}{endtag}'",
"Name" : "Názov",
"Size" : "Veľkosť",
"Modified" : "Upravené",
"_%n folder_::_%n folders_" : ["%n priečinok","%n priečinky","%n priečinkov"],
"_%n file_::_%n files_" : ["%n súbor","%n súbory","%n súborov"],
"{dirs} and {files}" : "{dirs} a {files}",
+ "_including %n hidden_::_including %n hidden_" : ["vrátane %n skytého","vrátane %n skrytých","vrátane %n skrytých"],
"You don’t have permission to upload or create files here" : "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory",
"_Uploading %n file_::_Uploading %n files_" : ["Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"],
"New" : "Nový",
@@ -59,36 +61,57 @@
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Úloisko používateľa {owner} je takmer plné ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"],
+ "View in folder" : "Zobraziť v priečinku",
"Path" : "Cesta",
"_%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",
- "{newname} already exists" : "{newname} už existuje",
"Upload" : "Nahrať",
"An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe",
+ "Added to favorites" : "Pridané do obľúbených",
+ "Removed from favorites" : "Odstránené z obľúbených",
+ "You added {file} to your favorites" : "Pridali ste {file} do vašich obľúbených",
+ "You removed {file} from your favorites" : "Odstránili ste {file} z vašich obľúbených",
+ "File changes" : "Zmeny v súboroch",
+ "Created by {user}" : "Vytvorené užívateľom {user}",
+ "Changed by {user}" : "Zmenené užívateľom {user}",
+ "Deleted by {user}" : "Zmazané užívateľom {user}",
+ "Restored by {user}" : "Obnovené užívateľom {user}",
+ "Renamed by {user}" : "Premenované užívateľom {user}",
+ "Moved by {user}" : "Presunuté užívateľom {user}",
+ "You created {file}" : "Vytvorili ste súbor {file}",
+ "{user} created {file}" : "{user} vytvoril súbor {file}",
+ "{file} was created in a public folder" : "{file} bol vytvorený vo verejnom priečinku",
+ "You changed {file}" : "Zmenili ste {file}",
+ "{user} changed {file}" : "{user} zmenil {file}",
+ "You deleted {file}" : "Zmazali ste {file}",
+ "{user} deleted {file}" : "{user} zmazal {file}",
+ "You restored {file}" : "Obnovili ste {file}",
+ "{user} restored {file}" : "{user} obnovil {file}",
+ "You renamed {oldfile} to {newfile}" : "Premenovali ste {oldfile} na {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} premenoval {oldfile} na {newfile}",
+ "You moved {oldfile} to {newfile}" : "Presunuli ste {oldfile} do {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} presunul {oldfile} do {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Súbor bol pridaný alebo odstránený z vašich <strong>obľúbených</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong> alebo <strong>premenovaný</strong>",
"A new file or folder has been <strong>created</strong>" : "Nový súbor alebo priečinok bol <strong>vytvorený</strong>",
- "A file or folder has been <strong>changed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "Nový súbor alebo priečinok bol <strong>zmazaný</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Obmedzte upozornenia na vytvorenie a zmeny na vaše <strong>obľúbené súbory</strong> <em>(Len streamy)</em>",
- "A file or folder has been <strong>deleted</strong>" : "Súbor alebo priečinok bol <strong>odstránený</strong>",
- "A file or folder has been <strong>restored</strong>" : "Súbor alebo priečinok bol <strong>obnovený</strong>",
- "You created %1$s" : "Vytvorili ste %1$s",
- "%2$s created %1$s" : "%2$s vytvoril %1$s",
- "%1$s was created in a public folder" : "%1$s vytvorený vo verejnom priečinku",
- "You changed %1$s" : "Zmenili ste %1$s",
- "%2$s changed %1$s" : "%2$s zmenil %1$s",
- "You deleted %1$s" : "Bol zmazaný %1$s",
- "%2$s deleted %1$s" : "%2$s zmazal %1$s",
- "You restored %1$s" : "Bol obnovený %1$s",
- "%2$s restored %1$s" : "%2$s obnovil %1$s",
+ "A new file or folder has been <strong>restored</strong>" : "Nový súbor alebo priečinok bol<strong>obnovený</strong>",
"Upload (max. %s)" : "Nahrať (max. %s)",
"File handling" : "Nastavenie správania sa k súborom",
"Maximum upload size" : "Maximálna veľkosť odosielaného súboru",
"max. possible: " : "najväčšie možné:",
"Save" : "Uložiť",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Použitím PHP-FPM môžu byť zmeny vykonané do 5 minút.",
+ "Missing permissions to edit from here." : "Chýbajú orávnenia pre možnosť tu upravovať.",
"Settings" : "Nastavenia",
+ "Show hidden files" : "Zobraziť skryté súbory",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Použi túto adresu pre <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">prístup ku svojím súborom cez WebDAV</a>",
"No files in here" : "Nie sú tu žiadne súbory",
"Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!",
"No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
@@ -97,7 +120,58 @@
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
"No favorites" : "Žiadne obľúbené",
"Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu",
+ "Shared with you" : "Vám sprístupnené",
+ "Shared with others" : "Sprístupnené ostatným",
+ "Shared by link" : "Sprístupnené prostredníctvom odkazu",
+ "Tags" : "Štítky",
+ "Deleted files" : "Zmazané súbory",
"Text file" : "Textový súbor",
- "New text file.txt" : "Nový text file.txt"
+ "New text file.txt" : "Nový text file.txt",
+ "Storage not available" : "Úložisko nie je dostupné",
+ "Unable to set upload directory." : "Nemožno nastaviť priečinok pre nahrané súbory.",
+ "Invalid Token" : "Neplatný token",
+ "No file was uploaded. Unknown error" : "Žiaden súbor nebol nahraný. Neznáma chyba",
+ "There is no error, the file uploaded with success" : "Nenastala žiadna chyba, súbor bol úspešne nahraný",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Nahraný súbor prekročil limit nastavený v upload_max_filesize v súbore php.ini:",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Ukladaný súbor prekračuje nastavenie MAX_FILE_SIZE z volieb HTML formulára.",
+ "The uploaded file was only partially uploaded" : "Ukladaný súbor sa nahral len čiastočne",
+ "No file was uploaded" : "Žiadny súbor nebol uložený",
+ "Missing a temporary folder" : "Chýba dočasný priečinok",
+ "Failed to write to disk" : "Zápis na disk sa nepodaril",
+ "Not enough storage available" : "Nedostatok dostupného úložného priestoru",
+ "The target folder has been moved or deleted." : "Cieľový priečinok bol premiestnený alebo odstránený.",
+ "Upload failed. Could not find uploaded file" : "Nahrávanie zlyhalo. Nepodarilo sa nájsť nahrávaný súbor",
+ "Upload failed. Could not get file info." : "Nahrávanie zlyhalo. Nepodarilo sa získať informácie o súbore.",
+ "Invalid directory." : "Neplatný priečinok.",
+ "Total file size {size1} exceeds upload limit {size2}" : "Celková veľkosť súboru {size1} prekračuje upload limit {size2}",
+ "Error uploading file \"{fileName}\": {message}" : "Chyba pri nahrávaní súboru \"{fileName}\": {message}",
+ "Could not get result from server." : "Nepodarilo sa dostať výsledky zo servera.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "zostáva {hours}:{minutes}:{seconds} hodín",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "zostáva {minutes}:{seconds} minút",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "zostáva {seconds} sekúnd",
+ "{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.",
+ "No entries in this folder match '{filter}'" : "V tomto priečinku nič nezodpovedá '{filter}'",
+ "Local link" : "Lokálny odkaz",
+ "{newname} already exists" : "{newname} už existuje",
+ "A file or folder has been <strong>changed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Súbor alebo priečinok bol <strong>odstránený</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Súbor alebo priečinok bol <strong>obnovený</strong>",
+ "You created %1$s" : "Vytvorili ste %1$s",
+ "%2$s created %1$s" : "%2$s vytvoril %1$s",
+ "%1$s was created in a public folder" : "%1$s vytvorený vo verejnom priečinku",
+ "You changed %1$s" : "Zmenili ste %1$s",
+ "%2$s changed %1$s" : "%2$s zmenil %1$s",
+ "You deleted %1$s" : "Bol zmazaný %1$s",
+ "%2$s deleted %1$s" : "%2$s zmazal %1$s",
+ "You restored %1$s" : "Bol obnovený %1$s",
+ "%2$s restored %1$s" : "%2$s obnovil %1$s",
+ "Changed by %2$s" : "Zmenené %2$s",
+ "Deleted by %2$s" : "Zmazané %2$s",
+ "Restored by %2$s" : "Obnovené %2$s"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index 5c5f6fdcce8..eb4df5a6ef2 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "Shramba trenutno ni na voljo",
"Storage invalid" : "Določen prostor ni veljaven",
"Unknown error" : "Neznana napaka",
- "Files" : "Datoteke",
"All files" : "Vse datoteke",
"Recent" : "Nedavno",
"File could not be found" : "Datoteke ne najdem",
@@ -14,24 +14,17 @@ OC.L10N.register(
"Upload cancelled." : "Pošiljanje je preklicano.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ni mogoče poslati datoteke {filename}, saj je to ali mapa ali pa je velikost datoteke 0 bajtov.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Na voljo ni dovolj prostora. Velikost poslane datoteke je {size1}, na voljo pa je je {size2}.",
+ "Not enough free space" : "Ni dovolj prostora",
"Uploading..." : "Poteka pošiljanje ...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "še {hours}:{minutes}:{seconds} ur{plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "še {minutes}:{seconds} minut{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}min",
- "{seconds} second{plural_s} left" : "še {seconds} sekund{plural_s}",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Vsak trenutek ...",
- "Soon..." : "Kmalu",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} od {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.",
"Actions" : "Dejanja",
"Download" : "Prejmi",
"Rename" : "Preimenuj",
"Delete" : "Izbriši",
"Disconnect storage" : "Odklopi shrambo",
"Unshare" : "Prekini souporabo",
+ "Files" : "Datoteke",
"Details" : "Podrobnosti",
"Select" : "Izberi",
"Pending" : "V čakanju ...",
@@ -116,6 +109,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Skupna velikost {size1} presega omejitev velikosti {size2}",
"Error uploading file \"{fileName}\": {message}" : "Napaka pošiljanja datoteke \"{fileName}\": {message}",
"Could not get result from server." : "Ni mogoče pridobiti podatkov s strežnika.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "še {hours}:{minutes}:{seconds} ur{plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "še {minutes}:{seconds} minut{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}min",
+ "{seconds} second{plural_s} left" : "še {seconds} sekund{plural_s}",
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "Vsak trenutek ...",
+ "Soon..." : "Kmalu",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.",
"No entries in this folder match '{filter}'" : "Ni zadetkov, ki bi bili skladni z nizom '{filter}'",
"Local link" : "Krajevna povezava",
"{newname} already exists" : "{newname} že obstaja",
@@ -133,8 +135,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "Uporabnik %2$s je obnovil predmet %1$s.",
"Changed by %2$s" : "Zadnja sprememba: %2$s",
"Deleted by %2$s" : "Izbrisano: %2$s",
- "Restored by %2$s" : "Obnovljeno: %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uporabi ta naslov za <a href=\"%s\" target=\"_blank\">dostop do tvojih datotek preko WebDAV</a>",
- "Cancel upload" : "Prekini nalaganje"
+ "Restored by %2$s" : "Obnovljeno: %2$s"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index efcd0118270..0297cd72860 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -1,7 +1,7 @@
{ "translations": {
+ "Storage is temporarily not available" : "Shramba trenutno ni na voljo",
"Storage invalid" : "Določen prostor ni veljaven",
"Unknown error" : "Neznana napaka",
- "Files" : "Datoteke",
"All files" : "Vse datoteke",
"Recent" : "Nedavno",
"File could not be found" : "Datoteke ne najdem",
@@ -12,24 +12,17 @@
"Upload cancelled." : "Pošiljanje je preklicano.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ni mogoče poslati datoteke {filename}, saj je to ali mapa ali pa je velikost datoteke 0 bajtov.",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Na voljo ni dovolj prostora. Velikost poslane datoteke je {size1}, na voljo pa je je {size2}.",
+ "Not enough free space" : "Ni dovolj prostora",
"Uploading..." : "Poteka pošiljanje ...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "še {hours}:{minutes}:{seconds} ur{plural_s}",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "še {minutes}:{seconds} minut{plural_s}",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}min",
- "{seconds} second{plural_s} left" : "še {seconds} sekund{plural_s}",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Vsak trenutek ...",
- "Soon..." : "Kmalu",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} od {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.",
"Actions" : "Dejanja",
"Download" : "Prejmi",
"Rename" : "Preimenuj",
"Delete" : "Izbriši",
"Disconnect storage" : "Odklopi shrambo",
"Unshare" : "Prekini souporabo",
+ "Files" : "Datoteke",
"Details" : "Podrobnosti",
"Select" : "Izberi",
"Pending" : "V čakanju ...",
@@ -114,6 +107,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Skupna velikost {size1} presega omejitev velikosti {size2}",
"Error uploading file \"{fileName}\": {message}" : "Napaka pošiljanja datoteke \"{fileName}\": {message}",
"Could not get result from server." : "Ni mogoče pridobiti podatkov s strežnika.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "še {hours}:{minutes}:{seconds} ur{plural_s}",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "še {minutes}:{seconds} minut{plural_s}",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}min",
+ "{seconds} second{plural_s} left" : "še {seconds} sekund{plural_s}",
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "Vsak trenutek ...",
+ "Soon..." : "Kmalu",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.",
"No entries in this folder match '{filter}'" : "Ni zadetkov, ki bi bili skladni z nizom '{filter}'",
"Local link" : "Krajevna povezava",
"{newname} already exists" : "{newname} že obstaja",
@@ -131,8 +133,6 @@
"%2$s restored %1$s" : "Uporabnik %2$s je obnovil predmet %1$s.",
"Changed by %2$s" : "Zadnja sprememba: %2$s",
"Deleted by %2$s" : "Izbrisano: %2$s",
- "Restored by %2$s" : "Obnovljeno: %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uporabi ta naslov za <a href=\"%s\" target=\"_blank\">dostop do tvojih datotek preko WebDAV</a>",
- "Cancel upload" : "Prekini nalaganje"
+ "Restored by %2$s" : "Obnovljeno: %2$s"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js
index fc5f4b3f9e9..01945763ed4 100644
--- a/apps/files/l10n/sq.js
+++ b/apps/files/l10n/sq.js
@@ -1,11 +1,12 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "Depozita përkohësisht nuk është në dispozicion",
"Storage invalid" : "Depozitë e pavlefshme",
"Unknown error" : "Gabim i panjohur",
- "Files" : "Kartela",
- "All files" : "Krejt kartelat",
- "File could not be found" : "Kartela s’u gjet dot",
+ "All files" : "Të gjithë skedarët",
+ "Recent" : "Të fundit",
+ "File could not be found" : "Skedari s’u gjet dot",
"Home" : "Kreu",
"Close" : "Mbylle",
"Favorites" : "Të parapëlqyera",
@@ -13,24 +14,21 @@ OC.L10N.register(
"Upload cancelled." : "Ngarkimi u anulua.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "S’arrihet të ngarkohet {filename}, ngaqë është drejtori ose ka 0 bajte",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nuk ka hapësirë të mjaftueshme, po ngarkoni {size1}, por ka vetëm {size2} të lira",
+ "Target folder \"{dir}\" does not exist any more" : "Dosja e synuar \"{dir}\" nuk ekziston më",
+ "Not enough free space" : "Nuk ka hapsirë të mjaftueshme të lirë",
"Uploading..." : "Po ngarkohet...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{orë}:{minuta}:{sekonda} orë{shumë_s} majtas",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minuta}:{sekonda} minuta{shumë_s} majtas",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{sekonda} sekonda{shumë_s} majtas",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Në çdo çast tani…",
- "Soon..." : "Së shpejti…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} nga {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Ngarkimi i kartelës është në punë e sipër. Largimi nga faqja do të anulojë ngarkimin.",
"Actions" : "Veprime",
"Download" : "Shkarkoje",
"Rename" : "Riemërtojeni",
+ "Move" : "Lëvize",
+ "Target folder" : "Dosja e synuar",
"Delete" : "Fshije",
"Disconnect storage" : "Shkëpute depozitën",
"Unshare" : "Hiqe ndarjen",
+ "Could not load info for file \"{file}\"" : "Nuk mund të ngarkohet informacioni për skedarin \"{file}\"",
+ "Files" : "Skedar",
"Details" : "Hollësi",
"Select" : "Përzgjidhe",
"Pending" : "Në pritje",
@@ -47,32 +45,64 @@ OC.L10N.register(
"Could not create file \"{file}\" because it already exists" : "S’u krijua dot kartela \"{file}\" ngaqë ka një të tillë",
"Could not create folder \"{dir}\" because it already exists" : "S’u krijua dot dosja \"{dir}\" ngaqë ka një të tillë",
"Error deleting file \"{fileName}\"." : "Gabim në fshirjen e kartelës \"{fileName}\".",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Asnjë rezultat kërkimi në dosjet e tjera për '{tag}{filter}{endtag}'",
"Name" : "Emër",
"Size" : "Madhësi",
"Modified" : "Ndryshuar më",
"_%n folder_::_%n folders_" : ["%n dosje","%n dosje"],
- "_%n file_::_%n files_" : ["%n kartelë","%n kartela"],
+ "_%n file_::_%n files_" : ["%n kartelë","%n skedar"],
"{dirs} and {files}" : "{dirs} dhe {files}",
+ "_including %n hidden_::_including %n hidden_" : ["Përfshirë %n të fshehura","Përfshirë %n të fshehura"],
"You don’t have permission to upload or create files here" : "S’keni leje për të ngarkuar apo krijuar kartela këtu",
- "_Uploading %n file_::_Uploading %n files_" : ["Po ngarkohet %n kartelë","Po ngarkohen %n kartela"],
+ "_Uploading %n file_::_Uploading %n files_" : ["Po ngarkohet %n kartelë","Po ngarkohen %n skedar"],
"New" : "E re",
"\"{name}\" is an invalid file name." : "\"{name}\" është emër i pavlefshëm kartele.",
"File name cannot be empty." : "Emri i kartelës s’mund të jetë i zbrazët.",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "Depozita e {owner} është plot, kartelat s’mund të përditësohen ose njëkohësohen më!",
- "Your storage is full, files can not be updated or synced anymore!" : "Depozita juaj është plot, kartelat s’mund të përditësohen ose njëkohësohen më!",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Depozita e {owner} është plot, kartelat s’mund të përditësohen ose sinkronizohet më!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Depozita juaj është plot, kartelat s’mund të përditësohen ose sinkronizohet më!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Depozita e {owner} është thuasje plot ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Depozita juaj është thuajse plot ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["ka përputhje me '{filter}'","ka përputhje me '{filter}'"],
- "Path" : "Shteg",
+ "View in folder" : "Shikoje në dosje",
+ "Path" : "Rrugë",
"_%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",
"An error occurred while trying to update the tags" : "Ndodhi një gabim teksa provohej të përditësoheshin etiketat",
+ "Added to favorites" : "U shtua te të parapëlqyerat",
+ "Removed from favorites" : "U hoq nga të parapëlqyerat",
+ "You added {file} to your favorites" : "Ju shtuat {file} te të parapëlqyerat",
+ "You removed {file} from your favorites" : "Ju hoqët {file} nga të parapëlqyerat",
+ "File changes" : "Ndryshimet në skedar",
+ "Created by {user}" : "U krijua nga {user}",
+ "Changed by {user}" : "U ndryshua nga {user}",
+ "Deleted by {user}" : "U fshi nga {user}",
+ "Restored by {user}" : "U rikthye nga {user}",
+ "Renamed by {user}" : "U riemërua nga {user}",
+ "Moved by {user}" : "U ndryshua nga {user}",
+ "You created {file}" : "Ju krijuat {file}",
+ "{user} created {file}" : "{user} krijoj {file}",
+ "{file} was created in a public folder" : "{file} u krijua në një folder publik",
+ "You changed {file}" : "Ju ndryshuat {file}",
+ "{user} changed {file}" : "{user} ndryshoj {file}",
+ "You deleted {file}" : "Ju fshit {file}",
+ "{user} deleted {file}" : "{user} fshiu {file}",
+ "You restored {file}" : "Ju rikthyet {file}",
+ "{user} restored {file}" : "{user} riktheu {file}",
+ "You renamed {oldfile} to {newfile}" : "Ju riemëruat {oldfile} në {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} riemëruat {oldfile} në {newfile}",
+ "You moved {oldfile} to {newfile}" : "Ju lëvizët {oldfile} në {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} lëvizi {oldfile} në {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Një skedar është shtuar ose është hequr nga <strong>të preferuarat</strong> tuaja",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Një skedar ose dosje është <strong>ndryshuar</strong> ose <strong>riemëruar</strong>",
"A new file or folder has been <strong>created</strong>" : "<strong>U krijua</strong> një kartelë ose dosje e re",
+ "A new file or folder has been <strong>deleted</strong>" : "Një skedar ose dosje e re është <strong>fshirë</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Kufizojini njoftimet mbi krijim dhe ndryshim kartelash vetëm për <strong>kartelat tuaja të parapëlqyera</strong> <em>(Vetëm te rrjedha)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "Një skedar ose dosje e re është <strong>rikthyer</strong>",
"Upload (max. %s)" : "Ngarkim (max. %s)",
"File handling" : "Trajtim kartele",
"Maximum upload size" : "Madhësi maksimale ngarkimi",
@@ -92,6 +122,11 @@ OC.L10N.register(
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Kartelat që po rrekeni të ngarkoni e tejkalojnë madhësinë maksimale për ngarkime kartelash në këtë shërbyes.",
"No favorites" : "Pa të parapëlqyera",
"Files and folders you mark as favorite will show up here" : "Këtu do të duken kartelat dhe dosjet që i shënoni si të parapëlqyera",
+ "Shared with you" : "E ndarë me ju",
+ "Shared with others" : "E ndarë me të tjerët",
+ "Shared by link" : "E ndarë me lidhje",
+ "Tags" : "Etiketë",
+ "Deleted files" : "Skedar të fshirë",
"Text file" : "Kartelë tekst",
"New text file.txt" : "Kartelë e re file.txt",
"Storage not available" : "Pa depozitë gati",
@@ -113,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Madhësia gjithsej e kartelës {size1} e tejkalon kufirin {size2} për ngarkimet",
"Error uploading file \"{fileName}\": {message}" : "Gabim në ngarkimin e kartelës \"{fileName}\": {message}",
"Could not get result from server." : "S’mori dot përfundime nga shërbyesi.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{orë}:{minuta}:{sekonda} orë{shumë_s} majtas",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minuta}:{sekonda} minuta{shumë_s} majtas",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{sekonda} sekonda{shumë_s} majtas",
+ "{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.",
"No entries in this folder match '{filter}'" : "Në këtë dosje s’ka zëra me përputhje me '{filter}'",
"Local link" : "Lidhje vendore",
"{newname} already exists" : "Ka tashmë një {newname}",
diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json
index b7c2dab7bf3..03b0d305d4e 100644
--- a/apps/files/l10n/sq.json
+++ b/apps/files/l10n/sq.json
@@ -1,9 +1,10 @@
{ "translations": {
+ "Storage is temporarily not available" : "Depozita përkohësisht nuk është në dispozicion",
"Storage invalid" : "Depozitë e pavlefshme",
"Unknown error" : "Gabim i panjohur",
- "Files" : "Kartela",
- "All files" : "Krejt kartelat",
- "File could not be found" : "Kartela s’u gjet dot",
+ "All files" : "Të gjithë skedarët",
+ "Recent" : "Të fundit",
+ "File could not be found" : "Skedari s’u gjet dot",
"Home" : "Kreu",
"Close" : "Mbylle",
"Favorites" : "Të parapëlqyera",
@@ -11,24 +12,21 @@
"Upload cancelled." : "Ngarkimi u anulua.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "S’arrihet të ngarkohet {filename}, ngaqë është drejtori ose ka 0 bajte",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nuk ka hapësirë të mjaftueshme, po ngarkoni {size1}, por ka vetëm {size2} të lira",
+ "Target folder \"{dir}\" does not exist any more" : "Dosja e synuar \"{dir}\" nuk ekziston më",
+ "Not enough free space" : "Nuk ka hapsirë të mjaftueshme të lirë",
"Uploading..." : "Po ngarkohet...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{orë}:{minuta}:{sekonda} orë{shumë_s} majtas",
- "{hours}:{minutes}h" : "{hours}:{minutes}h",
- "{minutes}:{seconds} minute{plural_s} left" : "{minuta}:{sekonda} minuta{shumë_s} majtas",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "{seconds} second{plural_s} left" : "{sekonda} sekonda{shumë_s} majtas",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Në çdo çast tani…",
- "Soon..." : "Së shpejti…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} nga {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Ngarkimi i kartelës është në punë e sipër. Largimi nga faqja do të anulojë ngarkimin.",
"Actions" : "Veprime",
"Download" : "Shkarkoje",
"Rename" : "Riemërtojeni",
+ "Move" : "Lëvize",
+ "Target folder" : "Dosja e synuar",
"Delete" : "Fshije",
"Disconnect storage" : "Shkëpute depozitën",
"Unshare" : "Hiqe ndarjen",
+ "Could not load info for file \"{file}\"" : "Nuk mund të ngarkohet informacioni për skedarin \"{file}\"",
+ "Files" : "Skedar",
"Details" : "Hollësi",
"Select" : "Përzgjidhe",
"Pending" : "Në pritje",
@@ -45,32 +43,64 @@
"Could not create file \"{file}\" because it already exists" : "S’u krijua dot kartela \"{file}\" ngaqë ka një të tillë",
"Could not create folder \"{dir}\" because it already exists" : "S’u krijua dot dosja \"{dir}\" ngaqë ka një të tillë",
"Error deleting file \"{fileName}\"." : "Gabim në fshirjen e kartelës \"{fileName}\".",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Asnjë rezultat kërkimi në dosjet e tjera për '{tag}{filter}{endtag}'",
"Name" : "Emër",
"Size" : "Madhësi",
"Modified" : "Ndryshuar më",
"_%n folder_::_%n folders_" : ["%n dosje","%n dosje"],
- "_%n file_::_%n files_" : ["%n kartelë","%n kartela"],
+ "_%n file_::_%n files_" : ["%n kartelë","%n skedar"],
"{dirs} and {files}" : "{dirs} dhe {files}",
+ "_including %n hidden_::_including %n hidden_" : ["Përfshirë %n të fshehura","Përfshirë %n të fshehura"],
"You don’t have permission to upload or create files here" : "S’keni leje për të ngarkuar apo krijuar kartela këtu",
- "_Uploading %n file_::_Uploading %n files_" : ["Po ngarkohet %n kartelë","Po ngarkohen %n kartela"],
+ "_Uploading %n file_::_Uploading %n files_" : ["Po ngarkohet %n kartelë","Po ngarkohen %n skedar"],
"New" : "E re",
"\"{name}\" is an invalid file name." : "\"{name}\" është emër i pavlefshëm kartele.",
"File name cannot be empty." : "Emri i kartelës s’mund të jetë i zbrazët.",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "Depozita e {owner} është plot, kartelat s’mund të përditësohen ose njëkohësohen më!",
- "Your storage is full, files can not be updated or synced anymore!" : "Depozita juaj është plot, kartelat s’mund të përditësohen ose njëkohësohen më!",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Depozita e {owner} është plot, kartelat s’mund të përditësohen ose sinkronizohet më!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Depozita juaj është plot, kartelat s’mund të përditësohen ose sinkronizohet më!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Depozita e {owner} është thuasje plot ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Depozita juaj është thuajse plot ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["ka përputhje me '{filter}'","ka përputhje me '{filter}'"],
- "Path" : "Shteg",
+ "View in folder" : "Shikoje në dosje",
+ "Path" : "Rrugë",
"_%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",
"An error occurred while trying to update the tags" : "Ndodhi një gabim teksa provohej të përditësoheshin etiketat",
+ "Added to favorites" : "U shtua te të parapëlqyerat",
+ "Removed from favorites" : "U hoq nga të parapëlqyerat",
+ "You added {file} to your favorites" : "Ju shtuat {file} te të parapëlqyerat",
+ "You removed {file} from your favorites" : "Ju hoqët {file} nga të parapëlqyerat",
+ "File changes" : "Ndryshimet në skedar",
+ "Created by {user}" : "U krijua nga {user}",
+ "Changed by {user}" : "U ndryshua nga {user}",
+ "Deleted by {user}" : "U fshi nga {user}",
+ "Restored by {user}" : "U rikthye nga {user}",
+ "Renamed by {user}" : "U riemërua nga {user}",
+ "Moved by {user}" : "U ndryshua nga {user}",
+ "You created {file}" : "Ju krijuat {file}",
+ "{user} created {file}" : "{user} krijoj {file}",
+ "{file} was created in a public folder" : "{file} u krijua në një folder publik",
+ "You changed {file}" : "Ju ndryshuat {file}",
+ "{user} changed {file}" : "{user} ndryshoj {file}",
+ "You deleted {file}" : "Ju fshit {file}",
+ "{user} deleted {file}" : "{user} fshiu {file}",
+ "You restored {file}" : "Ju rikthyet {file}",
+ "{user} restored {file}" : "{user} riktheu {file}",
+ "You renamed {oldfile} to {newfile}" : "Ju riemëruat {oldfile} në {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} riemëruat {oldfile} në {newfile}",
+ "You moved {oldfile} to {newfile}" : "Ju lëvizët {oldfile} në {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} lëvizi {oldfile} në {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Një skedar është shtuar ose është hequr nga <strong>të preferuarat</strong> tuaja",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Një skedar ose dosje është <strong>ndryshuar</strong> ose <strong>riemëruar</strong>",
"A new file or folder has been <strong>created</strong>" : "<strong>U krijua</strong> një kartelë ose dosje e re",
+ "A new file or folder has been <strong>deleted</strong>" : "Një skedar ose dosje e re është <strong>fshirë</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Kufizojini njoftimet mbi krijim dhe ndryshim kartelash vetëm për <strong>kartelat tuaja të parapëlqyera</strong> <em>(Vetëm te rrjedha)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "Një skedar ose dosje e re është <strong>rikthyer</strong>",
"Upload (max. %s)" : "Ngarkim (max. %s)",
"File handling" : "Trajtim kartele",
"Maximum upload size" : "Madhësi maksimale ngarkimi",
@@ -90,6 +120,11 @@
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Kartelat që po rrekeni të ngarkoni e tejkalojnë madhësinë maksimale për ngarkime kartelash në këtë shërbyes.",
"No favorites" : "Pa të parapëlqyera",
"Files and folders you mark as favorite will show up here" : "Këtu do të duken kartelat dhe dosjet që i shënoni si të parapëlqyera",
+ "Shared with you" : "E ndarë me ju",
+ "Shared with others" : "E ndarë me të tjerët",
+ "Shared by link" : "E ndarë me lidhje",
+ "Tags" : "Etiketë",
+ "Deleted files" : "Skedar të fshirë",
"Text file" : "Kartelë tekst",
"New text file.txt" : "Kartelë e re file.txt",
"Storage not available" : "Pa depozitë gati",
@@ -111,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Madhësia gjithsej e kartelës {size1} e tejkalon kufirin {size2} për ngarkimet",
"Error uploading file \"{fileName}\": {message}" : "Gabim në ngarkimin e kartelës \"{fileName}\": {message}",
"Could not get result from server." : "S’mori dot përfundime nga shërbyesi.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{orë}:{minuta}:{sekonda} orë{shumë_s} majtas",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minuta}:{sekonda} minuta{shumë_s} majtas",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{sekonda} sekonda{shumë_s} majtas",
+ "{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.",
"No entries in this folder match '{filter}'" : "Në këtë dosje s’ka zëra me përputhje me '{filter}'",
"Local link" : "Lidhje vendore",
"{newname} already exists" : "Ka tashmë një {newname}",
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index 1e585242f46..001fc6b07b8 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -4,9 +4,8 @@ OC.L10N.register(
"Storage is temporarily not available" : "Lagring är tillfälligt inte tillgänglig",
"Storage invalid" : "Lagring ogiltig",
"Unknown error" : "Okänt fel",
- "Files" : "Filer",
"All files" : "Alla filer",
- "Recent" : "Nyligen",
+ "Recent" : "Senaste",
"File could not be found" : "Fil kunde inte hittas",
"Home" : "Hem",
"Close" : "Stäng",
@@ -19,24 +18,17 @@ OC.L10N.register(
"Not enough free space" : "Inte tillräckligt med ledigt utrymme",
"Uploading..." : "Laddar upp...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timme/ar kvar",
- "{hours}:{minutes}h" : "{hours}:{minutes}",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minut(er) kvar",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}",
- "{seconds} second{plural_s} left" : "{seconds} sekund(er) kvar",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Alldeles strax...",
- "Soon..." : "Snart...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
"Actions" : "Åtgärder",
- "Download" : "Ladda ner",
+ "Download" : "Ladda ned",
"Rename" : "Byt namn",
"Move" : "Flytta",
"Target folder" : "Målmapp",
"Delete" : "Radera",
"Disconnect storage" : "Koppla bort lagring",
"Unshare" : "Sluta dela",
+ "Could not load info for file \"{file}\"" : "Kunde inte ladda information för fil \"{file}\"",
+ "Files" : "Filer",
"Details" : "Detaljer",
"Select" : "Välj",
"Pending" : "Väntar",
@@ -76,11 +68,15 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"],
"Favorited" : "Favoriserad",
"Favorite" : "Favorit",
- "Copy local link" : "Kopiera lokal länk",
+ "Copy local link" : "Kopiera den lokala länken",
"Folder" : "Mapp",
"New folder" : "Ny mapp",
"Upload" : "Ladda upp",
"An error occurred while trying to update the tags" : "Ett fel uppstod när uppdatera taggarna",
+ "Added to favorites" : "Lades till i favoriter",
+ "Removed from favorites" : "Togs bort från favoriter",
+ "You added {file} to your favorites" : "Du la till {file} till dina favoriter",
+ "You removed {file} from your favorites" : "Du tog bort {file} från dina favoriter",
"File changes" : "Filändringar",
"Created by {user}" : "Skapad av {user}",
"Changed by {user}" : "Ändrad av {user}",
@@ -90,7 +86,7 @@ OC.L10N.register(
"Moved by {user}" : "Flyttad av {user}",
"You created {file}" : "Du skapade {file}",
"{user} created {file}" : "{user} skapade {file}",
- "{file} was created in a public folder" : "{file} skapades i en publik mapp",
+ "{file} was created in a public folder" : "{file} skapades i en offentlig mapp",
"You changed {file}" : "Du ändrade {file}",
"{user} changed {file}" : "{user} ändrade {file}",
"You deleted {file}" : "Du raderade {file}",
@@ -101,8 +97,12 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} ändrade filnamn {oldfile} till {newfile}",
"You moved {oldfile} to {newfile}" : "Du flyttade {oldfile} till {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} flyttade {oldfile} till {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "En fil har lagts till eller tagits bort från dina <strong>favoriter</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "En fil har blivit <strong>ändrad</strong> eller <strong>bytt namn</strong>",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mapp har blivit <strong>skapad</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begränsa notiser om skapande och ändringar till dina <strong>favoritfiler</strong> <em>(Endast ström)</em>",
+ "A new file or folder has been <strong>deleted</strong>" : "En ny fil har blivit <strong>raderad</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begränsa notiser om skapande och ändringar till dina <strong>favoritfiler</strong> <em>(Endast i flödet)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "En ny fil eller mapp har blivit <strong>återställd</strong>",
"Upload (max. %s)" : "Ladda upp (max. %s)",
"File handling" : "Filhantering",
"Maximum upload size" : "Maximal storlek att ladda upp",
@@ -121,7 +121,7 @@ OC.L10N.register(
"Upload too large" : "För stor uppladdning",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.",
"No favorites" : "Inga favoriter",
- "Files and folders you mark as favorite will show up here" : "Filer och mappar du markerat som favoriter kommer att visas här",
+ "Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här",
"Shared with you" : "Delad med dig",
"Shared with others" : "Delad med andra",
"Shared by link" : "Delad via länk",
@@ -148,6 +148,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Totala filstorleken {size1} överskrider uppladdningsgränsen {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fel vid uppladdning av fil \"{fileName}\": {message}",
"Could not get result from server." : "Gick inte att hämta resultat från server.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timme/ar kvar",
+ "{hours}:{minutes}h" : "{hours}:{minutes}",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minut(er) kvar",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}",
+ "{seconds} second{plural_s} left" : "{seconds} sekund(er) kvar",
+ "{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.",
"No entries in this folder match '{filter}'" : "Inga poster i denna mapp match \"{filter}\"",
"Local link" : "Lokal länk",
"{newname} already exists" : "{newname} existerar redan",
@@ -156,7 +165,7 @@ OC.L10N.register(
"A file or folder has been <strong>restored</strong>" : "En ny fil eller mapp har blivit <strong>återskapad</strong>",
"You created %1$s" : "Du skapade %1$s",
"%2$s created %1$s" : "%2$s skapade %1$s",
- "%1$s was created in a public folder" : "%1$s skapades i en publik mapp",
+ "%1$s was created in a public folder" : "%1$s skapades i en offentlig mapp",
"You changed %1$s" : "Du ändrade %1$s",
"%2$s changed %1$s" : "%2$s ändrade %1$s",
"You deleted %1$s" : "Du raderade %1$s",
@@ -165,8 +174,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s återskapade %1$s",
"Changed by %2$s" : "Ändrad av %2$s",
"Deleted by %2$s" : "Bortagen av %2$s",
- "Restored by %2$s" : "Återställd av %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Använd denna adress för att <a href=\"%s\" target=\"_blank\">få tillgång till filer via WebDAV</a>",
- "Cancel upload" : "Avbryt uppladdning"
+ "Restored by %2$s" : "Återställd av %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index a0740f906a4..62e44c6c28e 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -2,9 +2,8 @@
"Storage is temporarily not available" : "Lagring är tillfälligt inte tillgänglig",
"Storage invalid" : "Lagring ogiltig",
"Unknown error" : "Okänt fel",
- "Files" : "Filer",
"All files" : "Alla filer",
- "Recent" : "Nyligen",
+ "Recent" : "Senaste",
"File could not be found" : "Fil kunde inte hittas",
"Home" : "Hem",
"Close" : "Stäng",
@@ -17,24 +16,17 @@
"Not enough free space" : "Inte tillräckligt med ledigt utrymme",
"Uploading..." : "Laddar upp...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timme/ar kvar",
- "{hours}:{minutes}h" : "{hours}:{minutes}",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minut(er) kvar",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}",
- "{seconds} second{plural_s} left" : "{seconds} sekund(er) kvar",
- "{seconds}s" : "{seconds}s",
- "Any moment now..." : "Alldeles strax...",
- "Soon..." : "Snart...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
"Actions" : "Åtgärder",
- "Download" : "Ladda ner",
+ "Download" : "Ladda ned",
"Rename" : "Byt namn",
"Move" : "Flytta",
"Target folder" : "Målmapp",
"Delete" : "Radera",
"Disconnect storage" : "Koppla bort lagring",
"Unshare" : "Sluta dela",
+ "Could not load info for file \"{file}\"" : "Kunde inte ladda information för fil \"{file}\"",
+ "Files" : "Filer",
"Details" : "Detaljer",
"Select" : "Välj",
"Pending" : "Väntar",
@@ -74,11 +66,15 @@
"_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"],
"Favorited" : "Favoriserad",
"Favorite" : "Favorit",
- "Copy local link" : "Kopiera lokal länk",
+ "Copy local link" : "Kopiera den lokala länken",
"Folder" : "Mapp",
"New folder" : "Ny mapp",
"Upload" : "Ladda upp",
"An error occurred while trying to update the tags" : "Ett fel uppstod när uppdatera taggarna",
+ "Added to favorites" : "Lades till i favoriter",
+ "Removed from favorites" : "Togs bort från favoriter",
+ "You added {file} to your favorites" : "Du la till {file} till dina favoriter",
+ "You removed {file} from your favorites" : "Du tog bort {file} från dina favoriter",
"File changes" : "Filändringar",
"Created by {user}" : "Skapad av {user}",
"Changed by {user}" : "Ändrad av {user}",
@@ -88,7 +84,7 @@
"Moved by {user}" : "Flyttad av {user}",
"You created {file}" : "Du skapade {file}",
"{user} created {file}" : "{user} skapade {file}",
- "{file} was created in a public folder" : "{file} skapades i en publik mapp",
+ "{file} was created in a public folder" : "{file} skapades i en offentlig mapp",
"You changed {file}" : "Du ändrade {file}",
"{user} changed {file}" : "{user} ändrade {file}",
"You deleted {file}" : "Du raderade {file}",
@@ -99,8 +95,12 @@
"{user} renamed {oldfile} to {newfile}" : "{user} ändrade filnamn {oldfile} till {newfile}",
"You moved {oldfile} to {newfile}" : "Du flyttade {oldfile} till {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} flyttade {oldfile} till {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "En fil har lagts till eller tagits bort från dina <strong>favoriter</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "En fil har blivit <strong>ändrad</strong> eller <strong>bytt namn</strong>",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mapp har blivit <strong>skapad</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begränsa notiser om skapande och ändringar till dina <strong>favoritfiler</strong> <em>(Endast ström)</em>",
+ "A new file or folder has been <strong>deleted</strong>" : "En ny fil har blivit <strong>raderad</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begränsa notiser om skapande och ändringar till dina <strong>favoritfiler</strong> <em>(Endast i flödet)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "En ny fil eller mapp har blivit <strong>återställd</strong>",
"Upload (max. %s)" : "Ladda upp (max. %s)",
"File handling" : "Filhantering",
"Maximum upload size" : "Maximal storlek att ladda upp",
@@ -119,7 +119,7 @@
"Upload too large" : "För stor uppladdning",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.",
"No favorites" : "Inga favoriter",
- "Files and folders you mark as favorite will show up here" : "Filer och mappar du markerat som favoriter kommer att visas här",
+ "Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här",
"Shared with you" : "Delad med dig",
"Shared with others" : "Delad med andra",
"Shared by link" : "Delad via länk",
@@ -146,6 +146,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Totala filstorleken {size1} överskrider uppladdningsgränsen {size2}",
"Error uploading file \"{fileName}\": {message}" : "Fel vid uppladdning av fil \"{fileName}\": {message}",
"Could not get result from server." : "Gick inte att hämta resultat från server.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timme/ar kvar",
+ "{hours}:{minutes}h" : "{hours}:{minutes}",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minut(er) kvar",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}",
+ "{seconds} second{plural_s} left" : "{seconds} sekund(er) kvar",
+ "{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.",
"No entries in this folder match '{filter}'" : "Inga poster i denna mapp match \"{filter}\"",
"Local link" : "Lokal länk",
"{newname} already exists" : "{newname} existerar redan",
@@ -154,7 +163,7 @@
"A file or folder has been <strong>restored</strong>" : "En ny fil eller mapp har blivit <strong>återskapad</strong>",
"You created %1$s" : "Du skapade %1$s",
"%2$s created %1$s" : "%2$s skapade %1$s",
- "%1$s was created in a public folder" : "%1$s skapades i en publik mapp",
+ "%1$s was created in a public folder" : "%1$s skapades i en offentlig mapp",
"You changed %1$s" : "Du ändrade %1$s",
"%2$s changed %1$s" : "%2$s ändrade %1$s",
"You deleted %1$s" : "Du raderade %1$s",
@@ -163,8 +172,6 @@
"%2$s restored %1$s" : "%2$s återskapade %1$s",
"Changed by %2$s" : "Ändrad av %2$s",
"Deleted by %2$s" : "Bortagen av %2$s",
- "Restored by %2$s" : "Återställd av %2$s",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Använd denna adress för att <a href=\"%s\" target=\"_blank\">få tillgång till filer via WebDAV</a>",
- "Cancel upload" : "Avbryt uppladdning"
+ "Restored by %2$s" : "Återställd av %2$s"
},"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 679f218b96f..c41250c07f5 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "Gecici depolama alani mevcut değil",
"Storage invalid" : "Depolama geçersiz",
"Unknown error" : "Bilinmeyen hata",
- "Files" : "Dosyalar",
"All files" : "Tüm dosyalar",
"Recent" : "Son",
"File could not be found" : "Dosya bulunamadı",
@@ -14,24 +14,19 @@ OC.L10N.register(
"Upload cancelled." : "Yükleme iptal edildi.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename} bir dizin veya 0 bayt olduğundan yüklenemedi",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Yeterince boş alan yok. Gönderdiğiniz boyut {size1} ancak {size2} alan mevcut",
+ "Not enough free space" : "Yeterli disk alanı yok",
"Uploading..." : "Yükleniyor...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} saat kaldı",
- "{hours}:{minutes}h" : "{hours}:{minutes} saat",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} dakika kaldı",
- "{minutes}:{seconds}m" : "{minutes}:{seconds} dk",
- "{seconds} second{plural_s} left" : "{seconds} saniye kaldı",
- "{seconds}s" : "{seconds} saniye",
- "Any moment now..." : "Hemen şimdi...",
- "Soon..." : "Yakında...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.",
"Actions" : "Eylemler",
"Download" : "İndir",
"Rename" : "Yeniden adlandır",
+ "Move" : "Taşı",
+ "Target folder" : "Hedeflenen klasör",
"Delete" : "Sil",
"Disconnect storage" : "Depolama bağlantısını kes",
"Unshare" : "Paylaşmayı Kaldır",
+ "Files" : "Dosyalar",
"Details" : "Ayrıntılar",
"Select" : "Seç",
"Pending" : "Bekliyor",
@@ -48,6 +43,7 @@ OC.L10N.register(
"Could not create file \"{file}\" because it already exists" : "\"{file}\" dosyası zaten mevcut olduğundan oluşturulamadı",
"Could not create folder \"{dir}\" because it already exists" : "\"{dir}\" klasörü zaten mevcut olduğundan oluşturulamadı",
"Error deleting file \"{fileName}\"." : "\"{fileName}\" dosyası silinirken hata.",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "'{tag}{filter}{endtag}' için diğer klasörlerde herhangi bir arama sonucu yok",
"Name" : "İsim",
"Size" : "Boyut",
"Modified" : "Değiştirilme",
@@ -69,10 +65,23 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bayt","%n bayt"],
"Favorited" : "Sık kullanılanlara eklendi",
"Favorite" : "Sık kullanılan",
+ "Copy local link" : "Bağlantıyı kopyala",
"Folder" : "Klasör",
"New folder" : "Yeni klasör",
"Upload" : "Yükle",
"An error occurred while trying to update the tags" : "Etiketler güncellenmeye çalışılırken bir hata oluştu",
+ "Added to favorites" : "Favorilere eklendi",
+ "Removed from favorites" : "Favorilerden çıkarildi",
+ "You added {file} to your favorites" : "Sizin {file} dosyanız favorilerinize eklendi",
+ "You removed {file} from your favorites" : "Sizin {file} dosyanız favorilerinizden çıkarildi",
+ "File changes" : "Dosya değişikleri",
+ "Created by {user}" : "{user} tarafından oluşturuldu",
+ "Changed by {user}" : "{user} tarafından değiştirildi",
+ "Deleted by {user}" : "{user} tarafından silindi",
+ "Restored by {user}" : "{user} tarafından geri alindi",
+ "Renamed by {user}" : "{user} tarafından ismi değiştirildi",
+ "Moved by {user}" : "{user} tarafından taşındı",
+ "{user} created {file}" : "{user} tarafından {file} oluşturuldu",
"A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>Sık kullanılan dosyalarınızın</strong> oluşturulma ve değiştirilme hakkındaki bildirimlerini sınırla <em>(Sadece akışta)</em>",
"Upload (max. %s)" : "Yükle (azami: %s)",
@@ -94,6 +103,11 @@ OC.L10N.register(
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Yüklemeye çalıştığınız dosyalar bu sunucudaki azami yükleme boyutunu aşıyor.",
"No favorites" : "Sık kullanılan öge yok.",
"Files and folders you mark as favorite will show up here" : "Sık kullanılan olarak işaretlediğiniz dosya ve klasörler burada gösterilecek",
+ "Shared with you" : "Sizinle paylaşılan",
+ "Shared with others" : "Diğerleri ile paylaşılan",
+ "Shared by link" : "Paylaşım bağlantısı",
+ "Tags" : "Etiketler",
+ "Deleted files" : "Silinmiş dosyalar",
"Text file" : "Metin dosyası",
"New text file.txt" : "Yeni metin dosyası.txt",
"Storage not available" : "Depolama yok",
@@ -115,6 +129,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Toplam dosya boyutu {size1}, {size2} gönderme sınırını aşıyor",
"Error uploading file \"{fileName}\": {message}" : "\"{fileName}\" dosyası yüklenirken hata: {message}",
"Could not get result from server." : "Sunucudan sonuç alınamadı.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} saat kaldı",
+ "{hours}:{minutes}h" : "{hours}:{minutes} saat",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} dakika kaldı",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} dk",
+ "{seconds} second{plural_s} left" : "{seconds} saniye kaldı",
+ "{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. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.",
"No entries in this folder match '{filter}'" : "Bu klasörde hiçbir girdi '{filter}' ile eşleşmiyor",
"Local link" : "Yerel bağlantı",
"{newname} already exists" : "{newname} zaten mevcut",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index 2a8aee6bd0e..b612817deab 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -1,7 +1,7 @@
{ "translations": {
+ "Storage is temporarily not available" : "Gecici depolama alani mevcut değil",
"Storage invalid" : "Depolama geçersiz",
"Unknown error" : "Bilinmeyen hata",
- "Files" : "Dosyalar",
"All files" : "Tüm dosyalar",
"Recent" : "Son",
"File could not be found" : "Dosya bulunamadı",
@@ -12,24 +12,19 @@
"Upload cancelled." : "Yükleme iptal edildi.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename} bir dizin veya 0 bayt olduğundan yüklenemedi",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Yeterince boş alan yok. Gönderdiğiniz boyut {size1} ancak {size2} alan mevcut",
+ "Not enough free space" : "Yeterli disk alanı yok",
"Uploading..." : "Yükleniyor...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} saat kaldı",
- "{hours}:{minutes}h" : "{hours}:{minutes} saat",
- "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} dakika kaldı",
- "{minutes}:{seconds}m" : "{minutes}:{seconds} dk",
- "{seconds} second{plural_s} left" : "{seconds} saniye kaldı",
- "{seconds}s" : "{seconds} saniye",
- "Any moment now..." : "Hemen şimdi...",
- "Soon..." : "Yakında...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.",
"Actions" : "Eylemler",
"Download" : "İndir",
"Rename" : "Yeniden adlandır",
+ "Move" : "Taşı",
+ "Target folder" : "Hedeflenen klasör",
"Delete" : "Sil",
"Disconnect storage" : "Depolama bağlantısını kes",
"Unshare" : "Paylaşmayı Kaldır",
+ "Files" : "Dosyalar",
"Details" : "Ayrıntılar",
"Select" : "Seç",
"Pending" : "Bekliyor",
@@ -46,6 +41,7 @@
"Could not create file \"{file}\" because it already exists" : "\"{file}\" dosyası zaten mevcut olduğundan oluşturulamadı",
"Could not create folder \"{dir}\" because it already exists" : "\"{dir}\" klasörü zaten mevcut olduğundan oluşturulamadı",
"Error deleting file \"{fileName}\"." : "\"{fileName}\" dosyası silinirken hata.",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "'{tag}{filter}{endtag}' için diğer klasörlerde herhangi bir arama sonucu yok",
"Name" : "İsim",
"Size" : "Boyut",
"Modified" : "Değiştirilme",
@@ -67,10 +63,23 @@
"_%n byte_::_%n bytes_" : ["%n bayt","%n bayt"],
"Favorited" : "Sık kullanılanlara eklendi",
"Favorite" : "Sık kullanılan",
+ "Copy local link" : "Bağlantıyı kopyala",
"Folder" : "Klasör",
"New folder" : "Yeni klasör",
"Upload" : "Yükle",
"An error occurred while trying to update the tags" : "Etiketler güncellenmeye çalışılırken bir hata oluştu",
+ "Added to favorites" : "Favorilere eklendi",
+ "Removed from favorites" : "Favorilerden çıkarildi",
+ "You added {file} to your favorites" : "Sizin {file} dosyanız favorilerinize eklendi",
+ "You removed {file} from your favorites" : "Sizin {file} dosyanız favorilerinizden çıkarildi",
+ "File changes" : "Dosya değişikleri",
+ "Created by {user}" : "{user} tarafından oluşturuldu",
+ "Changed by {user}" : "{user} tarafından değiştirildi",
+ "Deleted by {user}" : "{user} tarafından silindi",
+ "Restored by {user}" : "{user} tarafından geri alindi",
+ "Renamed by {user}" : "{user} tarafından ismi değiştirildi",
+ "Moved by {user}" : "{user} tarafından taşındı",
+ "{user} created {file}" : "{user} tarafından {file} oluşturuldu",
"A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>",
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>Sık kullanılan dosyalarınızın</strong> oluşturulma ve değiştirilme hakkındaki bildirimlerini sınırla <em>(Sadece akışta)</em>",
"Upload (max. %s)" : "Yükle (azami: %s)",
@@ -92,6 +101,11 @@
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Yüklemeye çalıştığınız dosyalar bu sunucudaki azami yükleme boyutunu aşıyor.",
"No favorites" : "Sık kullanılan öge yok.",
"Files and folders you mark as favorite will show up here" : "Sık kullanılan olarak işaretlediğiniz dosya ve klasörler burada gösterilecek",
+ "Shared with you" : "Sizinle paylaşılan",
+ "Shared with others" : "Diğerleri ile paylaşılan",
+ "Shared by link" : "Paylaşım bağlantısı",
+ "Tags" : "Etiketler",
+ "Deleted files" : "Silinmiş dosyalar",
"Text file" : "Metin dosyası",
"New text file.txt" : "Yeni metin dosyası.txt",
"Storage not available" : "Depolama yok",
@@ -113,6 +127,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "Toplam dosya boyutu {size1}, {size2} gönderme sınırını aşıyor",
"Error uploading file \"{fileName}\": {message}" : "\"{fileName}\" dosyası yüklenirken hata: {message}",
"Could not get result from server." : "Sunucudan sonuç alınamadı.",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} saat kaldı",
+ "{hours}:{minutes}h" : "{hours}:{minutes} saat",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} dakika kaldı",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} dk",
+ "{seconds} second{plural_s} left" : "{seconds} saniye kaldı",
+ "{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. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.",
"No entries in this folder match '{filter}'" : "Bu klasörde hiçbir girdi '{filter}' ile eşleşmiyor",
"Local link" : "Yerel bağlantı",
"{newname} already exists" : "{newname} zaten mevcut",
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 0d54ebf4095..b36f8fbdf6b 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -1,128 +1,172 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "存储空间暂时不可用",
"Storage invalid" : "存储空间无效",
"Unknown error" : "未知错误",
- "Files" : "文件",
"All files" : "全部文件",
+ "Recent" : "最近",
"File could not be found" : "文件未找到",
- "Home" : "家庭",
+ "Home" : "首页",
"Close" : "关闭",
"Favorites" : "收藏",
- "Could not create folder \"{dir}\"" : "不能创建文件夹 \"{dir}\"",
+ "Could not create folder \"{dir}\"" : "无法创建文件夹 \"{dir}\"",
"Upload cancelled." : "上传已取消",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "不能上传文件 {filename} ,由于它是一个目录或者为0字节",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "没有足够的可用空间,您正在上传 {size1} 的文件但是只有 {size2} 可用。",
- "Uploading..." : "上传中...",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename},因为它是一个目录或者是大小为 0 的空文件",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足,您上传的文件大小为 {size1} ,但可用空间仅剩 {size2}",
+ "Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在",
+ "Not enough free space" : "可用空间不足",
+ "Uploading..." : "正在上传...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩余时间:{hours}:{minutes}:{seconds} ",
- "{hours}:{minutes}h" : "{hours}:{minutes}",
- "{minutes}:{seconds} minute{plural_s} left" : "剩余分钟:{minutes}:{seconds} ",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}",
- "{seconds} second{plural_s} left" : "剩下{seconds} 秒",
- "{seconds}s" : "{seconds}秒",
- "Any moment now..." : "现在任何时候...",
- "Soon..." : "很快...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中。现在离开此页会导致上传动作被取消。",
- "Actions" : "动作",
+ "Actions" : "操作",
"Download" : "下载",
"Rename" : "重命名",
+ "Move" : "移动",
+ "Target folder" : "目标目录",
"Delete" : "删除",
- "Disconnect storage" : "断开储存连接",
+ "Disconnect storage" : "断开存储链接",
"Unshare" : "取消共享",
+ "Could not load info for file \"{file}\"" : "无法加载文件 \"{file}\" 的信息",
+ "Files" : "文件",
"Details" : "详细信息",
"Select" : "选择",
"Pending" : "等待",
"Unable to determine date" : "无法确定日期",
"This operation is forbidden" : "操作被禁止",
- "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
- "Could not move \"{file}\", target exists" : "不能移动 \"{file}\",目标已存在。",
- "Could not move \"{file}\"" : "不能移动 \"{file}\"",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用, 请检查日志或联系管理员",
+ "Could not move \"{file}\", target exists" : "无法移动 \"{file}\", 目标已存在",
+ "Could not move \"{file}\"" : "无法移动 \"{file}\"",
"{newName} already exists" : "{newname} 已经存在",
- "Could not rename \"{fileName}\", it does not exist any more" : "不能重命名 \"{fileName}\",此文件已经不存在",
- "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "在文件夹 \"{dir}\" 中已经存在 \"{targetName}\" 。请换一个名字试下。",
- "Could not rename \"{fileName}\"" : "不能重命名 \"{fileName}\"",
- "Could not create file \"{file}\"" : "不能创建文件 \"{file}\"",
- "Could not create file \"{file}\" because it already exists" : "不能创建文件 \"{file}\" ,因为它已经存在",
- "Could not create folder \"{dir}\" because it already exists" : "不能创建文件夹 \"{dir}\" ,因为它已经存在",
- "Error deleting file \"{fileName}\"." : "删除文件 \"{fileName}\" 时出错。",
+ "Could not rename \"{fileName}\", it does not exist any more" : "无法重命名 \"{fileName}\", 此文件已经不存在",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\". 请尝试其他的名称.",
+ "Could not rename \"{fileName}\"" : "无法重命名 \"{fileName}\"",
+ "Could not create file \"{file}\"" : "无法创建文件 \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在",
+ "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在",
+ "Error deleting file \"{fileName}\"." : "删除文件 \"{fileName}\" 时出错.",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : " 在其他文件夹未找到包含 '{tag}{filter}{endtag}' 标签的结果",
"Name" : "名称",
"Size" : "大小",
"Modified" : "修改日期",
- "_%n folder_::_%n folders_" : ["%n 文件夹"],
- "_%n file_::_%n files_" : ["%n个文件"],
+ "_%n folder_::_%n folders_" : ["%n 个文件夹"],
+ "_%n file_::_%n files_" : ["%n 个文件"],
"{dirs} and {files}" : "{dirs} 和 {files}",
- "You don’t have permission to upload or create files here" : "您没有权限来上传湖州哦和创建文件",
+ "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
+ "You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件",
"_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"],
"New" : "新建",
- "\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。",
- "File name cannot be empty." : "文件名不能为空。",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!",
- "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满,文件将无法更新或同步!",
+ "\"{name}\" is an invalid file name." : "\"{name}\" 是一个无效的文件名",
+ "File name cannot be empty." : "文件名不能为空.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满, 文件将无法更新或同步!",
+ "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满, 文件将无法更新或同步!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "您的存储空间即将用完 ({usedSpacePercent}%)",
- "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["匹配 '{filter}'"],
+ "View in folder" : "在文件夹中查看",
"Path" : "路径",
"_%n byte_::_%n bytes_" : ["%n 字节"],
"Favorited" : "已收藏",
"Favorite" : "收藏",
+ "Copy local link" : "复制本地链接",
"Folder" : "文件夹",
- "New folder" : "增加文件夹",
+ "New folder" : "新建文件夹",
"Upload" : "上传",
"An error occurred while trying to update the tags" : "更新标签时出错",
- "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "针对<strong>已收藏文件</strong>的新建和修改发送有限的通知 <em>(仅流)</em>",
+ "Added to favorites" : "添加到收藏",
+ "Removed from favorites" : "取消收藏",
+ "You added {file} to your favorites" : "您已经添加 {file} 到您的收藏夹",
+ "You removed {file} from your favorites" : "您已从收藏夹中删除 {file}",
+ "File changes" : "文件发生变化",
+ "Created by {user}" : "由 {user} 创建",
+ "Changed by {user}" : "由 {user} 更改",
+ "Deleted by {user}" : "由 {user} 删除",
+ "Restored by {user}" : "由 {user} 恢复",
+ "Renamed by {user}" : "由 {user} 重命名",
+ "Moved by {user}" : "由 {user} 移动",
+ "You created {file}" : "您创建了 {file}",
+ "{user} created {file}" : "{user} 创建了 {file}",
+ "{file} was created in a public folder" : "{file} 被创建在公共文件夹",
+ "You changed {file}" : "您更改了 {file}",
+ "{user} changed {file}" : "{user} 更改了 {file}",
+ "You deleted {file}" : "您删除了{file}",
+ "{user} deleted {file}" : "{user} 删除了 {file}",
+ "You restored {file}" : "您恢复了{file}",
+ "{user} restored {file}" : "{user} 恢复了 {file}",
+ "You renamed {oldfile} to {newfile}" : "您将 {oldfile} 改名为 {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} 将 {oldfile} 改名为 {newfile}",
+ "You moved {oldfile} to {newfile}" : "您移动 {oldfile} 到 {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} 移动 {oldfile} 到 {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "文件已经添加或删除到您的 <strong>收藏夹</strong> 中",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "文件/文件夹已经 <strong>更改</strong> 或者 <strong>重命名</strong>",
+ "A new file or folder has been <strong>created</strong>" : "新的文件/文件夹已经 <strong>创建</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "新的文件/文件夹已经 <strong>删除</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "仅限 <strong>收藏文件</strong>的创建和更改通知 <em>(仅限流)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "新的文件/文件夹已经<strong>恢复</strong>",
"Upload (max. %s)" : "上传 (最大 %s)",
"File handling" : "文件处理",
"Maximum upload size" : "最大上传大小",
"max. possible: " : "最大允许: ",
"Save" : "保存",
- "With PHP-FPM it might take 5 minutes for changes to be applied." : "对于 PHP-FPM 这个值改变后可能需要 5 分钟才会生效。",
- "Missing permissions to edit from here." : "没有从这里进行编辑的权限",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "对于 PHP-FPM 这个值改变后可能需要 5 分钟才会生效.",
+ "Missing permissions to edit from here." : "没有权限编辑",
"Settings" : "设置",
"Show hidden files" : "显示隐藏文件",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">通过 WebDAV 访问您的文件</a>",
"No files in here" : "无文件",
- "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!",
- "No entries found in this folder" : "此文件夹中无项目",
+ "Upload some content or sync with your devices!" : "上传或从您的设备中同步!",
+ "No entries found in this folder" : "文件夹中无项目",
"Select all" : "全部选择",
"Upload too large" : "上传文件过大",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "正在上传的文件超过了此服务器允许上传的最大容量限制",
"No favorites" : "无收藏",
"Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示",
+ "Shared with you" : "与您分享",
+ "Shared with others" : "与他人分享",
+ "Shared by link" : "通过链接分享",
+ "Tags" : "标签",
+ "Deleted files" : "已删除的文件",
"Text file" : "文本文件",
"New text file.txt" : "创建文本文件 .txt",
"Storage not available" : "存储空间不可用",
- "Unable to set upload directory." : "无法设置上传文件夹。",
- "Invalid Token" : "无效密匙",
- "No file was uploaded. Unknown error" : "没有文件被上传。未知错误",
- "There is no error, the file uploaded with success" : "文件上传成功,没有错误发生",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件大小已超过php.ini中upload_max_filesize所规定的值",
+ "Unable to set upload directory." : "无法设置上传文件夹.",
+ "Invalid Token" : "无效密钥",
+ "No file was uploaded. Unknown error" : "没有文件被上传. 未知错误",
+ "There is no error, the file uploaded with success" : "文件上传成功, 没有任何错误",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件的大小已超过 php.ini 中 upload_max_filesize 设置的值",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "上传的文件长度超出了 HTML 表单中 MAX_FILE_SIZE 的限制",
- "The uploaded file was only partially uploaded" : "已上传文件只上传了部分(不完整)",
+ "The uploaded file was only partially uploaded" : "文件仅部分上传",
"No file was uploaded" : "没有文件被上传",
- "Missing a temporary folder" : "缺少临时目录",
+ "Missing a temporary folder" : "临时目录缺失",
"Failed to write to disk" : "写入磁盘失败",
"Not enough storage available" : "没有足够的存储空间",
- "The target folder has been moved or deleted." : "目标文件夹已经被移动或删除。",
- "Upload failed. Could not find uploaded file" : "上传失败。未发现上传的文件",
- "Upload failed. Could not get file info." : "上传失败。无法获取文件信息。",
- "Invalid directory." : "无效文件夹。",
+ "The target folder has been moved or deleted." : "目标文件夹已被移动或删除.",
+ "Upload failed. Could not find uploaded file" : "上传失败. 未发现上传的文件",
+ "Upload failed. Could not get file info." : "上传失败. 无法获取文件信息.",
+ "Invalid directory." : "无效文件夹.",
"Total file size {size1} exceeds upload limit {size2}" : "总文件大小 {size1} 超过上传限制 {size2}",
"Error uploading file \"{fileName}\": {message}" : "上传文件错误 \"{fileName}\": {message}",
- "Could not get result from server." : "不能从服务器得到结果",
- "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”",
+ "Could not get result from server." : "无法从服务器获取结果",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩余时间: {hours}:{minutes}:{seconds} ",
+ "{hours}:{minutes}h" : "{hours}:{minutes}",
+ "{minutes}:{seconds} minute{plural_s} left" : "剩余 {minutes}:{seconds} 分钟",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}",
+ "{seconds} second{plural_s} left" : "剩余 {seconds} 秒",
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "现在任何时候...",
+ "Soon..." : "很快...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中. 离开此页将会取消上传.",
+ "No entries in this folder match '{filter}'" : "文件夹中不存在 \"{filter}\"",
"Local link" : "本地链接",
"{newname} already exists" : "{newname} 已经存在",
- "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>",
- "A file or folder has been <strong>deleted</strong>" : "一个文件或文件夹已被<strong>删除</strong>",
- "A file or folder has been <strong>restored</strong>" : "一个文件或文件夹已经被 <strong>恢复</strong>",
- "You created %1$s" : "您创建了%1$s",
+ "A file or folder has been <strong>changed</strong>" : "文件/文件夹已经 <strong>修改</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "文件/文件夹已经 <strong>删除</strong>",
+ "A file or folder has been <strong>restored</strong>" : "文件/文件夹已经 <strong>恢复</strong>",
+ "You created %1$s" : "您创建了 %1$s",
"%2$s created %1$s" : "%2$s 创建了 %1$s",
"%1$s was created in a public folder" : "%1$s 被创建在公开文件夹中",
- "You changed %1$s" : "您修改了%1$s",
+ "You changed %1$s" : "您修改了 %1$s",
"%2$s changed %1$s" : "%2$s 修改了 %1$s",
"You deleted %1$s" : "您删除了 %1$s",
"%2$s deleted %1$s" : "%2$s 删除了 %1$s",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index 86fe488aeb6..f8974ac9a5a 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -1,126 +1,170 @@
{ "translations": {
+ "Storage is temporarily not available" : "存储空间暂时不可用",
"Storage invalid" : "存储空间无效",
"Unknown error" : "未知错误",
- "Files" : "文件",
"All files" : "全部文件",
+ "Recent" : "最近",
"File could not be found" : "文件未找到",
- "Home" : "家庭",
+ "Home" : "首页",
"Close" : "关闭",
"Favorites" : "收藏",
- "Could not create folder \"{dir}\"" : "不能创建文件夹 \"{dir}\"",
+ "Could not create folder \"{dir}\"" : "无法创建文件夹 \"{dir}\"",
"Upload cancelled." : "上传已取消",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "不能上传文件 {filename} ,由于它是一个目录或者为0字节",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "没有足够的可用空间,您正在上传 {size1} 的文件但是只有 {size2} 可用。",
- "Uploading..." : "上传中...",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename},因为它是一个目录或者是大小为 0 的空文件",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足,您上传的文件大小为 {size1} ,但可用空间仅剩 {size2}",
+ "Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在",
+ "Not enough free space" : "可用空间不足",
+ "Uploading..." : "正在上传...",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩余时间:{hours}:{minutes}:{seconds} ",
- "{hours}:{minutes}h" : "{hours}:{minutes}",
- "{minutes}:{seconds} minute{plural_s} left" : "剩余分钟:{minutes}:{seconds} ",
- "{minutes}:{seconds}m" : "{minutes}:{seconds}",
- "{seconds} second{plural_s} left" : "剩下{seconds} 秒",
- "{seconds}s" : "{seconds}秒",
- "Any moment now..." : "现在任何时候...",
- "Soon..." : "很快...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中。现在离开此页会导致上传动作被取消。",
- "Actions" : "动作",
+ "Actions" : "操作",
"Download" : "下载",
"Rename" : "重命名",
+ "Move" : "移动",
+ "Target folder" : "目标目录",
"Delete" : "删除",
- "Disconnect storage" : "断开储存连接",
+ "Disconnect storage" : "断开存储链接",
"Unshare" : "取消共享",
+ "Could not load info for file \"{file}\"" : "无法加载文件 \"{file}\" 的信息",
+ "Files" : "文件",
"Details" : "详细信息",
"Select" : "选择",
"Pending" : "等待",
"Unable to determine date" : "无法确定日期",
"This operation is forbidden" : "操作被禁止",
- "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
- "Could not move \"{file}\", target exists" : "不能移动 \"{file}\",目标已存在。",
- "Could not move \"{file}\"" : "不能移动 \"{file}\"",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用, 请检查日志或联系管理员",
+ "Could not move \"{file}\", target exists" : "无法移动 \"{file}\", 目标已存在",
+ "Could not move \"{file}\"" : "无法移动 \"{file}\"",
"{newName} already exists" : "{newname} 已经存在",
- "Could not rename \"{fileName}\", it does not exist any more" : "不能重命名 \"{fileName}\",此文件已经不存在",
- "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "在文件夹 \"{dir}\" 中已经存在 \"{targetName}\" 。请换一个名字试下。",
- "Could not rename \"{fileName}\"" : "不能重命名 \"{fileName}\"",
- "Could not create file \"{file}\"" : "不能创建文件 \"{file}\"",
- "Could not create file \"{file}\" because it already exists" : "不能创建文件 \"{file}\" ,因为它已经存在",
- "Could not create folder \"{dir}\" because it already exists" : "不能创建文件夹 \"{dir}\" ,因为它已经存在",
- "Error deleting file \"{fileName}\"." : "删除文件 \"{fileName}\" 时出错。",
+ "Could not rename \"{fileName}\", it does not exist any more" : "无法重命名 \"{fileName}\", 此文件已经不存在",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\". 请尝试其他的名称.",
+ "Could not rename \"{fileName}\"" : "无法重命名 \"{fileName}\"",
+ "Could not create file \"{file}\"" : "无法创建文件 \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "无法创建文件 \"{file}\", 因为其已经存在",
+ "Could not create folder \"{dir}\" because it already exists" : "无法创建文件夹 \"{dir}\", 因为其已经存在",
+ "Error deleting file \"{fileName}\"." : "删除文件 \"{fileName}\" 时出错.",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : " 在其他文件夹未找到包含 '{tag}{filter}{endtag}' 标签的结果",
"Name" : "名称",
"Size" : "大小",
"Modified" : "修改日期",
- "_%n folder_::_%n folders_" : ["%n 文件夹"],
- "_%n file_::_%n files_" : ["%n个文件"],
+ "_%n folder_::_%n folders_" : ["%n 个文件夹"],
+ "_%n file_::_%n files_" : ["%n 个文件"],
"{dirs} and {files}" : "{dirs} 和 {files}",
- "You don’t have permission to upload or create files here" : "您没有权限来上传湖州哦和创建文件",
+ "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
+ "You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件",
"_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"],
"New" : "新建",
- "\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。",
- "File name cannot be empty." : "文件名不能为空。",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!",
- "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满,文件将无法更新或同步!",
+ "\"{name}\" is an invalid file name." : "\"{name}\" 是一个无效的文件名",
+ "File name cannot be empty." : "文件名不能为空.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满, 文件将无法更新或同步!",
+ "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满, 文件将无法更新或同步!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "您的存储空间即将用完 ({usedSpacePercent}%)",
- "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["匹配 '{filter}'"],
+ "View in folder" : "在文件夹中查看",
"Path" : "路径",
"_%n byte_::_%n bytes_" : ["%n 字节"],
"Favorited" : "已收藏",
"Favorite" : "收藏",
+ "Copy local link" : "复制本地链接",
"Folder" : "文件夹",
- "New folder" : "增加文件夹",
+ "New folder" : "新建文件夹",
"Upload" : "上传",
"An error occurred while trying to update the tags" : "更新标签时出错",
- "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "针对<strong>已收藏文件</strong>的新建和修改发送有限的通知 <em>(仅流)</em>",
+ "Added to favorites" : "添加到收藏",
+ "Removed from favorites" : "取消收藏",
+ "You added {file} to your favorites" : "您已经添加 {file} 到您的收藏夹",
+ "You removed {file} from your favorites" : "您已从收藏夹中删除 {file}",
+ "File changes" : "文件发生变化",
+ "Created by {user}" : "由 {user} 创建",
+ "Changed by {user}" : "由 {user} 更改",
+ "Deleted by {user}" : "由 {user} 删除",
+ "Restored by {user}" : "由 {user} 恢复",
+ "Renamed by {user}" : "由 {user} 重命名",
+ "Moved by {user}" : "由 {user} 移动",
+ "You created {file}" : "您创建了 {file}",
+ "{user} created {file}" : "{user} 创建了 {file}",
+ "{file} was created in a public folder" : "{file} 被创建在公共文件夹",
+ "You changed {file}" : "您更改了 {file}",
+ "{user} changed {file}" : "{user} 更改了 {file}",
+ "You deleted {file}" : "您删除了{file}",
+ "{user} deleted {file}" : "{user} 删除了 {file}",
+ "You restored {file}" : "您恢复了{file}",
+ "{user} restored {file}" : "{user} 恢复了 {file}",
+ "You renamed {oldfile} to {newfile}" : "您将 {oldfile} 改名为 {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} 将 {oldfile} 改名为 {newfile}",
+ "You moved {oldfile} to {newfile}" : "您移动 {oldfile} 到 {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} 移动 {oldfile} 到 {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "文件已经添加或删除到您的 <strong>收藏夹</strong> 中",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "文件/文件夹已经 <strong>更改</strong> 或者 <strong>重命名</strong>",
+ "A new file or folder has been <strong>created</strong>" : "新的文件/文件夹已经 <strong>创建</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "新的文件/文件夹已经 <strong>删除</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "仅限 <strong>收藏文件</strong>的创建和更改通知 <em>(仅限流)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "新的文件/文件夹已经<strong>恢复</strong>",
"Upload (max. %s)" : "上传 (最大 %s)",
"File handling" : "文件处理",
"Maximum upload size" : "最大上传大小",
"max. possible: " : "最大允许: ",
"Save" : "保存",
- "With PHP-FPM it might take 5 minutes for changes to be applied." : "对于 PHP-FPM 这个值改变后可能需要 5 分钟才会生效。",
- "Missing permissions to edit from here." : "没有从这里进行编辑的权限",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "对于 PHP-FPM 这个值改变后可能需要 5 分钟才会生效.",
+ "Missing permissions to edit from here." : "没有权限编辑",
"Settings" : "设置",
"Show hidden files" : "显示隐藏文件",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">通过 WebDAV 访问您的文件</a>",
"No files in here" : "无文件",
- "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!",
- "No entries found in this folder" : "此文件夹中无项目",
+ "Upload some content or sync with your devices!" : "上传或从您的设备中同步!",
+ "No entries found in this folder" : "文件夹中无项目",
"Select all" : "全部选择",
"Upload too large" : "上传文件过大",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "正在上传的文件超过了此服务器允许上传的最大容量限制",
"No favorites" : "无收藏",
"Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示",
+ "Shared with you" : "与您分享",
+ "Shared with others" : "与他人分享",
+ "Shared by link" : "通过链接分享",
+ "Tags" : "标签",
+ "Deleted files" : "已删除的文件",
"Text file" : "文本文件",
"New text file.txt" : "创建文本文件 .txt",
"Storage not available" : "存储空间不可用",
- "Unable to set upload directory." : "无法设置上传文件夹。",
- "Invalid Token" : "无效密匙",
- "No file was uploaded. Unknown error" : "没有文件被上传。未知错误",
- "There is no error, the file uploaded with success" : "文件上传成功,没有错误发生",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件大小已超过php.ini中upload_max_filesize所规定的值",
+ "Unable to set upload directory." : "无法设置上传文件夹.",
+ "Invalid Token" : "无效密钥",
+ "No file was uploaded. Unknown error" : "没有文件被上传. 未知错误",
+ "There is no error, the file uploaded with success" : "文件上传成功, 没有任何错误",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件的大小已超过 php.ini 中 upload_max_filesize 设置的值",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "上传的文件长度超出了 HTML 表单中 MAX_FILE_SIZE 的限制",
- "The uploaded file was only partially uploaded" : "已上传文件只上传了部分(不完整)",
+ "The uploaded file was only partially uploaded" : "文件仅部分上传",
"No file was uploaded" : "没有文件被上传",
- "Missing a temporary folder" : "缺少临时目录",
+ "Missing a temporary folder" : "临时目录缺失",
"Failed to write to disk" : "写入磁盘失败",
"Not enough storage available" : "没有足够的存储空间",
- "The target folder has been moved or deleted." : "目标文件夹已经被移动或删除。",
- "Upload failed. Could not find uploaded file" : "上传失败。未发现上传的文件",
- "Upload failed. Could not get file info." : "上传失败。无法获取文件信息。",
- "Invalid directory." : "无效文件夹。",
+ "The target folder has been moved or deleted." : "目标文件夹已被移动或删除.",
+ "Upload failed. Could not find uploaded file" : "上传失败. 未发现上传的文件",
+ "Upload failed. Could not get file info." : "上传失败. 无法获取文件信息.",
+ "Invalid directory." : "无效文件夹.",
"Total file size {size1} exceeds upload limit {size2}" : "总文件大小 {size1} 超过上传限制 {size2}",
"Error uploading file \"{fileName}\": {message}" : "上传文件错误 \"{fileName}\": {message}",
- "Could not get result from server." : "不能从服务器得到结果",
- "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”",
+ "Could not get result from server." : "无法从服务器获取结果",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩余时间: {hours}:{minutes}:{seconds} ",
+ "{hours}:{minutes}h" : "{hours}:{minutes}",
+ "{minutes}:{seconds} minute{plural_s} left" : "剩余 {minutes}:{seconds} 分钟",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}",
+ "{seconds} second{plural_s} left" : "剩余 {seconds} 秒",
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "现在任何时候...",
+ "Soon..." : "很快...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中. 离开此页将会取消上传.",
+ "No entries in this folder match '{filter}'" : "文件夹中不存在 \"{filter}\"",
"Local link" : "本地链接",
"{newname} already exists" : "{newname} 已经存在",
- "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>",
- "A file or folder has been <strong>deleted</strong>" : "一个文件或文件夹已被<strong>删除</strong>",
- "A file or folder has been <strong>restored</strong>" : "一个文件或文件夹已经被 <strong>恢复</strong>",
- "You created %1$s" : "您创建了%1$s",
+ "A file or folder has been <strong>changed</strong>" : "文件/文件夹已经 <strong>修改</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "文件/文件夹已经 <strong>删除</strong>",
+ "A file or folder has been <strong>restored</strong>" : "文件/文件夹已经 <strong>恢复</strong>",
+ "You created %1$s" : "您创建了 %1$s",
"%2$s created %1$s" : "%2$s 创建了 %1$s",
"%1$s was created in a public folder" : "%1$s 被创建在公开文件夹中",
- "You changed %1$s" : "您修改了%1$s",
+ "You changed %1$s" : "您修改了 %1$s",
"%2$s changed %1$s" : "%2$s 修改了 %1$s",
"You deleted %1$s" : "您删除了 %1$s",
"%2$s deleted %1$s" : "%2$s 删除了 %1$s",
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index e5aaeef63b4..ce73c32e00c 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Storage invalid" : "無效的儲存空間",
"Unknown error" : "未知的錯誤",
- "Files" : "檔案",
"All files" : "所有檔案",
"Recent" : "近期",
"File could not be found" : "找不到檔案",
@@ -16,22 +15,14 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空間不足,你正要上傳 {size1} 可是只剩下 {size2}",
"Uploading..." : "上傳中…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩下 {hours}:{minutes}:{seconds} 小時",
- "{hours}:{minutes}h" : "{hours}:{minutes} 小時",
- "{minutes}:{seconds} minute{plural_s} left" : "剩下 {minutes}:{seconds} 分鐘",
- "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
- "{seconds} second{plural_s} left" : "剩下 {seconds} 秒",
- "{seconds}s" : "{seconds} 秒",
- "Any moment now..." : "即將完成…",
- "Soon..." : "即將完成…",
"{loadedSize} of {totalSize} ({bitrate})" : "{totalSize} 中的 {loadedSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳",
"Actions" : "動作",
"Download" : "下載",
"Rename" : "重新命名",
"Delete" : "刪除",
"Disconnect storage" : "斷開儲存空間連接",
"Unshare" : "取消分享",
+ "Files" : "檔案",
"Details" : "詳細資料",
"Select" : "選擇",
"Pending" : "等候中",
@@ -116,6 +107,15 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "檔案大小總和 {size1} 超過上傳限制 {size2}",
"Error uploading file \"{fileName}\": {message}" : "上傳檔案 \"{fileName}\" 發生錯誤:{message}",
"Could not get result from server." : "無法從伺服器取回結果",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩下 {hours}:{minutes}:{seconds} 小時",
+ "{hours}:{minutes}h" : "{hours}:{minutes} 小時",
+ "{minutes}:{seconds} minute{plural_s} left" : "剩下 {minutes}:{seconds} 分鐘",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
+ "{seconds} second{plural_s} left" : "剩下 {seconds} 秒",
+ "{seconds}s" : "{seconds} 秒",
+ "Any moment now..." : "即將完成…",
+ "Soon..." : "即將完成…",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳",
"No entries in this folder match '{filter}'" : "在此資料夾中沒有項目與 '{filter}' 相符",
"Local link" : "本地連結",
"{newname} already exists" : "{newname} 已經存在",
@@ -133,8 +133,6 @@ OC.L10N.register(
"%2$s restored %1$s" : "%2$s 還原了 %1$s",
"Changed by %2$s" : "由 %2$s 改動",
"Deleted by %2$s" : "由 %2$s 刪除",
- "Restored by %2$s" : "由 %2$s 還原",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用這個位址來<a href=\"%s\" target=\"_blank\">使用 WebDAV 存取檔案</a>",
- "Cancel upload" : "取消上傳"
+ "Restored by %2$s" : "由 %2$s 還原"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index 251927f9c1b..697b35eb111 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -1,7 +1,6 @@
{ "translations": {
"Storage invalid" : "無效的儲存空間",
"Unknown error" : "未知的錯誤",
- "Files" : "檔案",
"All files" : "所有檔案",
"Recent" : "近期",
"File could not be found" : "找不到檔案",
@@ -14,22 +13,14 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空間不足,你正要上傳 {size1} 可是只剩下 {size2}",
"Uploading..." : "上傳中…",
"..." : "...",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩下 {hours}:{minutes}:{seconds} 小時",
- "{hours}:{minutes}h" : "{hours}:{minutes} 小時",
- "{minutes}:{seconds} minute{plural_s} left" : "剩下 {minutes}:{seconds} 分鐘",
- "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
- "{seconds} second{plural_s} left" : "剩下 {seconds} 秒",
- "{seconds}s" : "{seconds} 秒",
- "Any moment now..." : "即將完成…",
- "Soon..." : "即將完成…",
"{loadedSize} of {totalSize} ({bitrate})" : "{totalSize} 中的 {loadedSize} ({bitrate})",
- "File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳",
"Actions" : "動作",
"Download" : "下載",
"Rename" : "重新命名",
"Delete" : "刪除",
"Disconnect storage" : "斷開儲存空間連接",
"Unshare" : "取消分享",
+ "Files" : "檔案",
"Details" : "詳細資料",
"Select" : "選擇",
"Pending" : "等候中",
@@ -114,6 +105,15 @@
"Total file size {size1} exceeds upload limit {size2}" : "檔案大小總和 {size1} 超過上傳限制 {size2}",
"Error uploading file \"{fileName}\": {message}" : "上傳檔案 \"{fileName}\" 發生錯誤:{message}",
"Could not get result from server." : "無法從伺服器取回結果",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩下 {hours}:{minutes}:{seconds} 小時",
+ "{hours}:{minutes}h" : "{hours}:{minutes} 小時",
+ "{minutes}:{seconds} minute{plural_s} left" : "剩下 {minutes}:{seconds} 分鐘",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
+ "{seconds} second{plural_s} left" : "剩下 {seconds} 秒",
+ "{seconds}s" : "{seconds} 秒",
+ "Any moment now..." : "即將完成…",
+ "Soon..." : "即將完成…",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳",
"No entries in this folder match '{filter}'" : "在此資料夾中沒有項目與 '{filter}' 相符",
"Local link" : "本地連結",
"{newname} already exists" : "{newname} 已經存在",
@@ -131,8 +131,6 @@
"%2$s restored %1$s" : "%2$s 還原了 %1$s",
"Changed by %2$s" : "由 %2$s 改動",
"Deleted by %2$s" : "由 %2$s 刪除",
- "Restored by %2$s" : "由 %2$s 還原",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用這個位址來<a href=\"%s\" target=\"_blank\">使用 WebDAV 存取檔案</a>",
- "Cancel upload" : "取消上傳"
+ "Restored by %2$s" : "由 %2$s 還原"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/lib/Activity/FavoriteProvider.php b/apps/files/lib/Activity/FavoriteProvider.php
index 8047eb1319e..ed00d50f221 100644
--- a/apps/files/lib/Activity/FavoriteProvider.php
+++ b/apps/files/lib/Activity/FavoriteProvider.php
@@ -142,10 +142,11 @@ class FavoriteProvider implements IProvider {
'type' => 'file',
'id' => $event->getObjectId(),
'name' => basename($event->getObjectName()),
- 'path' => $event->getObjectName(),
+ 'path' => trim($event->getObjectName(), '/'),
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $event->getObjectId()]),
];
- $event->setParsedSubject(str_replace('{file}', trim($parameter['path'], '/'), $subject))
+ $event->setParsedSubject(str_replace('{file}', $parameter['path'], $subject))
->setRichSubject($subject, ['file' => $parameter]);
}
}
diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php
index 92686ec0c36..ae303034610 100644
--- a/apps/files/lib/Activity/Provider.php
+++ b/apps/files/lib/Activity/Provider.php
@@ -201,7 +201,7 @@ class Provider implements IProvider {
foreach ($parameters as $placeholder => $parameter) {
$placeholders[] = '{' . $placeholder . '}';
if ($parameter['type'] === 'file') {
- $replacements[] = trim($parameter['path'], '/');
+ $replacements[] = $parameter['path'];
} else {
$replacements[] = $parameter['name'];
}
@@ -253,7 +253,8 @@ class Provider implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files/tests/js/mainfileinfodetailviewSpec.js b/apps/files/tests/js/mainfileinfodetailviewSpec.js
index e81adbcf7ac..faf0faa8d8f 100644
--- a/apps/files/tests/js/mainfileinfodetailviewSpec.js
+++ b/apps/files/tests/js/mainfileinfodetailviewSpec.js
@@ -70,13 +70,13 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
it('displays favorite icon', function() {
testFileInfo.set('tags', [OC.TAG_FAVORITE]);
view.setFileInfo(testFileInfo);
- expect(view.$el.find('.favorite img').attr('src'))
- .toEqual(OC.imagePath('core', 'actions/starred'));
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(true);
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(false);
testFileInfo.set('tags', []);
view.setFileInfo(testFileInfo);
- expect(view.$el.find('.favorite img').attr('src'))
- .toEqual(OC.imagePath('core', 'actions/star'));
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(false);
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true);
});
it('displays mime icon', function() {
// File
@@ -187,13 +187,13 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
testFileInfo.set('tags', [OC.TAG_FAVORITE]);
- expect(view.$el.find('.favorite img').attr('src'))
- .toEqual(OC.imagePath('core', 'actions/starred'));
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(true);
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(false);
testFileInfo.set('tags', []);
- expect(view.$el.find('.favorite img').attr('src'))
- .toEqual(OC.imagePath('core', 'actions/star'));
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(false);
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true);
});
it('unbinds change listener from model', function() {
view.setFileInfo(testFileInfo);
@@ -207,8 +207,8 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
testFileInfo.set('tags', [OC.TAG_FAVORITE]);
// no change
- expect(view.$el.find('.favorite img').attr('src'))
- .toEqual(OC.imagePath('core', 'actions/star'));
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(false);
+ expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true);
});
});
describe('events', function() {
diff --git a/apps/files_external/3rdparty/autoload.php b/apps/files_external/3rdparty/autoload.php
index 78e3de4ca0c..5875a3b996a 100644
--- a/apps/files_external/3rdparty/autoload.php
+++ b/apps/files_external/3rdparty/autoload.php
@@ -2,6 +2,6 @@
// autoload.php @generated by Composer
-require_once __DIR__ . '/composer' . '/autoload_real.php';
+require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3::getLoader();
diff --git a/apps/files_external/3rdparty/composer.json b/apps/files_external/3rdparty/composer.json
index 158478741ec..2eab8a8f7b4 100644
--- a/apps/files_external/3rdparty/composer.json
+++ b/apps/files_external/3rdparty/composer.json
@@ -8,8 +8,8 @@
"classmap-authoritative": true
},
"require": {
- "icewind/smb": "1.1.0",
- "icewind/streams": "0.4.1"
+ "icewind/smb": "2.0.0",
+ "icewind/streams": "0.5.2"
}
}
diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock
index 8f324299ff3..99ef5f94871 100644
--- a/apps/files_external/3rdparty/composer.lock
+++ b/apps/files_external/3rdparty/composer.lock
@@ -4,30 +4,28 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "8ed3150b0b3e916ad66558242b4cf2a0",
- "content-hash": "70722dcee13b3ac1c1951479b7431c97",
+ "content-hash": "0bbca3fe2d180fbc5681985bdf6b22e7",
"packages": [
{
"name": "icewind/smb",
- "version": "v1.1.0",
+ "version": "v2.0.0",
"source": {
"type": "git",
"url": "https://github.com/icewind1991/SMB.git",
- "reference": "822f924967c68228555cea84ea44765f8e85c601"
+ "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/822f924967c68228555cea84ea44765f8e85c601",
- "reference": "822f924967c68228555cea84ea44765f8e85c601",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a",
+ "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a",
"shasum": ""
},
"require": {
"icewind/streams": ">=0.2.0",
- "php": ">=5.3"
+ "php": ">=5.4"
},
"require-dev": {
- "phpunit/phpunit": "^4.8",
- "satooshi/php-coveralls": "v1.0.0"
+ "phpunit/phpunit": "^4.8"
},
"type": "library",
"autoload": {
@@ -47,20 +45,20 @@
}
],
"description": "php wrapper for smbclient and libsmbclient-php",
- "time": "2016-04-26 13:26:39"
+ "time": "2016-12-13T13:56:55+00:00"
},
{
"name": "icewind/streams",
- "version": "0.4.1",
+ "version": "0.5.2",
"source": {
"type": "git",
"url": "https://github.com/icewind1991/Streams.git",
- "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac"
+ "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/Streams/zipball/d3620e8dc410c86c2ba55579803679c4e0b289ac",
- "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac",
+ "url": "https://api.github.com/repos/icewind1991/Streams/zipball/6bfd2fdbd99319f5e010d0a684409189a562cb1e",
+ "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e",
"shasum": ""
},
"require": {
@@ -88,7 +86,7 @@
}
],
"description": "A set of generic stream wrappers",
- "time": "2016-06-02 14:37:52"
+ "time": "2016-12-02T14:21:23+00:00"
}
],
"packages-dev": [],
diff --git a/apps/files_external/3rdparty/composer/ClassLoader.php b/apps/files_external/3rdparty/composer/ClassLoader.php
index ff6ecfb822f..4626994fd4d 100644
--- a/apps/files_external/3rdparty/composer/ClassLoader.php
+++ b/apps/files_external/3rdparty/composer/ClassLoader.php
@@ -53,8 +53,9 @@ class ClassLoader
private $useIncludePath = false;
private $classMap = array();
-
private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
public function getPrefixes()
{
@@ -272,6 +273,26 @@ class ClassLoader
}
/**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
@@ -313,29 +334,34 @@ class ClassLoader
*/
public function findFile($class)
{
- // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
- if ('\\' == $class[0]) {
- $class = substr($class, 1);
- }
-
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
- if ($this->classMapAuthoritative) {
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
- if ($file === null && defined('HHVM_VERSION')) {
+ if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
- if ($file === null) {
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
// Remember that this class does not exist.
- return $this->classMap[$class] = false;
+ $this->missingClasses[$class] = true;
}
return $file;
@@ -399,6 +425,8 @@ class ClassLoader
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
+
+ return false;
}
}
diff --git a/apps/files_external/3rdparty/composer/autoload_classmap.php b/apps/files_external/3rdparty/composer/autoload_classmap.php
index 0f9a43c6cd7..97f4ce99cda 100644
--- a/apps/files_external/3rdparty/composer/autoload_classmap.php
+++ b/apps/files_external/3rdparty/composer/autoload_classmap.php
@@ -7,6 +7,7 @@ $baseDir = $vendorDir;
return array(
'Icewind\\SMB\\AbstractShare' => $vendorDir . '/icewind/smb/src/AbstractShare.php',
+ 'Icewind\\SMB\\Change' => $vendorDir . '/icewind/smb/src/Change.php',
'Icewind\\SMB\\Connection' => $vendorDir . '/icewind/smb/src/Connection.php',
'Icewind\\SMB\\ErrorCodes' => $vendorDir . '/icewind/smb/src/ErrorCodes.php',
'Icewind\\SMB\\Exception\\AccessDeniedException' => $vendorDir . '/icewind/smb/src/Exception/AccessDeniedException.php',
@@ -15,6 +16,7 @@ return array(
'Icewind\\SMB\\Exception\\ConnectException' => $vendorDir . '/icewind/smb/src/Exception/ConnectException.php',
'Icewind\\SMB\\Exception\\ConnectionException' => $vendorDir . '/icewind/smb/src/Exception/ConnectionException.php',
'Icewind\\SMB\\Exception\\ConnectionRefusedException' => $vendorDir . '/icewind/smb/src/Exception/ConnectionRefusedException.php',
+ 'Icewind\\SMB\\Exception\\DependencyException' => $vendorDir . '/icewind/smb/src/Exception/DependencyException.php',
'Icewind\\SMB\\Exception\\Exception' => $vendorDir . '/icewind/smb/src/Exception/Exception.php',
'Icewind\\SMB\\Exception\\FileInUseException' => $vendorDir . '/icewind/smb/src/Exception/FileInUseException.php',
'Icewind\\SMB\\Exception\\ForbiddenException' => $vendorDir . '/icewind/smb/src/Exception/ForbiddenException.php',
@@ -31,17 +33,27 @@ return array(
'Icewind\\SMB\\Exception\\TimedOutException' => $vendorDir . '/icewind/smb/src/Exception/TimedOutException.php',
'Icewind\\SMB\\FileInfo' => $vendorDir . '/icewind/smb/src/FileInfo.php',
'Icewind\\SMB\\IFileInfo' => $vendorDir . '/icewind/smb/src/IFileInfo.php',
+ 'Icewind\\SMB\\INotifyHandler' => $vendorDir . '/icewind/smb/src/INotifyHandler.php',
'Icewind\\SMB\\IShare' => $vendorDir . '/icewind/smb/src/IShare.php',
'Icewind\\SMB\\NativeFileInfo' => $vendorDir . '/icewind/smb/src/NativeFileInfo.php',
'Icewind\\SMB\\NativeServer' => $vendorDir . '/icewind/smb/src/NativeServer.php',
'Icewind\\SMB\\NativeShare' => $vendorDir . '/icewind/smb/src/NativeShare.php',
'Icewind\\SMB\\NativeState' => $vendorDir . '/icewind/smb/src/NativeState.php',
'Icewind\\SMB\\NativeStream' => $vendorDir . '/icewind/smb/src/NativeStream.php',
+ 'Icewind\\SMB\\NotifyHandler' => $vendorDir . '/icewind/smb/src/NotifyHandler.php',
'Icewind\\SMB\\Parser' => $vendorDir . '/icewind/smb/src/Parser.php',
'Icewind\\SMB\\RawConnection' => $vendorDir . '/icewind/smb/src/RawConnection.php',
'Icewind\\SMB\\Server' => $vendorDir . '/icewind/smb/src/Server.php',
'Icewind\\SMB\\Share' => $vendorDir . '/icewind/smb/src/Share.php',
'Icewind\\SMB\\System' => $vendorDir . '/icewind/smb/src/System.php',
+ 'Icewind\\SMB\\Test\\AbstractShare' => $vendorDir . '/icewind/smb/tests/AbstractShare.php',
+ 'Icewind\\SMB\\Test\\NativeShare' => $vendorDir . '/icewind/smb/tests/NativeShare.php',
+ 'Icewind\\SMB\\Test\\NativeStream' => $vendorDir . '/icewind/smb/tests/NativeStream.php',
+ 'Icewind\\SMB\\Test\\NotifyHandlerTest' => $vendorDir . '/icewind/smb/tests/NotifyHandlerTest.php',
+ 'Icewind\\SMB\\Test\\Parser' => $vendorDir . '/icewind/smb/tests/Parser.php',
+ 'Icewind\\SMB\\Test\\Server' => $vendorDir . '/icewind/smb/tests/Server.php',
+ 'Icewind\\SMB\\Test\\Share' => $vendorDir . '/icewind/smb/tests/Share.php',
+ 'Icewind\\SMB\\Test\\TestCase' => $vendorDir . '/icewind/smb/tests/TestCase.php',
'Icewind\\SMB\\TimeZoneProvider' => $vendorDir . '/icewind/smb/src/TimeZoneProvider.php',
'Icewind\\Streams\\CallbackWrapper' => $vendorDir . '/icewind/streams/src/CallbackWrapper.php',
'Icewind\\Streams\\Directory' => $vendorDir . '/icewind/streams/src/Directory.php',
@@ -51,8 +63,23 @@ return array(
'Icewind\\Streams\\IteratorDirectory' => $vendorDir . '/icewind/streams/src/IteratorDirectory.php',
'Icewind\\Streams\\NullWrapper' => $vendorDir . '/icewind/streams/src/NullWrapper.php',
'Icewind\\Streams\\Path' => $vendorDir . '/icewind/streams/src/Path.php',
+ 'Icewind\\Streams\\PathWrapper' => $vendorDir . '/icewind/streams/src/PathWrapper.php',
'Icewind\\Streams\\RetryWrapper' => $vendorDir . '/icewind/streams/src/RetryWrapper.php',
'Icewind\\Streams\\SeekableWrapper' => $vendorDir . '/icewind/streams/src/SeekableWrapper.php',
+ 'Icewind\\Streams\\Tests\\CallbackWrapper' => $vendorDir . '/icewind/streams/tests/CallbackWrapper.php',
+ 'Icewind\\Streams\\Tests\\DirectoryFilter' => $vendorDir . '/icewind/streams/tests/DirectoryFilter.php',
+ 'Icewind\\Streams\\Tests\\DirectoryWrapper' => $vendorDir . '/icewind/streams/tests/DirectoryWrapper.php',
+ 'Icewind\\Streams\\Tests\\DirectoryWrapperDummy' => $vendorDir . '/icewind/streams/tests/DirectoryWrapper.php',
+ 'Icewind\\Streams\\Tests\\DirectoryWrapperNull' => $vendorDir . '/icewind/streams/tests/DirectoryWrapper.php',
+ 'Icewind\\Streams\\Tests\\FailWrapper' => $vendorDir . '/icewind/streams/tests/RetryWrapper.php',
+ 'Icewind\\Streams\\Tests\\IteratorDirectory' => $vendorDir . '/icewind/streams/tests/IteratorDirectory.php',
+ 'Icewind\\Streams\\Tests\\NullWrapper' => $vendorDir . '/icewind/streams/tests/NullWrapper.php',
+ 'Icewind\\Streams\\Tests\\PartialWrapper' => $vendorDir . '/icewind/streams/tests/RetryWrapper.php',
+ 'Icewind\\Streams\\Tests\\PathWrapper' => $vendorDir . '/icewind/streams/tests/PathWrapper.php',
+ 'Icewind\\Streams\\Tests\\RetryWrapper' => $vendorDir . '/icewind/streams/tests/RetryWrapper.php',
+ 'Icewind\\Streams\\Tests\\SeekableWrapper' => $vendorDir . '/icewind/streams/tests/SeekableWrapper.php',
+ 'Icewind\\Streams\\Tests\\UrlCallBack' => $vendorDir . '/icewind/streams/tests/UrlCallBack.php',
+ 'Icewind\\Streams\\Tests\\Wrapper' => $vendorDir . '/icewind/streams/tests/Wrapper.php',
'Icewind\\Streams\\Url' => $vendorDir . '/icewind/streams/src/Url.php',
'Icewind\\Streams\\UrlCallback' => $vendorDir . '/icewind/streams/src/UrlCallBack.php',
'Icewind\\Streams\\Wrapper' => $vendorDir . '/icewind/streams/src/Wrapper.php',
diff --git a/apps/files_external/3rdparty/composer/autoload_real.php b/apps/files_external/3rdparty/composer/autoload_real.php
index 6f27fffb9da..4ac68127fea 100644
--- a/apps/files_external/3rdparty/composer/autoload_real.php
+++ b/apps/files_external/3rdparty/composer/autoload_real.php
@@ -23,9 +23,16 @@ class ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3', 'loadClassLoader'));
- $classMap = require __DIR__ . '/autoload_classmap.php';
- if ($classMap) {
- $loader->addClassMap($classMap);
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3::getInitializer($loader));
+ } else {
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
}
$loader->setClassMapAuthoritative(true);
diff --git a/apps/files_external/3rdparty/composer/autoload_static.php b/apps/files_external/3rdparty/composer/autoload_static.php
new file mode 100644
index 00000000000..c1a3a0492d0
--- /dev/null
+++ b/apps/files_external/3rdparty/composer/autoload_static.php
@@ -0,0 +1,127 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3
+{
+ public static $prefixLengthsPsr4 = array (
+ 'I' =>
+ array (
+ 'Icewind\\Streams\\Tests\\' => 22,
+ 'Icewind\\Streams\\' => 16,
+ 'Icewind\\SMB\\Test\\' => 17,
+ 'Icewind\\SMB\\' => 12,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'Icewind\\Streams\\Tests\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/icewind/streams/tests',
+ ),
+ 'Icewind\\Streams\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/icewind/streams/src',
+ ),
+ 'Icewind\\SMB\\Test\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/icewind/smb/tests',
+ ),
+ 'Icewind\\SMB\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/icewind/smb/src',
+ ),
+ );
+
+ public static $classMap = array (
+ 'Icewind\\SMB\\AbstractShare' => __DIR__ . '/..' . '/icewind/smb/src/AbstractShare.php',
+ 'Icewind\\SMB\\Change' => __DIR__ . '/..' . '/icewind/smb/src/Change.php',
+ 'Icewind\\SMB\\Connection' => __DIR__ . '/..' . '/icewind/smb/src/Connection.php',
+ 'Icewind\\SMB\\ErrorCodes' => __DIR__ . '/..' . '/icewind/smb/src/ErrorCodes.php',
+ 'Icewind\\SMB\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/AccessDeniedException.php',
+ 'Icewind\\SMB\\Exception\\AlreadyExistsException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/AlreadyExistsException.php',
+ 'Icewind\\SMB\\Exception\\AuthenticationException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/AuthenticationException.php',
+ 'Icewind\\SMB\\Exception\\ConnectException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ConnectException.php',
+ 'Icewind\\SMB\\Exception\\ConnectionException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ConnectionException.php',
+ 'Icewind\\SMB\\Exception\\ConnectionRefusedException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ConnectionRefusedException.php',
+ 'Icewind\\SMB\\Exception\\DependencyException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/DependencyException.php',
+ 'Icewind\\SMB\\Exception\\Exception' => __DIR__ . '/..' . '/icewind/smb/src/Exception/Exception.php',
+ 'Icewind\\SMB\\Exception\\FileInUseException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/FileInUseException.php',
+ 'Icewind\\SMB\\Exception\\ForbiddenException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/ForbiddenException.php',
+ 'Icewind\\SMB\\Exception\\HostDownException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/HostDownException.php',
+ 'Icewind\\SMB\\Exception\\InvalidHostException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidHostException.php',
+ 'Icewind\\SMB\\Exception\\InvalidPathException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidPathException.php',
+ 'Icewind\\SMB\\Exception\\InvalidRequestException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidRequestException.php',
+ 'Icewind\\SMB\\Exception\\InvalidResourceException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidResourceException.php',
+ 'Icewind\\SMB\\Exception\\InvalidTypeException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/InvalidTypeException.php',
+ 'Icewind\\SMB\\Exception\\NoLoginServerException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NoLoginServerException.php',
+ 'Icewind\\SMB\\Exception\\NoRouteToHostException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NoRouteToHostException.php',
+ 'Icewind\\SMB\\Exception\\NotEmptyException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NotEmptyException.php',
+ 'Icewind\\SMB\\Exception\\NotFoundException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/NotFoundException.php',
+ 'Icewind\\SMB\\Exception\\TimedOutException' => __DIR__ . '/..' . '/icewind/smb/src/Exception/TimedOutException.php',
+ 'Icewind\\SMB\\FileInfo' => __DIR__ . '/..' . '/icewind/smb/src/FileInfo.php',
+ 'Icewind\\SMB\\IFileInfo' => __DIR__ . '/..' . '/icewind/smb/src/IFileInfo.php',
+ 'Icewind\\SMB\\INotifyHandler' => __DIR__ . '/..' . '/icewind/smb/src/INotifyHandler.php',
+ 'Icewind\\SMB\\IShare' => __DIR__ . '/..' . '/icewind/smb/src/IShare.php',
+ 'Icewind\\SMB\\NativeFileInfo' => __DIR__ . '/..' . '/icewind/smb/src/NativeFileInfo.php',
+ 'Icewind\\SMB\\NativeServer' => __DIR__ . '/..' . '/icewind/smb/src/NativeServer.php',
+ 'Icewind\\SMB\\NativeShare' => __DIR__ . '/..' . '/icewind/smb/src/NativeShare.php',
+ 'Icewind\\SMB\\NativeState' => __DIR__ . '/..' . '/icewind/smb/src/NativeState.php',
+ 'Icewind\\SMB\\NativeStream' => __DIR__ . '/..' . '/icewind/smb/src/NativeStream.php',
+ 'Icewind\\SMB\\NotifyHandler' => __DIR__ . '/..' . '/icewind/smb/src/NotifyHandler.php',
+ 'Icewind\\SMB\\Parser' => __DIR__ . '/..' . '/icewind/smb/src/Parser.php',
+ 'Icewind\\SMB\\RawConnection' => __DIR__ . '/..' . '/icewind/smb/src/RawConnection.php',
+ 'Icewind\\SMB\\Server' => __DIR__ . '/..' . '/icewind/smb/src/Server.php',
+ 'Icewind\\SMB\\Share' => __DIR__ . '/..' . '/icewind/smb/src/Share.php',
+ 'Icewind\\SMB\\System' => __DIR__ . '/..' . '/icewind/smb/src/System.php',
+ 'Icewind\\SMB\\Test\\AbstractShare' => __DIR__ . '/..' . '/icewind/smb/tests/AbstractShare.php',
+ 'Icewind\\SMB\\Test\\NativeShare' => __DIR__ . '/..' . '/icewind/smb/tests/NativeShare.php',
+ 'Icewind\\SMB\\Test\\NativeStream' => __DIR__ . '/..' . '/icewind/smb/tests/NativeStream.php',
+ 'Icewind\\SMB\\Test\\NotifyHandlerTest' => __DIR__ . '/..' . '/icewind/smb/tests/NotifyHandlerTest.php',
+ 'Icewind\\SMB\\Test\\Parser' => __DIR__ . '/..' . '/icewind/smb/tests/Parser.php',
+ 'Icewind\\SMB\\Test\\Server' => __DIR__ . '/..' . '/icewind/smb/tests/Server.php',
+ 'Icewind\\SMB\\Test\\Share' => __DIR__ . '/..' . '/icewind/smb/tests/Share.php',
+ 'Icewind\\SMB\\Test\\TestCase' => __DIR__ . '/..' . '/icewind/smb/tests/TestCase.php',
+ 'Icewind\\SMB\\TimeZoneProvider' => __DIR__ . '/..' . '/icewind/smb/src/TimeZoneProvider.php',
+ 'Icewind\\Streams\\CallbackWrapper' => __DIR__ . '/..' . '/icewind/streams/src/CallbackWrapper.php',
+ 'Icewind\\Streams\\Directory' => __DIR__ . '/..' . '/icewind/streams/src/Directory.php',
+ 'Icewind\\Streams\\DirectoryFilter' => __DIR__ . '/..' . '/icewind/streams/src/DirectoryFilter.php',
+ 'Icewind\\Streams\\DirectoryWrapper' => __DIR__ . '/..' . '/icewind/streams/src/DirectoryWrapper.php',
+ 'Icewind\\Streams\\File' => __DIR__ . '/..' . '/icewind/streams/src/File.php',
+ 'Icewind\\Streams\\IteratorDirectory' => __DIR__ . '/..' . '/icewind/streams/src/IteratorDirectory.php',
+ 'Icewind\\Streams\\NullWrapper' => __DIR__ . '/..' . '/icewind/streams/src/NullWrapper.php',
+ 'Icewind\\Streams\\Path' => __DIR__ . '/..' . '/icewind/streams/src/Path.php',
+ 'Icewind\\Streams\\PathWrapper' => __DIR__ . '/..' . '/icewind/streams/src/PathWrapper.php',
+ 'Icewind\\Streams\\RetryWrapper' => __DIR__ . '/..' . '/icewind/streams/src/RetryWrapper.php',
+ 'Icewind\\Streams\\SeekableWrapper' => __DIR__ . '/..' . '/icewind/streams/src/SeekableWrapper.php',
+ 'Icewind\\Streams\\Tests\\CallbackWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/CallbackWrapper.php',
+ 'Icewind\\Streams\\Tests\\DirectoryFilter' => __DIR__ . '/..' . '/icewind/streams/tests/DirectoryFilter.php',
+ 'Icewind\\Streams\\Tests\\DirectoryWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/DirectoryWrapper.php',
+ 'Icewind\\Streams\\Tests\\DirectoryWrapperDummy' => __DIR__ . '/..' . '/icewind/streams/tests/DirectoryWrapper.php',
+ 'Icewind\\Streams\\Tests\\DirectoryWrapperNull' => __DIR__ . '/..' . '/icewind/streams/tests/DirectoryWrapper.php',
+ 'Icewind\\Streams\\Tests\\FailWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/RetryWrapper.php',
+ 'Icewind\\Streams\\Tests\\IteratorDirectory' => __DIR__ . '/..' . '/icewind/streams/tests/IteratorDirectory.php',
+ 'Icewind\\Streams\\Tests\\NullWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/NullWrapper.php',
+ 'Icewind\\Streams\\Tests\\PartialWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/RetryWrapper.php',
+ 'Icewind\\Streams\\Tests\\PathWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/PathWrapper.php',
+ 'Icewind\\Streams\\Tests\\RetryWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/RetryWrapper.php',
+ 'Icewind\\Streams\\Tests\\SeekableWrapper' => __DIR__ . '/..' . '/icewind/streams/tests/SeekableWrapper.php',
+ 'Icewind\\Streams\\Tests\\UrlCallBack' => __DIR__ . '/..' . '/icewind/streams/tests/UrlCallBack.php',
+ 'Icewind\\Streams\\Tests\\Wrapper' => __DIR__ . '/..' . '/icewind/streams/tests/Wrapper.php',
+ 'Icewind\\Streams\\Url' => __DIR__ . '/..' . '/icewind/streams/src/Url.php',
+ 'Icewind\\Streams\\UrlCallback' => __DIR__ . '/..' . '/icewind/streams/src/UrlCallBack.php',
+ 'Icewind\\Streams\\Wrapper' => __DIR__ . '/..' . '/icewind/streams/src/Wrapper.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json
index 127d2bd3a19..8e065858d02 100644
--- a/apps/files_external/3rdparty/composer/installed.json
+++ b/apps/files_external/3rdparty/composer/installed.json
@@ -1,28 +1,27 @@
[
{
"name": "icewind/smb",
- "version": "v1.1.0",
- "version_normalized": "1.1.0.0",
+ "version": "v2.0.0",
+ "version_normalized": "2.0.0.0",
"source": {
"type": "git",
"url": "https://github.com/icewind1991/SMB.git",
- "reference": "822f924967c68228555cea84ea44765f8e85c601"
+ "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/822f924967c68228555cea84ea44765f8e85c601",
- "reference": "822f924967c68228555cea84ea44765f8e85c601",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a",
+ "reference": "95a5ecbaf92617f9800ad7d6070ef31d8ff28c3a",
"shasum": ""
},
"require": {
"icewind/streams": ">=0.2.0",
- "php": ">=5.3"
+ "php": ">=5.4"
},
"require-dev": {
- "phpunit/phpunit": "^4.8",
- "satooshi/php-coveralls": "v1.0.0"
+ "phpunit/phpunit": "^4.8"
},
- "time": "2016-04-26 13:26:39",
+ "time": "2016-12-13T13:56:55+00:00",
"type": "library",
"installation-source": "source",
"autoload": {
@@ -45,17 +44,17 @@
},
{
"name": "icewind/streams",
- "version": "0.4.1",
- "version_normalized": "0.4.1.0",
+ "version": "0.5.2",
+ "version_normalized": "0.5.2.0",
"source": {
"type": "git",
"url": "https://github.com/icewind1991/Streams.git",
- "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac"
+ "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/Streams/zipball/d3620e8dc410c86c2ba55579803679c4e0b289ac",
- "reference": "d3620e8dc410c86c2ba55579803679c4e0b289ac",
+ "url": "https://api.github.com/repos/icewind1991/Streams/zipball/6bfd2fdbd99319f5e010d0a684409189a562cb1e",
+ "reference": "6bfd2fdbd99319f5e010d0a684409189a562cb1e",
"shasum": ""
},
"require": {
@@ -65,7 +64,7 @@
"phpunit/phpunit": "^4.8",
"satooshi/php-coveralls": "v1.0.0"
},
- "time": "2016-06-02 14:37:52",
+ "time": "2016-12-02T14:21:23+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
diff --git a/apps/files_external/3rdparty/icewind/smb/README.md b/apps/files_external/3rdparty/icewind/smb/README.md
index 32f3c650f87..c8f31193c83 100644
--- a/apps/files_external/3rdparty/icewind/smb/README.md
+++ b/apps/files_external/3rdparty/icewind/smb/README.md
@@ -1,7 +1,7 @@
SMB
===
-[![Coverage Status](https://img.shields.io/coveralls/icewind1991/SMB.svg)](https://coveralls.io/r/icewind1991/SMB?branch=master)
+[![Code Coverage](https://scrutinizer-ci.com/g/icewind1991/SMB/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/icewind1991/SMB/?branch=master)
[![Build Status](https://travis-ci.org/icewind1991/SMB.svg?branch=master)](https://travis-ci.org/icewind1991/SMB)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/icewind1991/SMB/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/icewind1991/SMB/?branch=master)
@@ -134,3 +134,19 @@ if (Server::NativeAvailable()) {
$share = $server->getShare('test');
$share->put($fileToUpload, 'example.txt');
```
+
+### Using notify
+
+```php
+<?php
+use Icewind\SMB\Server;
+
+require('vendor/autoload.php');
+
+$server = new Server('localhost', 'test', 'test');
+$share = $server->getShare('test');
+
+$share->notify('')->listen(function (\Icewind\SMB\Change $change) {
+ echo $change->getCode() . ': ' . $change->getPath() . "\n";
+});
+```
diff --git a/apps/files_external/3rdparty/icewind/smb/composer.json b/apps/files_external/3rdparty/icewind/smb/composer.json
index 4ac8b27e725..8374f564bf1 100644
--- a/apps/files_external/3rdparty/icewind/smb/composer.json
+++ b/apps/files_external/3rdparty/icewind/smb/composer.json
@@ -9,11 +9,10 @@
}
],
"require" : {
- "php": ">=5.3",
+ "php": ">=5.4",
"icewind/streams": ">=0.2.0"
},
"require-dev": {
- "satooshi/php-coveralls" : "v1.0.0",
"phpunit/phpunit": "^4.8"
},
"autoload" : {
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Change.php b/apps/files_external/3rdparty/icewind/smb/src/Change.php
new file mode 100644
index 00000000000..9dfd57b3973
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/smb/src/Change.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ * This file is licensed under the Licensed under the MIT license:
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+namespace Icewind\SMB;
+
+class Change {
+ private $code;
+
+ private $path;
+
+ /**
+ * Change constructor.
+ *
+ * @param $code
+ * @param $path
+ */
+ public function __construct($code, $path) {
+ $this->code = $code;
+ $this->path = $path;
+ }
+
+ /**
+ * @return integer
+ */
+ public function getCode() {
+ return $this->code;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPath() {
+ return $this->path;
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Connection.php b/apps/files_external/3rdparty/icewind/smb/src/Connection.php
index d24cdc1f6d0..c1ebb861711 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Connection.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Connection.php
@@ -17,6 +17,14 @@ class Connection extends RawConnection {
const DELIMITER = 'smb:';
const DELIMITER_LENGTH = 4;
+ /** @var Parser */
+ private $parser;
+
+ public function __construct($command, Parser $parser, $env = array()) {
+ parent::__construct($command, $env);
+ $this->parser = $parser;
+ }
+
/**
* send input to smbclient
*
@@ -30,7 +38,7 @@ class Connection extends RawConnection {
* get all unprocessed output from smbclient until the next prompt
*
* @param callable $callback (optional) callback to call for every line read
- * @return string
+ * @return string[]
* @throws AuthenticationException
* @throws ConnectException
* @throws ConnectionException
@@ -42,7 +50,7 @@ class Connection extends RawConnection {
throw new ConnectionException('Connection not valid');
}
$promptLine = $this->readLine(); //first line is prompt
- $this->checkConnectionError($promptLine);
+ $this->parser->checkConnectionError($promptLine);
$output = array();
$line = $this->readLine();
@@ -54,6 +62,7 @@ class Connection extends RawConnection {
$result = $callback($line);
if ($result === false) { // allow the callback to close the connection for infinite running commands
$this->close(true);
+ break;
}
} else {
$output[] .= $line;
@@ -90,33 +99,6 @@ class Connection extends RawConnection {
}
}
- /**
- * check if the first line holds a connection failure
- *
- * @param $line
- * @throws AuthenticationException
- * @throws InvalidHostException
- * @throws NoLoginServerException
- */
- private function checkConnectionError($line) {
- $line = rtrim($line, ')');
- if (substr($line, -23) === ErrorCodes::LogonFailure) {
- throw new AuthenticationException('Invalid login');
- }
- if (substr($line, -26) === ErrorCodes::BadHostName) {
- throw new InvalidHostException('Invalid hostname');
- }
- if (substr($line, -22) === ErrorCodes::Unsuccessful) {
- throw new InvalidHostException('Connection unsuccessful');
- }
- if (substr($line, -28) === ErrorCodes::ConnectionRefused) {
- throw new InvalidHostException('Connection refused');
- }
- if (substr($line, -26) === ErrorCodes::NoLogonServers) {
- throw new NoLoginServerException('No login server');
- }
- }
-
public function close($terminate = true) {
if (is_resource($this->getInputStream())) {
$this->write('close' . PHP_EOL);
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php
new file mode 100644
index 00000000000..39735578798
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright (c) 2016 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Licensed under the MIT license:
+ * http://opensource.org/licenses/MIT
+ */
+
+namespace Icewind\SMB\Exception;
+
+class DependencyException extends Exception {
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php
index 3307ad57a24..7ac528198a9 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php
@@ -7,4 +7,32 @@
namespace Icewind\SMB\Exception;
-class Exception extends \Exception {}
+class Exception extends \Exception {
+ static public function unknown($path, $error) {
+ $message = 'Unknown error (' . $error . ')';
+ if ($path) {
+ $message .= ' for ' . $path;
+ }
+
+ return new Exception($message, $error);
+ }
+
+ /**
+ * @param array $exceptionMap
+ * @param mixed $error
+ * @param string $path
+ * @return Exception
+ */
+ static public function fromMap(array $exceptionMap, $error, $path) {
+ if (isset($exceptionMap[$error])) {
+ $exceptionClass = $exceptionMap[$error];
+ if (is_numeric($error)) {
+ return new $exceptionClass($path, $error);
+ } else {
+ return new $exceptionClass($path);
+ }
+ } else {
+ return Exception::unknown($path, $error);
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php b/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php
new file mode 100644
index 00000000000..1ee59b26ddd
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ * This file is licensed under the Licensed under the MIT license:
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+namespace Icewind\SMB;
+
+
+interface INotifyHandler {
+ // https://msdn.microsoft.com/en-us/library/dn392331.aspx
+ const NOTIFY_ADDED = 1;
+ const NOTIFY_REMOVED = 2;
+ const NOTIFY_MODIFIED = 3;
+ const NOTIFY_RENAMED_OLD = 4;
+ const NOTIFY_RENAMED_NEW = 5;
+ const NOTIFY_ADDED_STREAM = 6;
+ const NOTIFY_REMOVED_STREAM = 7;
+ const NOTIFY_MODIFIED_STREAM = 8;
+ const NOTIFY_REMOVED_BY_DELETE = 9;
+
+ /**
+ * Get all changes detected since the start of the notify process or the last call to getChanges
+ *
+ * @return Change[]
+ */
+ public function getChanges();
+
+ /**
+ * Listen actively to all incoming changes
+ *
+ * Note that this is a blocking process and will cause the process to block forever if not explicitly terminated
+ *
+ * @param callable $callback
+ */
+ public function listen($callback);
+
+ /**
+ * Stop listening for changes
+ *
+ * Note that any pending changes will be discarded
+ */
+ public function stop();
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/IShare.php b/apps/files_external/3rdparty/icewind/smb/src/IShare.php
index 40423151332..8f6d5058b81 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/IShare.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/IShare.php
@@ -8,17 +8,6 @@
namespace Icewind\SMB;
interface IShare {
- // https://msdn.microsoft.com/en-us/library/dn392331.aspx
- const NOTIFY_ADDED = 1;
- const NOTIFY_REMOVED = 2;
- const NOTIFY_MODIFIED = 3;
- const NOTIFY_RENAMED_OLD = 4;
- const NOTIFY_RENAMED_NEW = 5;
- const NOTIFY_ADDED_STREAM = 6;
- const NOTIFY_REMOVED_STREAM = 7;
- const NOTIFY_MODIFIED_STREAM = 8;
- const NOTIFY_REMOVED_BY_DELETE = 9;
-
/**
* Get the name of the share
*
@@ -145,8 +134,7 @@ interface IShare {
/**
* @param string $path
- * @param callable $callback callable which will be called for each received change
- * @return mixed
+ * @return INotifyHandler
*/
- public function notify($path, callable $callback);
+ public function notify($path);
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/NativeFileInfo.php b/apps/files_external/3rdparty/icewind/smb/src/NativeFileInfo.php
index 6ef5cf0c5b9..6cb070196a6 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/NativeFileInfo.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/NativeFileInfo.php
@@ -26,7 +26,7 @@ class NativeFileInfo implements IFileInfo {
protected $share;
/**
- * @var array | null
+ * @var array|null
*/
protected $statCache;
@@ -66,7 +66,7 @@ class NativeFileInfo implements IFileInfo {
* @return array
*/
protected function stat() {
- if (!$this->statCache) {
+ if (is_null($this->statCache)) {
$this->statCache = $this->share->getStat($this->getPath());
}
return $this->statCache;
diff --git a/apps/files_external/3rdparty/icewind/smb/src/NativeShare.php b/apps/files_external/3rdparty/icewind/smb/src/NativeShare.php
index 51e16d1841f..7efa34df370 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/NativeShare.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/NativeShare.php
@@ -60,6 +60,7 @@ class NativeShare extends AbstractShare {
}
private function buildUrl($path) {
+ $this->connect();
$this->verifyPath($path);
$url = sprintf('smb://%s/%s', $this->server->getHost(), $this->name);
if ($path) {
@@ -80,7 +81,6 @@ class NativeShare extends AbstractShare {
* @throws \Icewind\SMB\Exception\InvalidTypeException
*/
public function dir($path) {
- $this->connect();
$files = array();
$dh = $this->state->opendir($this->buildUrl($path));
@@ -97,14 +97,13 @@ class NativeShare extends AbstractShare {
/**
* @param string $path
- * @return \Icewind\SMB\IFileInfo[]
+ * @return \Icewind\SMB\IFileInfo
*/
public function stat($path) {
return new NativeFileInfo($this, $path, basename($path), $this->getStat($path));
}
public function getStat($path) {
- $this->connect();
return $this->state->stat($this->buildUrl($path));
}
@@ -118,7 +117,6 @@ class NativeShare extends AbstractShare {
* @throws \Icewind\SMB\Exception\AlreadyExistsException
*/
public function mkdir($path) {
- $this->connect();
return $this->state->mkdir($this->buildUrl($path));
}
@@ -132,7 +130,6 @@ class NativeShare extends AbstractShare {
* @throws \Icewind\SMB\Exception\InvalidTypeException
*/
public function rmdir($path) {
- $this->connect();
return $this->state->rmdir($this->buildUrl($path));
}
@@ -146,7 +143,6 @@ class NativeShare extends AbstractShare {
* @throws \Icewind\SMB\Exception\InvalidTypeException
*/
public function del($path) {
- $this->connect();
return $this->state->unlink($this->buildUrl($path));
}
@@ -161,7 +157,6 @@ class NativeShare extends AbstractShare {
* @throws \Icewind\SMB\Exception\AlreadyExistsException
*/
public function rename($from, $to) {
- $this->connect();
return $this->state->rename($this->buildUrl($from), $this->buildUrl($to));
}
@@ -176,7 +171,6 @@ class NativeShare extends AbstractShare {
* @throws \Icewind\SMB\Exception\InvalidTypeException
*/
public function put($source, $target) {
- $this->connect();
$sourceHandle = fopen($source, 'rb');
$targetHandle = $this->state->create($this->buildUrl($target));
@@ -214,7 +208,6 @@ class NativeShare extends AbstractShare {
throw new InvalidResourceException('Failed opening local file "' . $target . '" for writing: ' . $reason);
}
- $this->connect();
$sourceHandle = $this->state->open($this->buildUrl($source), 'r');
if (!$sourceHandle) {
fclose($targetHandle);
@@ -238,7 +231,6 @@ class NativeShare extends AbstractShare {
* @throws \Icewind\SMB\Exception\InvalidTypeException
*/
public function read($source) {
- $this->connect();
$url = $this->buildUrl($source);
$handle = $this->state->open($url, 'r');
return NativeStream::wrap($this->state, $handle, 'r', $url);
@@ -254,7 +246,6 @@ class NativeShare extends AbstractShare {
* @throws \Icewind\SMB\Exception\InvalidTypeException
*/
public function write($source) {
- $this->connect();
$url = $this->buildUrl($source);
$handle = $this->state->create($url);
return NativeStream::wrap($this->state, $handle, 'w', $url);
@@ -268,10 +259,7 @@ class NativeShare extends AbstractShare {
* @return string the attribute value
*/
public function getAttribute($path, $attribute) {
- $this->connect();
-
- $result = $this->state->getxattr($this->buildUrl($path), $attribute);
- return $result;
+ return $this->state->getxattr($this->buildUrl($path), $attribute);
}
/**
@@ -283,7 +271,6 @@ class NativeShare extends AbstractShare {
* @return string the attribute value
*/
public function setAttribute($path, $attribute, $value) {
- $this->connect();
if ($attribute === 'system.dos_attr.mode' and is_int($value)) {
$value = '0x' . dechex($value);
@@ -303,14 +290,13 @@ class NativeShare extends AbstractShare {
/**
* @param string $path
- * @param callable $callback callable which will be called for each received change
- * @return mixed
+ * @return INotifyHandler
*/
- public function notify($path, callable $callback) {
+ public function notify($path) {
// php-smbclient does support notify (https://github.com/eduardok/libsmbclient-php/issues/29)
// so we use the smbclient based backend for this
$share = new Share($this->server, $this->getName());
- $share->notify($path, $callback);
+ return $share->notify($path);
}
public function __destruct() {
diff --git a/apps/files_external/3rdparty/icewind/smb/src/NativeState.php b/apps/files_external/3rdparty/icewind/smb/src/NativeState.php
index e3e344d9e01..7ddce831853 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/NativeState.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/NativeState.php
@@ -7,16 +7,7 @@
namespace Icewind\SMB;
-use Icewind\SMB\Exception\AlreadyExistsException;
-use Icewind\SMB\Exception\ConnectionRefusedException;
use Icewind\SMB\Exception\Exception;
-use Icewind\SMB\Exception\ForbiddenException;
-use Icewind\SMB\Exception\HostDownException;
-use Icewind\SMB\Exception\InvalidTypeException;
-use Icewind\SMB\Exception\NoRouteToHostException;
-use Icewind\SMB\Exception\NotEmptyException;
-use Icewind\SMB\Exception\NotFoundException;
-use Icewind\SMB\Exception\TimedOutException;
/**
* Low level wrapper for libsmbclient-php for error handling
@@ -31,44 +22,39 @@ class NativeState {
protected $connected = false;
+ // todo replace with static once <5.6 support is dropped
+ // see error.h
+ private static $exceptionMap = [
+ 1 => '\Icewind\SMB\Exception\ForbiddenException',
+ 2 => '\Icewind\SMB\Exception\NotFoundException',
+ 13 => '\Icewind\SMB\Exception\ForbiddenException',
+ 17 => '\Icewind\SMB\Exception\AlreadyExistsException',
+ 20 => '\Icewind\SMB\Exception\InvalidTypeException',
+ 21 => '\Icewind\SMB\Exception\InvalidTypeException',
+ 39 => '\Icewind\SMB\Exception\NotEmptyException',
+ 110 => '\Icewind\SMB\Exception\TimedOutException',
+ 111 => '\Icewind\SMB\Exception\ConnectionRefusedException',
+ 112 => '\Icewind\SMB\Exception\HostDownException',
+ 113 => '\Icewind\SMB\Exception\NoRouteToHostException'
+ ];
+
protected function handleError($path) {
$error = smbclient_state_errno($this->state);
- switch ($error) {
- // see error.h
- case 0;
- return;
- case 1:
- case 13:
- throw new ForbiddenException($path, $error);
- case 2:
- throw new NotFoundException($path, $error);
- case 17:
- throw new AlreadyExistsException($path, $error);
- case 20:
- throw new InvalidTypeException($path, $error);
- case 21:
- throw new InvalidTypeException($path, $error);
- case 39:
- throw new NotEmptyException($path, $error);
- case 110:
- throw new TimedOutException($path, $error);
- case 111:
- throw new ConnectionRefusedException($path, $error);
- case 112:
- throw new HostDownException($path, $error);
- case 113:
- throw new NoRouteToHostException($path, $error);
- default:
- $message = 'Unknown error (' . $error . ')';
- if ($path) {
- $message .= ' for ' . $path;
- }
- throw new Exception($message, $error);
+ if ($error === 0) {
+ return;
}
+ throw Exception::fromMap(self::$exceptionMap, $error, $path);
}
- protected function testResult($result, $path) {
+ protected function testResult($result, $uri) {
if ($result === false or $result === null) {
+ // smb://host/share/path
+ if (is_string($uri)) {
+ list(, , , , $path) = explode('/', $uri, 5);
+ $path = '/' . $path;
+ } else {
+ $path = null;
+ }
$this->handleError($path);
}
}
@@ -246,7 +232,7 @@ class NativeState {
* @param resource $file
* @param int $offset
* @param int $whence SEEK_SET | SEEK_CUR | SEEK_END
- * @return int | bool new file offset as measured from the start of the file on success, false on failure.
+ * @return int|bool new file offset as measured from the start of the file on success, false on failure.
*/
public function lseek($file, $offset, $whence = SEEK_SET) {
$result = @smbclient_lseek($this->state, $file, $offset, $whence);
diff --git a/apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php b/apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php
new file mode 100644
index 00000000000..194e848502b
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ * This file is licensed under the Licensed under the MIT license:
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+namespace Icewind\SMB;
+
+
+class NotifyHandler implements INotifyHandler {
+ /**
+ * @var Connection
+ */
+ private $connection;
+
+ /**
+ * @var string
+ */
+ private $path;
+
+ private $listening = true;
+
+ /**
+ * @param Connection $connection
+ * @param string $path
+ */
+ public function __construct(Connection $connection, $path) {
+ $this->connection = $connection;
+ $this->path = $path;
+ }
+
+ /**
+ * Get all changes detected since the start of the notify process or the last call to getChanges
+ *
+ * @return Change[]
+ */
+ public function getChanges() {
+ if (!$this->listening) {
+ return [];
+ }
+ stream_set_blocking($this->connection->getOutputStream(), 0);
+ $lines = [];
+ while (($line = $this->connection->readLine())) {
+ $lines[] = $line;
+ }
+ stream_set_blocking($this->connection->getOutputStream(), 1);
+ return array_values(array_filter(array_map([$this, 'parseChangeLine'], $lines)));
+ }
+
+ /**
+ * Listen actively to all incoming changes
+ *
+ * Note that this is a blocking process and will cause the process to block forever if not explicitly terminated
+ *
+ * @param callable $callback
+ */
+ public function listen($callback) {
+ if ($this->listening) {
+ $this->connection->read(function ($line) use ($callback) {
+ return $callback($this->parseChangeLine($line));
+ });
+ }
+ }
+
+ private function parseChangeLine($line) {
+ $code = (int)substr($line, 0, 4);
+ if ($code === 0) {
+ return null;
+ }
+ $subPath = str_replace('\\', '/', substr($line, 5));
+ if ($this->path === '') {
+ return new Change($code, $subPath);
+ } else {
+ return new Change($code, $this->path . '/' . $subPath);
+ }
+ }
+
+ public function stop() {
+ $this->listening = false;
+ $this->connection->close();
+ }
+
+ public function __destruct() {
+ $this->stop();
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Parser.php b/apps/files_external/3rdparty/icewind/smb/src/Parser.php
index fc1d7f283a8..5cc5acbdf56 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Parser.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Parser.php
@@ -9,19 +9,38 @@ namespace Icewind\SMB;
use Icewind\SMB\Exception\AccessDeniedException;
use Icewind\SMB\Exception\AlreadyExistsException;
+use Icewind\SMB\Exception\AuthenticationException;
use Icewind\SMB\Exception\Exception;
use Icewind\SMB\Exception\FileInUseException;
+use Icewind\SMB\Exception\InvalidHostException;
use Icewind\SMB\Exception\InvalidResourceException;
use Icewind\SMB\Exception\InvalidTypeException;
+use Icewind\SMB\Exception\NoLoginServerException;
use Icewind\SMB\Exception\NotEmptyException;
use Icewind\SMB\Exception\NotFoundException;
class Parser {
+ const MSG_NOT_FOUND = 'Error opening local file ';
+
/**
* @var \Icewind\SMB\TimeZoneProvider
*/
protected $timeZoneProvider;
+ // todo replace with static once <5.6 support is dropped
+ // see error.h
+ private static $exceptionMap = [
+ ErrorCodes::PathNotFound => '\Icewind\SMB\Exception\NotFoundException',
+ ErrorCodes::ObjectNotFound => '\Icewind\SMB\Exception\NotFoundException',
+ ErrorCodes::NoSuchFile => '\Icewind\SMB\Exception\NotFoundException',
+ ErrorCodes::NameCollision => '\Icewind\SMB\Exception\AlreadyExistsException',
+ ErrorCodes::AccessDenied => '\Icewind\SMB\Exception\AccessDeniedException',
+ ErrorCodes::DirectoryNotEmpty => '\Icewind\SMB\Exception\NotEmptyException',
+ ErrorCodes::FileIsADirectory => '\Icewind\SMB\Exception\InvalidTypeException',
+ ErrorCodes::NotADirectory => '\Icewind\SMB\Exception\InvalidTypeException',
+ ErrorCodes::SharingViolation => '\Icewind\SMB\Exception\FileInUseException'
+ ];
+
/**
* @param \Icewind\SMB\TimeZoneProvider $timeZoneProvider
*/
@@ -29,50 +48,54 @@ class Parser {
$this->timeZoneProvider = $timeZoneProvider;
}
- public function checkForError($output, $path) {
- if (count($output) === 0) {
- return true;
- } else {
- if (strpos($output[0], 'does not exist')) {
- throw new NotFoundException($path);
- }
- $parts = explode(' ', $output[0]);
- $error = false;
- foreach ($parts as $part) {
- if (substr($part, 0, 9) === 'NT_STATUS') {
- $error = $part;
- }
+ private function getErrorCode($line) {
+ $parts = explode(' ', $line);
+ foreach ($parts as $part) {
+ if (substr($part, 0, 9) === 'NT_STATUS') {
+ return $part;
}
+ }
+ return false;
+ }
- $notFoundMsg = 'Error opening local file ';
- if (substr($output[0], 0, strlen($notFoundMsg)) === $notFoundMsg) {
- $localPath = substr($output[0], strlen($notFoundMsg));
- throw new InvalidResourceException('Failed opening local file "' . $localPath . '" for writing');
- }
+ public function checkForError($output, $path) {
+ if (strpos($output[0], 'does not exist')) {
+ throw new NotFoundException($path);
+ }
+ $error = $this->getErrorCode($output[0]);
- switch ($error) {
- case ErrorCodes::PathNotFound:
- case ErrorCodes::ObjectNotFound:
- case ErrorCodes::NoSuchFile:
- throw new NotFoundException($path);
- case ErrorCodes::NameCollision:
- throw new AlreadyExistsException($path);
- case ErrorCodes::AccessDenied:
- throw new AccessDeniedException($path);
- case ErrorCodes::DirectoryNotEmpty:
- throw new NotEmptyException($path);
- case ErrorCodes::FileIsADirectory:
- case ErrorCodes::NotADirectory:
- throw new InvalidTypeException($path);
- case ErrorCodes::SharingViolation:
- throw new FileInUseException($path);
- default:
- $message = 'Unknown error (' . $error . ')';
- if ($path) {
- $message .= ' for ' . $path;
- }
- throw new Exception($message);
- }
+ if (substr($output[0], 0, strlen(self::MSG_NOT_FOUND)) === self::MSG_NOT_FOUND) {
+ $localPath = substr($output[0], strlen(self::MSG_NOT_FOUND));
+ throw new InvalidResourceException('Failed opening local file "' . $localPath . '" for writing');
+ }
+
+ throw Exception::fromMap(self::$exceptionMap, $error, $path);
+ }
+
+ /**
+ * check if the first line holds a connection failure
+ *
+ * @param $line
+ * @throws AuthenticationException
+ * @throws InvalidHostException
+ * @throws NoLoginServerException
+ */
+ public function checkConnectionError($line) {
+ $line = rtrim($line, ')');
+ if (substr($line, -23) === ErrorCodes::LogonFailure) {
+ throw new AuthenticationException('Invalid login');
+ }
+ if (substr($line, -26) === ErrorCodes::BadHostName) {
+ throw new InvalidHostException('Invalid hostname');
+ }
+ if (substr($line, -22) === ErrorCodes::Unsuccessful) {
+ throw new InvalidHostException('Connection unsuccessful');
+ }
+ if (substr($line, -28) === ErrorCodes::ConnectionRefused) {
+ throw new InvalidHostException('Connection refused');
+ }
+ if (substr($line, -26) === ErrorCodes::NoLogonServers) {
+ throw new NoLoginServerException('No login server');
}
}
@@ -95,9 +118,7 @@ class Parser {
}
public function parseStat($output) {
- $mtime = 0;
- $mode = 0;
- $size = 0;
+ $data = [];
foreach ($output as $line) {
// A line = explode statement may not fill all array elements
// properly. May happen when accessing non Windows Fileservers
@@ -105,20 +126,13 @@ class Parser {
$name = isset($words[0]) ? $words[0] : '';
$value = isset($words[1]) ? $words[1] : '';
$value = trim($value);
- if ($name === 'write_time') {
- $mtime = strtotime($value);
- } else if ($name === 'attributes') {
- $mode = hexdec(substr($value, 1, -1));
- } else if ($name === 'stream') {
- list(, $size,) = explode(' ', $value);
- $size = intval($size);
- }
+ $data[$name] = $value;
}
- return array(
- 'mtime' => $mtime,
- 'mode' => $mode,
- 'size' => $size
- );
+ return [
+ 'mtime' => strtotime($data['write_time']),
+ 'mode' => hexdec(substr($data['attributes'], strpos($data['attributes'], '('), -1)),
+ 'size' => isset($data['stream']) ? intval(explode(' ', $data['stream'])[1]) : 0
+ ];
}
public function parseDir($output, $basePath) {
@@ -139,4 +153,17 @@ class Parser {
}
return $content;
}
+
+ public function parseListShares($output) {
+ $shareNames = array();
+ foreach ($output as $line) {
+ if (strpos($line, '|')) {
+ list($type, $name, $description) = explode('|', $line);
+ if (strtolower($type) === 'disk') {
+ $shareNames[$name] = $description;
+ }
+ }
+ }
+ return $shareNames;
+ }
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/RawConnection.php b/apps/files_external/3rdparty/icewind/smb/src/RawConnection.php
index 88ab046ef38..e9349716430 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/RawConnection.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/RawConnection.php
@@ -88,7 +88,7 @@ class RawConnection {
/**
* read a line of output
*
- * @return string
+ * @return string|false
*/
public function readLine() {
return stream_get_line($this->getOutputStream(), 4086, "\n");
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Server.php b/apps/files_external/3rdparty/icewind/smb/src/Server.php
index 25f17201397..12692eb4c6e 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Server.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Server.php
@@ -135,32 +135,11 @@ class Server {
$connection = new RawConnection($command);
$connection->writeAuthentication($this->getUser(), $this->getPassword());
$output = $connection->readAll();
+ $parser = new Parser($this->timezoneProvider);
- $line = $output[0];
+ $parser->checkConnectionError($output[0]);
- $line = rtrim($line, ')');
- if (substr($line, -23) === ErrorCodes::LogonFailure) {
- throw new AuthenticationException();
- }
- if (substr($line, -26) === ErrorCodes::BadHostName) {
- throw new InvalidHostException();
- }
- if (substr($line, -22) === ErrorCodes::Unsuccessful) {
- throw new InvalidHostException();
- }
- if (substr($line, -28) === ErrorCodes::ConnectionRefused) {
- throw new InvalidHostException();
- }
-
- $shareNames = array();
- foreach ($output as $line) {
- if (strpos($line, '|')) {
- list($type, $name, $description) = explode('|', $line);
- if (strtolower($type) === 'disk') {
- $shareNames[$name] = $description;
- }
- }
- }
+ $shareNames = $parser->parseListShares($output);
$shares = array();
foreach ($shareNames as $name => $description) {
@@ -174,7 +153,7 @@ class Server {
* @return \Icewind\SMB\IShare
*/
public function getShare($name) {
- return new Share($this, $name);
+ return new Share($this, $name, $this->system);
}
/**
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Share.php b/apps/files_external/3rdparty/icewind/smb/src/Share.php
index 21f8fe5b139..ba8bbbbb8ca 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Share.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Share.php
@@ -8,6 +8,7 @@
namespace Icewind\SMB;
use Icewind\SMB\Exception\ConnectionException;
+use Icewind\SMB\Exception\DependencyException;
use Icewind\SMB\Exception\FileInUseException;
use Icewind\SMB\Exception\InvalidTypeException;
use Icewind\SMB\Exception\NotFoundException;
@@ -42,24 +43,30 @@ class Share extends AbstractShare {
/**
* @param Server $server
* @param string $name
+ * @param System $system
*/
- public function __construct($server, $name) {
+ public function __construct($server, $name, System $system = null) {
parent::__construct();
$this->server = $server;
$this->name = $name;
- $this->system = new System();
+ $this->system = (!is_null($system)) ? $system : new System();
$this->parser = new Parser(new TimeZoneProvider($this->server->getHost(), $this->system));
}
protected function getConnection() {
$workgroupArgument = ($this->server->getWorkgroup()) ? ' -W ' . escapeshellarg($this->server->getWorkgroup()) : '';
- $command = sprintf('stdbuf -o0 %s %s --authentication-file=%s %s',
+ $smbClientPath = $this->system->getSmbclientPath();
+ if (!$smbClientPath) {
+ throw new DependencyException('Can\'t find smbclient binary in path');
+ }
+ $command = sprintf('%s%s %s --authentication-file=%s %s',
+ $this->system->hasStdBuf() ? 'stdbuf -o0 ' : '',
$this->system->getSmbclientPath(),
$workgroupArgument,
System::getFD(3),
escapeshellarg('//' . $this->server->getHost() . '/' . $this->name)
);
- $connection = new Connection($command);
+ $connection = new Connection($command, $this->parser);
$connection->writeAuthentication($this->server->getUser(), $this->server->getPassword());
if (!$connection->isValid()) {
throw new ConnectionException();
@@ -97,8 +104,8 @@ class Share extends AbstractShare {
}
protected function simpleCommand($command, $path) {
- $path = $this->escapePath($path);
- $cmd = $command . ' ' . $path;
+ $escapedPath = $this->escapePath($path);
+ $cmd = $command . ' ' . $escapedPath;
$output = $this->execute($cmd);
return $this->parseOutput($output, $path);
}
@@ -125,7 +132,7 @@ class Share extends AbstractShare {
/**
* @param string $path
- * @return \Icewind\SMB\IFileInfo[]
+ * @return \Icewind\SMB\IFileInfo
*/
public function stat($path) {
$escapedPath = $this->escapePath($path);
@@ -216,8 +223,7 @@ class Share extends AbstractShare {
public function rename($from, $to) {
$path1 = $this->escapePath($from);
$path2 = $this->escapePath($to);
- $cmd = 'rename ' . $path1 . ' ' . $path2;
- $output = $this->execute($cmd);
+ $output = $this->execute('rename ' . $path1 . ' ' . $path2);
return $this->parseOutput($output, $to);
}
@@ -268,15 +274,8 @@ class Share extends AbstractShare {
$source = $this->escapePath($source);
// since returned stream is closed by the caller we need to create a new instance
// since we can't re-use the same file descriptor over multiple calls
- $workgroupArgument = ($this->server->getWorkgroup()) ? ' -W ' . escapeshellarg($this->server->getWorkgroup()) : '';
- $command = sprintf('%s %s --authentication-file=%s %s',
- $this->system->getSmbclientPath(),
- $workgroupArgument,
- System::getFD(3),
- escapeshellarg('//' . $this->server->getHost() . '/' . $this->name)
- );
- $connection = new Connection($command);
- $connection->writeAuthentication($this->server->getUser(), $this->server->getPassword());
+ $connection = $this->getConnection();
+
$connection->write('get ' . $source . ' ' . System::getFD(5));
$connection->write('exit');
$fh = $connection->getFileOutputStream();
@@ -297,17 +296,9 @@ class Share extends AbstractShare {
$target = $this->escapePath($target);
// since returned stream is closed by the caller we need to create a new instance
// since we can't re-use the same file descriptor over multiple calls
- $workgroupArgument = ($this->server->getWorkgroup()) ? ' -W ' . escapeshellarg($this->server->getWorkgroup()) : '';
- $command = sprintf('%s %s --authentication-file=%s %s',
- $this->system->getSmbclientPath(),
- $workgroupArgument,
- System::getFD(3),
- escapeshellarg('//' . $this->server->getHost() . '/' . $this->name)
- );
- $connection = new Connection($command);
- $connection->writeAuthentication($this->server->getUser(), $this->server->getPassword());
- $fh = $connection->getFileInputStream();
+ $connection = $this->getConnection();
+ $fh = $connection->getFileInputStream();
$connection->write('put ' . System::getFD(4) . ' ' . $target);
$connection->write('exit');
@@ -343,30 +334,30 @@ class Share extends AbstractShare {
$output = $this->execute($cmd);
$this->parseOutput($output, $path);
- // then set the modes we want
- $cmd = 'setmode ' . $path . ' ' . $modeString;
- $output = $this->execute($cmd);
- return $this->parseOutput($output, $path);
+ if ($mode !== FileInfo::MODE_NORMAL) {
+ // then set the modes we want
+ $cmd = 'setmode ' . $path . ' ' . $modeString;
+ $output = $this->execute($cmd);
+ return $this->parseOutput($output, $path);
+ } else {
+ return true;
+ }
}
/**
* @param string $path
- * @param callable $callback callable which will be called for each received change
- * @return mixed
+ * @return INotifyHandler
+ * @throws ConnectionException
+ * @throws DependencyException
*/
- public function notify($path, callable $callback) {
+ public function notify($path) {
+ if (!$this->system->hasStdBuf()) { //stdbuf is required to disable smbclient's output buffering
+ throw new DependencyException('stdbuf is required for usage of the notify command');
+ }
$connection = $this->getConnection(); // use a fresh connection since the notify command blocks the process
$command = 'notify ' . $this->escapePath($path);
$connection->write($command . PHP_EOL);
- $connection->read(function ($line) use ($callback, $path) {
- $code = (int)substr($line, 0, 4);
- $subPath = substr($line, 5);
- if ($path === '') {
- return $callback($code, $subPath);
- } else {
- return $callback($code, $path . '/' . $subPath);
- }
- });
+ return new NotifyHandler($connection, $path);
}
/**
@@ -395,7 +386,12 @@ class Share extends AbstractShare {
* @return bool
*/
protected function parseOutput($lines, $path = '') {
- return $this->parser->checkForError($lines, $path);
+ if (count($lines) === 0) {
+ return true;
+ } else {
+ $this->parser->checkForError($lines, $path);
+ return false;
+ }
}
/**
diff --git a/apps/files_external/3rdparty/icewind/smb/src/System.php b/apps/files_external/3rdparty/icewind/smb/src/System.php
index 192a0b3877d..7c519988aa5 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/System.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/System.php
@@ -14,6 +14,8 @@ class System {
private $net;
+ private $stdbuf;
+
public static function getFD($num) {
$folders = array(
'/proc/self/fd',
@@ -40,4 +42,14 @@ class System {
}
return $this->net;
}
+
+ public function hasStdBuf() {
+ if (!$this->stdbuf) {
+ $result = null;
+ $output = array();
+ exec('which stdbuf 2>&1', $output, $result);
+ $this->stdbuf = $result === 0;
+ }
+ return $this->stdbuf;
+ }
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
index 86d7859a6f7..fcdf7e3e879 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
@@ -27,7 +27,7 @@ class TimeZoneProvider {
* @param string $host
* @param System $system
*/
- function __construct($host, System $system) {
+ public function __construct($host, System $system) {
$this->host = $host;
$this->system = $system;
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php
index c5847b95fdb..4eef55681c7 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php
@@ -107,6 +107,8 @@ class CallbackWrapper extends Wrapper {
$result = parent::stream_close();
if (is_callable($this->closeCallback)) {
call_user_func($this->closeCallback);
+ // prevent further calls by potential PHP 7 GC ghosts
+ $this->closeCallback = null;
}
return $result;
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/Path.php b/apps/files_external/3rdparty/icewind/streams/src/Path.php
index 46d2156b69a..bef9fd5f616 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/Path.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/Path.php
@@ -56,7 +56,7 @@ class Path {
protected function register() {
if (!$this->registered) {
- $this->appendDefaultContent($this->getProtocol(), $this->contextOptions);
+ $this->appendDefaultContent($this->contextOptions);
stream_wrapper_register($this->getProtocol(), $this->class);
$this->registered = true;
}
@@ -71,13 +71,17 @@ class Path {
/**
* Add values to the default stream context
*
- * @param string $key
* @param array $values
*/
- protected function appendDefaultContent($key, $values) {
+ protected function appendDefaultContent($values) {
+ if (!is_array(current($values))) {
+ $values = array($this->getProtocol() => $values);
+ }
$context = stream_context_get_default();
$defaults = stream_context_get_options($context);
- $defaults[$key] = $values;
+ foreach ($values as $key => $value) {
+ $defaults[$key] = $value;
+ }
stream_context_set_default($defaults);
}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php
new file mode 100644
index 00000000000..88af7e17b33
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/streams/src/PathWrapper.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Copyright (c) 2016 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Licensed under the MIT license:
+ * http://opensource.org/licenses/MIT
+ */
+
+namespace Icewind\Streams;
+
+/**
+ * A string-like object that maps to an existing stream when opened
+ */
+class PathWrapper extends NullWrapper {
+ /**
+ * @param resource $source
+ * @return Path|string
+ */
+ public static function getPath($source) {
+ return new Path(__CLASS__, [
+ 'null' => [
+ 'source' => $source
+ ]
+ ]);
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php
index 53de2942ca9..8e52eff9a08 100644
--- a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php
+++ b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php
@@ -53,7 +53,7 @@ abstract class Wrapper implements File, Directory {
if (isset($context[$name])) {
$context = $context[$name];
} else {
- throw new \BadMethodCallException('Invalid context, "callable" options not set');
+ throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
}
if (isset($context['source']) and is_resource($context['source'])) {
$this->setSourceStream($context['source']);
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index c221ba4145f..3f6a48d2e22 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -3,17 +3,16 @@
<id>files_external</id>
<name>External storage support</name>
<description>
- This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.
-
- External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation.
+This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.
+
+External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation.
</description>
<licence>AGPL</licence>
<author>Robin Appelman, Michael Gapczynski, Vincent Petry</author>
<documentation>
<admin>admin-external-storage</admin>
</documentation>
- <rememberlogin>false</rememberlogin>
- <version>1.1.2</version>
+ <version>1.3.0</version>
<types>
<filesystem/>
</types>
@@ -22,7 +21,7 @@
<namespace>Files_External</namespace>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
diff --git a/apps/files_external/img/app-dark.svg b/apps/files_external/img/app-dark.svg
new file mode 100644
index 00000000000..157af238eeb
--- /dev/null
+++ b/apps/files_external/img/app-dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" viewBox="0 0 32 32"><path d="M14.903 3.237l4.76 4.515-7.14 6.772 4.76 4.514 7.142-6.772 4.762 4.515V3.237H14.904zM5.38 5.495C4.063 5.495 3 6.5 3 7.752V25.81c0 1.25 1.062 2.257 2.38 2.257h19.045c1.318 0 2.38-1.007 2.38-2.257v-6.772l-2.38-2.257v9.03H5.38V7.752h9.523l-2.38-2.258H5.38z" fill="#000"/></svg>
diff --git a/apps/files_external/js/statusmanager.js b/apps/files_external/js/statusmanager.js
index 4869e663a0a..782b0b08288 100644
--- a/apps/files_external/js/statusmanager.js
+++ b/apps/files_external/js/statusmanager.js
@@ -539,7 +539,11 @@ OCA.External.StatusManager.Utils = {
* of the tr matching the folder name
*/
getIconRoute: function (tr) {
- var icon = OC.imagePath('core', 'filetypes/folder-external');
+ if (OCA.Theming) {
+ var icon = OC.generateUrl('/apps/theming/img/core/filetypes/folder-external.svg?v=' + OCA.Theming.cacheBuster);
+ } else {
+ var icon = OC.imagePath('core', 'filetypes/folder-external');
+ }
var backend = null;
if (tr instanceof $) {
diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js
index 12d1c259e9e..a32f7f2bcbb 100644
--- a/apps/files_external/l10n/cs_CZ.js
+++ b/apps/files_external/l10n/cs_CZ.js
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "Smazat",
"Allow users to mount external storage" : "Povolit uživatelům připojení externího úložiště",
"Allow users to mount the following external storage" : "Povolit uživatelů připojit následující externí úložiště",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Nelze obdržet informaci z ownCloud serveru: {code} {type}",
- "Access granted" : "Přístup povolen",
- "Global Credentials" : "Globální přihlašovací údaje",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Poznámka:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" není instalováno. Není možné připojení %s. Prosím požádejte svého správce systému o instalaci.",
- "External Storage" : "Externí úložiště"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Nelze obdržet informaci z ownCloud serveru: {code} {type}"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json
index 96738c4e689..d4f14f220f3 100644
--- a/apps/files_external/l10n/cs_CZ.json
+++ b/apps/files_external/l10n/cs_CZ.json
@@ -124,14 +124,6 @@
"Delete" : "Smazat",
"Allow users to mount external storage" : "Povolit uživatelům připojení externího úložiště",
"Allow users to mount the following external storage" : "Povolit uživatelů připojit následující externí úložiště",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Nelze obdržet informaci z ownCloud serveru: {code} {type}",
- "Access granted" : "Přístup povolen",
- "Global Credentials" : "Globální přihlašovací údaje",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Poznámka:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" není instalováno. Není možné připojení %s. Prosím požádejte svého správce systému o instalaci.",
- "External Storage" : "Externí úložiště"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Nelze obdržet informaci z ownCloud serveru: {code} {type}"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/da.js b/apps/files_external/l10n/da.js
index 1eb3f881c79..847a4be17db 100644
--- a/apps/files_external/l10n/da.js
+++ b/apps/files_external/l10n/da.js
@@ -99,12 +99,6 @@ OC.L10N.register(
"Add storage" : "Tilføj lager",
"Advanced settings" : "Avancerede indstillinger",
"Delete" : "Slet",
- "Allow users to mount the following external storage" : "Tillad brugere at montere følgende som eksternt lager",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Note:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> \"%s\" er ikke installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.",
- "External Storage" : "Ekstern opbevaring"
+ "Allow users to mount the following external storage" : "Tillad brugere at montere følgende som eksternt lager"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/da.json b/apps/files_external/l10n/da.json
index 2845083e017..e1ee85b5e69 100644
--- a/apps/files_external/l10n/da.json
+++ b/apps/files_external/l10n/da.json
@@ -97,12 +97,6 @@
"Add storage" : "Tilføj lager",
"Advanced settings" : "Avancerede indstillinger",
"Delete" : "Slet",
- "Allow users to mount the following external storage" : "Tillad brugere at montere følgende som eksternt lager",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Note:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> \"%s\" er ikke installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.",
- "External Storage" : "Ekstern opbevaring"
+ "Allow users to mount the following external storage" : "Tillad brugere at montere følgende som eksternt lager"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js
index 65aed9991e9..63fb1e42293 100644
--- a/apps/files_external/l10n/de.js
+++ b/apps/files_external/l10n/de.js
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "Löschen",
"Allow users to mount external storage" : "Benutzern erlauben, externen Speicher einzubinden",
"Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Die gewünschten Informationen konnten nicht vom Server gelesen werden: {code} {type}",
- "Access granted" : "Zugriff gewährt",
- "Global Credentials" : "Globale Anmeldeinformationen",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Hinweis:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
- "External Storage" : "Externer Speicher"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Die gewünschten Informationen konnten nicht vom Server gelesen werden: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json
index cfd9ad3aa67..4fdb9e776fe 100644
--- a/apps/files_external/l10n/de.json
+++ b/apps/files_external/l10n/de.json
@@ -124,14 +124,6 @@
"Delete" : "Löschen",
"Allow users to mount external storage" : "Benutzern erlauben, externen Speicher einzubinden",
"Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Die gewünschten Informationen konnten nicht vom Server gelesen werden: {code} {type}",
- "Access granted" : "Zugriff gewährt",
- "Global Credentials" : "Globale Anmeldeinformationen",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Hinweis:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.",
- "External Storage" : "Externer Speicher"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Die gewünschten Informationen konnten nicht vom Server gelesen werden: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js
index 68df8208ada..d136e0176b4 100644
--- a/apps/files_external/l10n/de_DE.js
+++ b/apps/files_external/l10n/de_DE.js
@@ -52,7 +52,7 @@ OC.L10N.register(
"Storage with id \"%i\" is not user editable" : "Der Speicher mit der ID „%i“ ist nicht bearbeitbar durch Benutzer",
"Access key" : "Zugangsschlüssel",
"Secret key" : "geheimer Schlüssel",
- "Builtin" : "Builtin",
+ "Builtin" : "Eingebaut",
"None" : "Keine",
"OAuth1" : "OAuth1",
"App key" : "App-Schlüssel",
@@ -114,7 +114,7 @@ OC.L10N.register(
"Enable encryption" : "Verschlüsselung aktivieren",
"Enable previews" : "Vorschau aktivieren",
"Enable sharing" : "Teilen aktivieren",
- "Check for changes" : "Auf Änderungen überprüfen",
+ "Check for changes" : "Auf Änderungen prüfen",
"Never" : "Nie",
"Once every direct access" : "Einmal bei jedem Direktzugriff",
"Folder name" : "Ordnername",
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "Löschen",
"Allow users to mount external storage" : "Erlauben Sie den Benutzern externen Speicher hinzuzufügen",
"Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Es konnten keine Informationen vom entfernten Server gelesen werden: {code} {type}",
- "Access granted" : "Zugriff gewährt",
- "Global Credentials" : "Globale Anmeldeinformationen",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Hinweis:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
- "External Storage" : "Externer Speicher"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Es konnten keine Informationen vom entfernten Server gelesen werden: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json
index b2ee065a611..12dea8c0a2a 100644
--- a/apps/files_external/l10n/de_DE.json
+++ b/apps/files_external/l10n/de_DE.json
@@ -50,7 +50,7 @@
"Storage with id \"%i\" is not user editable" : "Der Speicher mit der ID „%i“ ist nicht bearbeitbar durch Benutzer",
"Access key" : "Zugangsschlüssel",
"Secret key" : "geheimer Schlüssel",
- "Builtin" : "Builtin",
+ "Builtin" : "Eingebaut",
"None" : "Keine",
"OAuth1" : "OAuth1",
"App key" : "App-Schlüssel",
@@ -112,7 +112,7 @@
"Enable encryption" : "Verschlüsselung aktivieren",
"Enable previews" : "Vorschau aktivieren",
"Enable sharing" : "Teilen aktivieren",
- "Check for changes" : "Auf Änderungen überprüfen",
+ "Check for changes" : "Auf Änderungen prüfen",
"Never" : "Nie",
"Once every direct access" : "Einmal bei jedem Direktzugriff",
"Folder name" : "Ordnername",
@@ -124,14 +124,6 @@
"Delete" : "Löschen",
"Allow users to mount external storage" : "Erlauben Sie den Benutzern externen Speicher hinzuzufügen",
"Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Es konnten keine Informationen vom entfernten Server gelesen werden: {code} {type}",
- "Access granted" : "Zugriff gewährt",
- "Global Credentials" : "Globale Anmeldeinformationen",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Hinweis:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.",
- "External Storage" : "Externer Speicher"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Es konnten keine Informationen vom entfernten Server gelesen werden: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js
index c61795a53f7..b5af26264ac 100644
--- a/apps/files_external/l10n/el.js
+++ b/apps/files_external/l10n/el.js
@@ -109,12 +109,6 @@ OC.L10N.register(
"Delete" : "Διαγραφή",
"Allow users to mount external storage" : "Να επιτρέπεται στους χρήστες η σύνδεση εξωτερικού χώρου",
"Allow users to mount the following external storage" : "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Αδυναμία λήψης πληροφορίας από τον διακομιστή nextcloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Σημείωση:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη FTP στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση του %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η επέκταση \"%s\" δεν είναι εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
- "External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Αδυναμία λήψης πληροφορίας από τον διακομιστή nextcloud: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json
index d640bcb67a4..03e56cfba5c 100644
--- a/apps/files_external/l10n/el.json
+++ b/apps/files_external/l10n/el.json
@@ -107,12 +107,6 @@
"Delete" : "Διαγραφή",
"Allow users to mount external storage" : "Να επιτρέπεται στους χρήστες η σύνδεση εξωτερικού χώρου",
"Allow users to mount the following external storage" : "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Αδυναμία λήψης πληροφορίας από τον διακομιστή nextcloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Σημείωση:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη FTP στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση του %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η επέκταση \"%s\" δεν είναι εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.",
- "External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Αδυναμία λήψης πληροφορίας από τον διακομιστή nextcloud: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/en_GB.js b/apps/files_external/l10n/en_GB.js
index f357ab6eb2d..12d255d88bd 100644
--- a/apps/files_external/l10n/en_GB.js
+++ b/apps/files_external/l10n/en_GB.js
@@ -119,13 +119,6 @@ OC.L10N.register(
"Delete" : "Delete",
"Allow users to mount external storage" : "Allow users to mount external storage",
"Allow users to mount the following external storage" : "Allow users to mount the following external storage",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Couldn't get the information from the ownCloud server: {code} {type}",
- "Global Credentials" : "Global Credentials",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Note:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
- "External Storage" : "External Storage"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Couldn't get the information from the ownCloud server: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/en_GB.json b/apps/files_external/l10n/en_GB.json
index 7a7d7f63f37..8e7e2bde31e 100644
--- a/apps/files_external/l10n/en_GB.json
+++ b/apps/files_external/l10n/en_GB.json
@@ -117,13 +117,6 @@
"Delete" : "Delete",
"Allow users to mount external storage" : "Allow users to mount external storage",
"Allow users to mount the following external storage" : "Allow users to mount the following external storage",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Couldn't get the information from the ownCloud server: {code} {type}",
- "Global Credentials" : "Global Credentials",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Note:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.",
- "External Storage" : "External Storage"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Couldn't get the information from the ownCloud server: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js
index ab585fb62cd..c8568aa5adc 100644
--- a/apps/files_external/l10n/es.js
+++ b/apps/files_external/l10n/es.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"Save" : "Guardar",
"Empty response from the server" : "Respuesta vacía desde el servidor",
"Couldn't access. Please logout and login to activate this mount point" : "No se puede acceder. Por favor cierra sesión e iníciala de nuevo para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No se pudo obtener la información del servidor remoto: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "No se puede obtener la lista de los puntos de montaje externos: {type}",
"There was an error with message: " : "Hubo un error con el mensaje:",
"External mount error" : "Error de montaje externo",
@@ -104,6 +105,7 @@ OC.L10N.register(
"External storages" : "Almacenamientos 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." : "El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.",
"The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP desde PHP no esta habilitado o instalado. Montar el %s no ha sido posible. Por favor consulta al administrador de tu sistema para que lo instale.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no está instalado. El montaje de %s no es posible. Por favor, pregunte a su administrador del sistema para instalarlo.",
"No external storage configured" : "No hay ningún almacenamiento externo configurado",
"You can add external storages in the personal settings" : "Puede agregar almacenamientos externos en la configuración personal",
"Name" : "Nombre",
@@ -124,14 +126,6 @@ OC.L10N.register(
"Delete" : "Eliminar",
"Allow users to mount external storage" : "Permitir a los usuarios montar un almacenamiento externo",
"Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "No se puede obtener información acerca del servidor de OwnCloud: {code} {type}",
- "Access granted" : "Acceso permitido",
- "Global Credentials" : "Credenciales Globales",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Nota:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" no está instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.",
- "External Storage" : "Almacenamiento externo"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "No se puede obtener información acerca del servidor de OwnCloud: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json
index 2900c238f1c..c6b4bdc33c7 100644
--- a/apps/files_external/l10n/es.json
+++ b/apps/files_external/l10n/es.json
@@ -23,6 +23,7 @@
"Save" : "Guardar",
"Empty response from the server" : "Respuesta vacía desde el servidor",
"Couldn't access. Please logout and login to activate this mount point" : "No se puede acceder. Por favor cierra sesión e iníciala de nuevo para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No se pudo obtener la información del servidor remoto: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "No se puede obtener la lista de los puntos de montaje externos: {type}",
"There was an error with message: " : "Hubo un error con el mensaje:",
"External mount error" : "Error de montaje externo",
@@ -102,6 +103,7 @@
"External storages" : "Almacenamientos 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." : "El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.",
"The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP desde PHP no esta habilitado o instalado. Montar el %s no ha sido posible. Por favor consulta al administrador de tu sistema para que lo instale.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no está instalado. El montaje de %s no es posible. Por favor, pregunte a su administrador del sistema para instalarlo.",
"No external storage configured" : "No hay ningún almacenamiento externo configurado",
"You can add external storages in the personal settings" : "Puede agregar almacenamientos externos en la configuración personal",
"Name" : "Nombre",
@@ -122,14 +124,6 @@
"Delete" : "Eliminar",
"Allow users to mount external storage" : "Permitir a los usuarios montar un almacenamiento externo",
"Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "No se puede obtener información acerca del servidor de OwnCloud: {code} {type}",
- "Access granted" : "Acceso permitido",
- "Global Credentials" : "Credenciales Globales",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Nota:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" no está instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.",
- "External Storage" : "Almacenamiento externo"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "No se puede obtener información acerca del servidor de OwnCloud: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/fi_FI.js b/apps/files_external/l10n/fi_FI.js
index 8064fe16122..a02b6f5c102 100644
--- a/apps/files_external/l10n/fi_FI.js
+++ b/apps/files_external/l10n/fi_FI.js
@@ -106,13 +106,6 @@ OC.L10N.register(
"Delete" : "Poista",
"Allow users to mount external storage" : "Salli käyttäjien liittää erillisiä tallennustiloja",
"Allow users to mount the following external storage" : "Salli käyttäjien liittää seuraavat erilliset tallennusvälineet",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Tietojen saaminen ownCloud-palvelimelta epäonnistui: {code} {type}",
- "Access granted" : "Pääsy myönnetty",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Huomio:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.",
- "External Storage" : "Erillinen tallennusväline"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Tietojen saaminen ownCloud-palvelimelta epäonnistui: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/fi_FI.json b/apps/files_external/l10n/fi_FI.json
index e78a8f056cd..c0be5812f6b 100644
--- a/apps/files_external/l10n/fi_FI.json
+++ b/apps/files_external/l10n/fi_FI.json
@@ -104,13 +104,6 @@
"Delete" : "Poista",
"Allow users to mount external storage" : "Salli käyttäjien liittää erillisiä tallennustiloja",
"Allow users to mount the following external storage" : "Salli käyttäjien liittää seuraavat erilliset tallennusvälineet",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Tietojen saaminen ownCloud-palvelimelta epäonnistui: {code} {type}",
- "Access granted" : "Pääsy myönnetty",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Huomio:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.",
- "External Storage" : "Erillinen tallennusväline"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Tietojen saaminen ownCloud-palvelimelta epäonnistui: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index 75c40e540a8..cd65c874f8b 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "Supprimer",
"Allow users to mount external storage" : "Autoriser les utilisateurs à monter des espaces de stockage externes",
"Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossible d'obtenir l'information depuis le serveur Nextcloud : {code} {type}",
- "Access granted" : "Accès autorisé",
- "Global Credentials" : "Informations d'identification globales",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Attention :</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "External Storage" : "Stockage externe"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossible d'obtenir l'information depuis le serveur Nextcloud : {code} {type}"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index d9e9f9774d4..d3ccd3a3d88 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -124,14 +124,6 @@
"Delete" : "Supprimer",
"Allow users to mount external storage" : "Autoriser les utilisateurs à monter des espaces de stockage externes",
"Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossible d'obtenir l'information depuis le serveur Nextcloud : {code} {type}",
- "Access granted" : "Accès autorisé",
- "Global Credentials" : "Informations d'identification globales",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Attention :</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.",
- "External Storage" : "Stockage externe"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossible d'obtenir l'information depuis le serveur Nextcloud : {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/he.js b/apps/files_external/l10n/he.js
index 9a677d94b8d..26344421f92 100644
--- a/apps/files_external/l10n/he.js
+++ b/apps/files_external/l10n/he.js
@@ -116,12 +116,6 @@ OC.L10N.register(
"Delete" : "מחיקה",
"Allow users to mount external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני",
"Allow users to mount the following external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני הבא",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "לא ניתן היה לקבל את המידע משרת ה- ownCloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>הערה:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- cURL ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- FTP ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> \"%s\" אינו מותקן. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.",
- "External Storage" : "אחסון חיצוני"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "לא ניתן היה לקבל את המידע משרת ה- ownCloud: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/he.json b/apps/files_external/l10n/he.json
index f9014235827..e5962dc39ac 100644
--- a/apps/files_external/l10n/he.json
+++ b/apps/files_external/l10n/he.json
@@ -114,12 +114,6 @@
"Delete" : "מחיקה",
"Allow users to mount external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני",
"Allow users to mount the following external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני הבא",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "לא ניתן היה לקבל את המידע משרת ה- ownCloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>הערה:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- cURL ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- FTP ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> \"%s\" אינו מותקן. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.",
- "External Storage" : "אחסון חיצוני"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "לא ניתן היה לקבל את המידע משרת ה- ownCloud: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/hu_HU.js b/apps/files_external/l10n/hu_HU.js
index 71f51fc21c3..736a2c47091 100644
--- a/apps/files_external/l10n/hu_HU.js
+++ b/apps/files_external/l10n/hu_HU.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"Couldn't get the list of external mount points: {type}" : "Nem lehet letölteni a külső csatolási pontok listáját: {type}",
"There was an error with message: " : "Hiba történt ezzel az üzenettel:",
"External mount error" : "Külső csatolási hiba",
+ "external-storage" : "külső tároló",
"Couldn't get the list of Windows network drive mount points: empty response from the server" : "Nem sikerült letölteni a Windows hálózati meghajtó csatolási pontok listáját: üres válasz a szervertől",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Néhány beállított külső csatolási pont nincs kapcsolatban. További információkért kattints a piros sor(ok)ra.",
"Please enter the credentials for the {mount} mount" : "Kérlek add meg a következő csatolás azonosítóit: {mount}",
@@ -118,14 +119,6 @@ OC.L10N.register(
"Delete" : "Törlés",
"Allow users to mount external storage" : "Külső tárolók csatolásának engedélyezése a felhasználók részére",
"Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók csatolása:",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Nem sikerült lekérdezni az információkat az ownCloud szerverről: {code} {type}",
- "Access granted" : "Hozzáférés biztosítva",
- "Global Credentials" : "Globális azonosítók",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Megjegyzés:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "External Storage" : "Külső tárolási szolgáltatások becsatolása"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Nem sikerült lekérdezni az információkat az ownCloud szerverről: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/hu_HU.json b/apps/files_external/l10n/hu_HU.json
index 92c7d6f472a..e143d7acafb 100644
--- a/apps/files_external/l10n/hu_HU.json
+++ b/apps/files_external/l10n/hu_HU.json
@@ -27,6 +27,7 @@
"Couldn't get the list of external mount points: {type}" : "Nem lehet letölteni a külső csatolási pontok listáját: {type}",
"There was an error with message: " : "Hiba történt ezzel az üzenettel:",
"External mount error" : "Külső csatolási hiba",
+ "external-storage" : "külső tároló",
"Couldn't get the list of Windows network drive mount points: empty response from the server" : "Nem sikerült letölteni a Windows hálózati meghajtó csatolási pontok listáját: üres válasz a szervertől",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Néhány beállított külső csatolási pont nincs kapcsolatban. További információkért kattints a piros sor(ok)ra.",
"Please enter the credentials for the {mount} mount" : "Kérlek add meg a következő csatolás azonosítóit: {mount}",
@@ -116,14 +117,6 @@
"Delete" : "Törlés",
"Allow users to mount external storage" : "Külső tárolók csatolásának engedélyezése a felhasználók részére",
"Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók csatolása:",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Nem sikerült lekérdezni az információkat az ownCloud szerverről: {code} {type}",
- "Access granted" : "Hozzáférés biztosítva",
- "Global Credentials" : "Globális azonosítók",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Megjegyzés:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "External Storage" : "Külső tárolási szolgáltatások becsatolása"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Nem sikerült lekérdezni az információkat az ownCloud szerverről: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js
index 3798024a2b4..da2326265b0 100644
--- a/apps/files_external/l10n/id.js
+++ b/apps/files_external/l10n/id.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"Save" : "Simpan",
"Empty response from the server" : "Tidak ada respon dari server",
"Couldn't access. Please logout and login to activate this mount point" : "Tidak dapat mengakses. Log keluar dan log masuk untuk mengaktifkan mount point ini",
+ "Couldn't get the information from the remote server: {code} {type}" : "Tidak dapat mengambil informasi dari server remote: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Tidak bisa mendapatkan informasi dari mount point eksternal: {type}",
"There was an error with message: " : "Terjadi kesalahan dengan pesan:",
"External mount error" : "Kesalahan mount eksternal",
@@ -64,6 +65,7 @@ OC.L10N.register(
"Identity endpoint URL" : "Identitas URL akhir",
"Rackspace" : "Rackspace",
"API key" : "Kunci API",
+ "Global credentials" : "Sandi Global",
"Log-in credentials, save in database" : "Kredensial masuk, simpan di basis data",
"Username and password" : "Nama pengguna dan sandi",
"Log-in credentials, save in session" : "Kredensial masuk, simpan dalam sesi",
@@ -88,6 +90,7 @@ OC.L10N.register(
"Google Drive" : "Google Drive",
"Local" : "Lokal",
"Location" : "lokasi",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
"SFTP with secret key login" : "SFTP dengan kunci rahasia masuk",
@@ -99,6 +102,10 @@ OC.L10N.register(
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Nama layanan",
"Request timeout (seconds)" : "Minta waktu habis (detik)",
+ "External storages" : "Penyimpanan Eksternal",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Dukungan cURL di PHP tidak diaktifkan atau terpasang. Mengaitkan %s tidak memungkinkan. Harap tanyakan administrator sistem anda untuk memasangnya.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Dukungan FTP di PHP tidak diaktifkan atau terpasang. Mengaitkan %s tidak memungkinkan. Harap tanya administrator sistem anda untuk memasangnya.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" tidak terpasang. Mengaitkan %s tidak memungkinkan. Harap tanya administrator sistem anda untuk memasangnya.",
"No external storage configured" : "Penyimpanan eksternal tidak dikonfigurasi",
"You can add external storages in the personal settings" : "Anda dapat menambahkan penyimpanan eksternal di pengaturan pribadi",
"Name" : "Nama",
@@ -119,14 +126,6 @@ OC.L10N.register(
"Delete" : "Hapus",
"Allow users to mount external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal",
"Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Tidak bisa mendapatkan informasi dari server ownCloud: {code} {type}",
- "Access granted" : "Akses diberikan",
- "Global Credentials" : "Kredensial Global",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Catatan:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
- "External Storage" : "Penyimpanan Eksternal"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Tidak bisa mendapatkan informasi dari server ownCloud: {code} {type}"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json
index c091677c498..6367c48e434 100644
--- a/apps/files_external/l10n/id.json
+++ b/apps/files_external/l10n/id.json
@@ -23,6 +23,7 @@
"Save" : "Simpan",
"Empty response from the server" : "Tidak ada respon dari server",
"Couldn't access. Please logout and login to activate this mount point" : "Tidak dapat mengakses. Log keluar dan log masuk untuk mengaktifkan mount point ini",
+ "Couldn't get the information from the remote server: {code} {type}" : "Tidak dapat mengambil informasi dari server remote: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Tidak bisa mendapatkan informasi dari mount point eksternal: {type}",
"There was an error with message: " : "Terjadi kesalahan dengan pesan:",
"External mount error" : "Kesalahan mount eksternal",
@@ -62,6 +63,7 @@
"Identity endpoint URL" : "Identitas URL akhir",
"Rackspace" : "Rackspace",
"API key" : "Kunci API",
+ "Global credentials" : "Sandi Global",
"Log-in credentials, save in database" : "Kredensial masuk, simpan di basis data",
"Username and password" : "Nama pengguna dan sandi",
"Log-in credentials, save in session" : "Kredensial masuk, simpan dalam sesi",
@@ -86,6 +88,7 @@
"Google Drive" : "Google Drive",
"Local" : "Lokal",
"Location" : "lokasi",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
"SFTP with secret key login" : "SFTP dengan kunci rahasia masuk",
@@ -97,6 +100,10 @@
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Nama layanan",
"Request timeout (seconds)" : "Minta waktu habis (detik)",
+ "External storages" : "Penyimpanan Eksternal",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Dukungan cURL di PHP tidak diaktifkan atau terpasang. Mengaitkan %s tidak memungkinkan. Harap tanyakan administrator sistem anda untuk memasangnya.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Dukungan FTP di PHP tidak diaktifkan atau terpasang. Mengaitkan %s tidak memungkinkan. Harap tanya administrator sistem anda untuk memasangnya.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" tidak terpasang. Mengaitkan %s tidak memungkinkan. Harap tanya administrator sistem anda untuk memasangnya.",
"No external storage configured" : "Penyimpanan eksternal tidak dikonfigurasi",
"You can add external storages in the personal settings" : "Anda dapat menambahkan penyimpanan eksternal di pengaturan pribadi",
"Name" : "Nama",
@@ -117,14 +124,6 @@
"Delete" : "Hapus",
"Allow users to mount external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal",
"Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Tidak bisa mendapatkan informasi dari server ownCloud: {code} {type}",
- "Access granted" : "Akses diberikan",
- "Global Credentials" : "Kredensial Global",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Catatan:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.",
- "External Storage" : "Penyimpanan Eksternal"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Tidak bisa mendapatkan informasi dari server ownCloud: {code} {type}"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/is.js b/apps/files_external/l10n/is.js
index 2f69656a373..1ecf0fb8795 100644
--- a/apps/files_external/l10n/is.js
+++ b/apps/files_external/l10n/is.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"Save" : "Vista",
"Empty response from the server" : "Tómt svar frá þjóni móttekið",
"Couldn't access. Please logout and login to activate this mount point" : "Náði ekki aðgangi. Skráðu þig út og svo aftur inn til að virkja þennan tengipunkt",
+ "Couldn't get the information from the remote server: {code} {type}" : "Gat ekki lesið upplýsingar frá fjartengda þjóninum: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Gat ekki fengið lista yfir fjartengda tengipunkta: {type}",
"There was an error with message: " : "Það kom upp villa með skilaboðunum: ",
"External mount error" : "Villa við tengingu í fjartengdu skráakerfi",
@@ -125,14 +126,6 @@ OC.L10N.register(
"Delete" : "Eyða",
"Allow users to mount external storage" : "Leyfa notendum að tengja ytri gagnageymslur í skráakerfi",
"Allow users to mount the following external storage" : "Leyfa notendum að tengja eftirfarandi ytri gagnageymslu í skráakerfi",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Gat ekki lesið upplýsingar frá ownCloud-þjóninum: {code} {type}",
- "Access granted" : "Aðgangur heimilaður",
- "Global Credentials" : "Víðvær innskráningarauðkenni",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Athugið:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við cURL í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við FTP í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> \"%s\" ekki uppsett. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.",
- "External Storage" : "Ytri gagnageymsla"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Gat ekki lesið upplýsingar frá ownCloud-þjóninum: {code} {type}"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/files_external/l10n/is.json b/apps/files_external/l10n/is.json
index b83e47d210a..76d65737747 100644
--- a/apps/files_external/l10n/is.json
+++ b/apps/files_external/l10n/is.json
@@ -23,6 +23,7 @@
"Save" : "Vista",
"Empty response from the server" : "Tómt svar frá þjóni móttekið",
"Couldn't access. Please logout and login to activate this mount point" : "Náði ekki aðgangi. Skráðu þig út og svo aftur inn til að virkja þennan tengipunkt",
+ "Couldn't get the information from the remote server: {code} {type}" : "Gat ekki lesið upplýsingar frá fjartengda þjóninum: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Gat ekki fengið lista yfir fjartengda tengipunkta: {type}",
"There was an error with message: " : "Það kom upp villa með skilaboðunum: ",
"External mount error" : "Villa við tengingu í fjartengdu skráakerfi",
@@ -123,14 +124,6 @@
"Delete" : "Eyða",
"Allow users to mount external storage" : "Leyfa notendum að tengja ytri gagnageymslur í skráakerfi",
"Allow users to mount the following external storage" : "Leyfa notendum að tengja eftirfarandi ytri gagnageymslu í skráakerfi",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Gat ekki lesið upplýsingar frá ownCloud-þjóninum: {code} {type}",
- "Access granted" : "Aðgangur heimilaður",
- "Global Credentials" : "Víðvær innskráningarauðkenni",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Athugið:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við cURL í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við FTP í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> \"%s\" ekki uppsett. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.",
- "External Storage" : "Ytri gagnageymsla"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Gat ekki lesið upplýsingar frá ownCloud-þjóninum: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js
index 1c4030b1749..a85786ab2dd 100644
--- a/apps/files_external/l10n/it.js
+++ b/apps/files_external/l10n/it.js
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "Elimina",
"Allow users to mount external storage" : "Consenti agli utenti di montare archiviazioni esterne",
"Allow users to mount the following external storage" : "Consenti agli utenti di montare la seguente archiviazione esterna",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossibile ottenere le informazioni dal server ownCloud: {code} {type}",
- "Access granted" : "Accesso accordato",
- "Global Credentials" : "Credenziali globali",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Nota:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
- "External Storage" : "Archiviazione esterna"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossibile ottenere le informazioni dal server ownCloud: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json
index 1b83578185f..d48ef3a2ff4 100644
--- a/apps/files_external/l10n/it.json
+++ b/apps/files_external/l10n/it.json
@@ -124,14 +124,6 @@
"Delete" : "Elimina",
"Allow users to mount external storage" : "Consenti agli utenti di montare archiviazioni esterne",
"Allow users to mount the following external storage" : "Consenti agli utenti di montare la seguente archiviazione esterna",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossibile ottenere le informazioni dal server ownCloud: {code} {type}",
- "Access granted" : "Accesso accordato",
- "Global Credentials" : "Credenziali globali",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Nota:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.",
- "External Storage" : "Archiviazione esterna"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossibile ottenere le informazioni dal server ownCloud: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js
index 54968d1236f..d9a8ae8517c 100644
--- a/apps/files_external/l10n/ja.js
+++ b/apps/files_external/l10n/ja.js
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "削除",
"Allow users to mount external storage" : "ユーザーに外部ストレージの接続を許可する",
"Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud サーバーから情報を取得出来ませんでした。: {code} {type}",
- "Access granted" : "アクセス権の付与",
- "Global Credentials" : "グローバル認証情報",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>注意:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにcURLのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにFTPのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> \"%s\" がインストールされていません。%sをマウントできません。このシステムの管理者にインストールをお願いしてください。",
- "External Storage" : "外部ストレージ"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud サーバーから情報を取得出来ませんでした。: {code} {type}"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json
index 1d8d6fe6531..1d93c69b1cf 100644
--- a/apps/files_external/l10n/ja.json
+++ b/apps/files_external/l10n/ja.json
@@ -124,14 +124,6 @@
"Delete" : "削除",
"Allow users to mount external storage" : "ユーザーに外部ストレージの接続を許可する",
"Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud サーバーから情報を取得出来ませんでした。: {code} {type}",
- "Access granted" : "アクセス権の付与",
- "Global Credentials" : "グローバル認証情報",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>注意:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにcURLのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにFTPのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> \"%s\" がインストールされていません。%sをマウントできません。このシステムの管理者にインストールをお願いしてください。",
- "External Storage" : "外部ストレージ"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud サーバーから情報を取得出来ませんでした。: {code} {type}"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/ko.js b/apps/files_external/l10n/ko.js
index 31dea1ea3cd..1afccee2657 100644
--- a/apps/files_external/l10n/ko.js
+++ b/apps/files_external/l10n/ko.js
@@ -120,14 +120,6 @@ OC.L10N.register(
"Delete" : "삭제",
"Allow users to mount external storage" : "사용자가 외부 저장소를 마운트하도록 허용",
"Allow users to mount the following external storage" : "사용자가 다음 외부 저장소를 마운트할 수 있도록 허용",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud 서버에서 정보를 가져올 수 없음: {code} {type}",
- "Access granted" : "접근 부여",
- "Global Credentials" : "글로벌 자격 증명",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>메모:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP cURL 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP FTP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> \"%s\"이(가) 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
- "External Storage" : "외부 저장소"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud 서버에서 정보를 가져올 수 없음: {code} {type}"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/ko.json b/apps/files_external/l10n/ko.json
index c9e9be6e6cc..cbd6e72b429 100644
--- a/apps/files_external/l10n/ko.json
+++ b/apps/files_external/l10n/ko.json
@@ -118,14 +118,6 @@
"Delete" : "삭제",
"Allow users to mount external storage" : "사용자가 외부 저장소를 마운트하도록 허용",
"Allow users to mount the following external storage" : "사용자가 다음 외부 저장소를 마운트할 수 있도록 허용",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud 서버에서 정보를 가져올 수 없음: {code} {type}",
- "Access granted" : "접근 부여",
- "Global Credentials" : "글로벌 자격 증명",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>메모:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP cURL 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP FTP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> \"%s\"이(가) 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.",
- "External Storage" : "외부 저장소"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud 서버에서 정보를 가져올 수 없음: {code} {type}"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/nb_NO.js b/apps/files_external/l10n/nb_NO.js
index 0845186781d..ccf2388355e 100644
--- a/apps/files_external/l10n/nb_NO.js
+++ b/apps/files_external/l10n/nb_NO.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"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 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",
@@ -125,14 +126,6 @@ OC.L10N.register(
"Delete" : "Slett",
"Allow users to mount external storage" : "Tillat at brukere kobler opp eksterne lagre",
"Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Klarte ikke å hente informasjon fra Nextcloud tjeneren: {code} {type}",
- "Access granted" : "Tilgang gitt",
- "Global Credentials" : "Globale pålogginsdetaljer",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Merk:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å få dette installert.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.",
- "External Storage" : "Ekstern lagring"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Klarte ikke å hente informasjon fra Nextcloud tjeneren: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/nb_NO.json b/apps/files_external/l10n/nb_NO.json
index 01bf2eecf09..525590c5a76 100644
--- a/apps/files_external/l10n/nb_NO.json
+++ b/apps/files_external/l10n/nb_NO.json
@@ -23,6 +23,7 @@
"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 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",
@@ -123,14 +124,6 @@
"Delete" : "Slett",
"Allow users to mount external storage" : "Tillat at brukere kobler opp eksterne lagre",
"Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Klarte ikke å hente informasjon fra Nextcloud tjeneren: {code} {type}",
- "Access granted" : "Tilgang gitt",
- "Global Credentials" : "Globale pålogginsdetaljer",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Merk:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å få dette installert.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.",
- "External Storage" : "Ekstern lagring"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Klarte ikke å hente informasjon fra Nextcloud tjeneren: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js
index 9f80c381383..3b1839bb4fb 100644
--- a/apps/files_external/l10n/nl.js
+++ b/apps/files_external/l10n/nl.js
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "Verwijder",
"Allow users to mount external storage" : "Sta gebruikers toe om een externe opslag aan te koppelen",
"Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}",
- "Access granted" : "Toegang verleend",
- "Global Credentials" : "Algemene inloggegevens",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Let op:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je systeembeheerder dit te installeren.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder dit te installeren.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.",
- "External Storage" : "Externe opslag"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json
index 0d81e726c9f..5ffd6fcd4e3 100644
--- a/apps/files_external/l10n/nl.json
+++ b/apps/files_external/l10n/nl.json
@@ -124,14 +124,6 @@
"Delete" : "Verwijder",
"Allow users to mount external storage" : "Sta gebruikers toe om een externe opslag aan te koppelen",
"Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}",
- "Access granted" : "Toegang verleend",
- "Global Credentials" : "Algemene inloggegevens",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Let op:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je systeembeheerder dit te installeren.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder dit te installeren.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.",
- "External Storage" : "Externe opslag"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/pl.js b/apps/files_external/l10n/pl.js
index c9d85abf869..1b25fa1aec8 100644
--- a/apps/files_external/l10n/pl.js
+++ b/apps/files_external/l10n/pl.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"Save" : "Zapisz",
"Empty response from the server" : "Puste odpowiedzi z serwera",
"Couldn't access. Please logout and login to activate this mount point" : "Nie można uzyskać dostępu. Należy wylogować się i ponownie zalogować się, aby włączyć ten punkt montowania",
+ "Couldn't get the information from the remote server: {code} {type}" : "Nie można otrzymać informacji od zdalnego serwera: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Nie udało się uzyskać listy zewnętrznych punktów montowania: {type}",
"There was an error with message: " : "Wystąpił błąd o treści:",
"External mount error" : "Błąd przy montowaniu zewnętrznym",
@@ -43,6 +44,8 @@ OC.L10N.register(
"Objectstore forbidden" : "Zabroniony obiekt sklepu",
"Invalid storage backend \"%s\"" : "Nieprawidłowy magazyn zaplecza \"%s\"",
"Not permitted to use backend \"%s\"" : "Nie można używać powrotu \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "Nie można używać mechanizmu uwierzytelnienia \"%s\"",
+ "Insufficient data: %s" : "Niewystarczające dane: %s",
"%s" : "%s",
"Access key" : "Klucz dostępu",
"Secret key" : "Sekretny klucz",
@@ -56,6 +59,7 @@ OC.L10N.register(
"Client secret" : "Hasło klienta",
"OpenStack" : "OpenStack",
"Tenant name" : "Nazwa dzierżawcy",
+ "Rackspace" : "Rackspace",
"API key" : "Klucz API",
"Global credentials" : "Globalne poświadczenia",
"Username and password" : "Nazwa użytkownika i hasło",
@@ -111,14 +115,6 @@ OC.L10N.register(
"Delete" : "Usuń",
"Allow users to mount external storage" : "Pozwól użytkownikom montować zewnętrzne zasoby dyskowe",
"Allow users to mount the following external storage" : "Pozwól użytkownikom montować następujące zewnętrzne zasoby dyskowe",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Nie udało się uzyskać informacje z serwera ownCloud: {code} {type}",
- "Access granted" : "Dostęp uzyskany",
- "Global Credentials" : "Globalne Poświadczenia",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Uwaga:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla cURL w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla FTP w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> \"%s\" nie jest zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
- "External Storage" : "Zewnętrzna zasoby dyskowe"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Nie udało się uzyskać informacje z serwera ownCloud: {code} {type}"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_external/l10n/pl.json b/apps/files_external/l10n/pl.json
index 8ff63cfb5a4..088a1235cff 100644
--- a/apps/files_external/l10n/pl.json
+++ b/apps/files_external/l10n/pl.json
@@ -23,6 +23,7 @@
"Save" : "Zapisz",
"Empty response from the server" : "Puste odpowiedzi z serwera",
"Couldn't access. Please logout and login to activate this mount point" : "Nie można uzyskać dostępu. Należy wylogować się i ponownie zalogować się, aby włączyć ten punkt montowania",
+ "Couldn't get the information from the remote server: {code} {type}" : "Nie można otrzymać informacji od zdalnego serwera: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Nie udało się uzyskać listy zewnętrznych punktów montowania: {type}",
"There was an error with message: " : "Wystąpił błąd o treści:",
"External mount error" : "Błąd przy montowaniu zewnętrznym",
@@ -41,6 +42,8 @@
"Objectstore forbidden" : "Zabroniony obiekt sklepu",
"Invalid storage backend \"%s\"" : "Nieprawidłowy magazyn zaplecza \"%s\"",
"Not permitted to use backend \"%s\"" : "Nie można używać powrotu \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "Nie można używać mechanizmu uwierzytelnienia \"%s\"",
+ "Insufficient data: %s" : "Niewystarczające dane: %s",
"%s" : "%s",
"Access key" : "Klucz dostępu",
"Secret key" : "Sekretny klucz",
@@ -54,6 +57,7 @@
"Client secret" : "Hasło klienta",
"OpenStack" : "OpenStack",
"Tenant name" : "Nazwa dzierżawcy",
+ "Rackspace" : "Rackspace",
"API key" : "Klucz API",
"Global credentials" : "Globalne poświadczenia",
"Username and password" : "Nazwa użytkownika i hasło",
@@ -109,14 +113,6 @@
"Delete" : "Usuń",
"Allow users to mount external storage" : "Pozwól użytkownikom montować zewnętrzne zasoby dyskowe",
"Allow users to mount the following external storage" : "Pozwól użytkownikom montować następujące zewnętrzne zasoby dyskowe",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Nie udało się uzyskać informacje z serwera ownCloud: {code} {type}",
- "Access granted" : "Dostęp uzyskany",
- "Global Credentials" : "Globalne Poświadczenia",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Uwaga:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla cURL w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla FTP w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> \"%s\" nie jest zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.",
- "External Storage" : "Zewnętrzna zasoby dyskowe"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Nie udało się uzyskać informacje z serwera ownCloud: {code} {type}"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js
index 4be5956e6e4..20bdc990fb2 100644
--- a/apps/files_external/l10n/pt_BR.js
+++ b/apps/files_external/l10n/pt_BR.js
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "Excluir",
"Allow users to mount external storage" : "Permitir que usuários montem armazenamento externo",
"Allow users to mount the following external storage" : "Permitir que usuários montem o seguinte armazenamento externo",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível obter as informações do servidor ownCloud: {code} {type}",
- "Access granted" : "Acesso concedido",
- "Global Credentials" : "Credenciais Globais",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Nota:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
- "External Storage" : "Armazenamento Externo"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível obter as informações do servidor ownCloud: {code} {type}"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json
index 57d0e200052..6edf2f4d27c 100644
--- a/apps/files_external/l10n/pt_BR.json
+++ b/apps/files_external/l10n/pt_BR.json
@@ -124,14 +124,6 @@
"Delete" : "Excluir",
"Allow users to mount external storage" : "Permitir que usuários montem armazenamento externo",
"Allow users to mount the following external storage" : "Permitir que usuários montem o seguinte armazenamento externo",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível obter as informações do servidor ownCloud: {code} {type}",
- "Access granted" : "Acesso concedido",
- "Global Credentials" : "Credenciais Globais",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Nota:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.",
- "External Storage" : "Armazenamento Externo"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível obter as informações do servidor ownCloud: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/pt_PT.js b/apps/files_external/l10n/pt_PT.js
index 94b1f54d159..77433e77acc 100644
--- a/apps/files_external/l10n/pt_PT.js
+++ b/apps/files_external/l10n/pt_PT.js
@@ -116,12 +116,6 @@ OC.L10N.register(
"Delete" : "Apagar",
"Allow users to mount external storage" : "Permitir que os utilizadores montem armazenamento externo",
"Allow users to mount the following external storage" : "Permitir que os utilizadores montem o seguinte armazenamento externo",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível recolher a informação do servidor ownCloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Nota:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O cliente\"%s\" não está instalado. Não é possível montar \"%s\" . Peça ao seu administrador para instalar.",
- "External Storage" : "Armazenamento Externo"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível recolher a informação do servidor ownCloud: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/pt_PT.json b/apps/files_external/l10n/pt_PT.json
index 2ee7375e851..3247ec7e4a5 100644
--- a/apps/files_external/l10n/pt_PT.json
+++ b/apps/files_external/l10n/pt_PT.json
@@ -114,12 +114,6 @@
"Delete" : "Apagar",
"Allow users to mount external storage" : "Permitir que os utilizadores montem armazenamento externo",
"Allow users to mount the following external storage" : "Permitir que os utilizadores montem o seguinte armazenamento externo",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível recolher a informação do servidor ownCloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Nota:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O cliente\"%s\" não está instalado. Não é possível montar \"%s\" . Peça ao seu administrador para instalar.",
- "External Storage" : "Armazenamento Externo"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível recolher a informação do servidor ownCloud: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js
index 46a1a8bc29d..dda60f2c30d 100644
--- a/apps/files_external/l10n/ru.js
+++ b/apps/files_external/l10n/ru.js
@@ -126,14 +126,6 @@ OC.L10N.register(
"Delete" : "Удалить",
"Allow users to mount external storage" : "Разрешить пользователями монтировать внешние накопители",
"Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Не удалось получить информацию от сервера Nextcloud: {code} {type}",
- "Access granted" : "Доступ предоставлен",
- "Global Credentials" : "Глобальные Учетные данные",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Примечание:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> \"%s\" не установлен. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
- "External Storage" : "Внешнее хранилище"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Не удалось получить информацию от сервера Nextcloud: {code} {type}"
},
"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_external/l10n/ru.json b/apps/files_external/l10n/ru.json
index a3d466f696d..de57054fced 100644
--- a/apps/files_external/l10n/ru.json
+++ b/apps/files_external/l10n/ru.json
@@ -124,14 +124,6 @@
"Delete" : "Удалить",
"Allow users to mount external storage" : "Разрешить пользователями монтировать внешние накопители",
"Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Не удалось получить информацию от сервера Nextcloud: {code} {type}",
- "Access granted" : "Доступ предоставлен",
- "Global Credentials" : "Глобальные Учетные данные",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Примечание:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> \"%s\" не установлен. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.",
- "External Storage" : "Внешнее хранилище"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Не удалось получить информацию от сервера Nextcloud: {code} {type}"
},"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_external/l10n/sl.js b/apps/files_external/l10n/sl.js
index b6d0c1e32bc..365b8c76524 100644
--- a/apps/files_external/l10n/sl.js
+++ b/apps/files_external/l10n/sl.js
@@ -119,13 +119,6 @@ OC.L10N.register(
"Delete" : "Izbriši",
"Allow users to mount external storage" : "Dovoli uporabnikom priklapljanje zunanje shrambe",
"Allow users to mount the following external storage" : "Dovoli uporabnikom priklapljanje navedenih zunanjih shramb.",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Ni mogoče pridobiti podrobnosti s strežnika ownCloud:{koda} {vrsta}",
- "Global Credentials" : "Globalne poverilnice",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Opomba:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
- "External Storage" : "Zunanja podatkovna shramba"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Ni mogoče pridobiti podrobnosti s strežnika ownCloud:{koda} {vrsta}"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/files_external/l10n/sl.json b/apps/files_external/l10n/sl.json
index a0a0a8b2be0..3d2e9729c67 100644
--- a/apps/files_external/l10n/sl.json
+++ b/apps/files_external/l10n/sl.json
@@ -117,13 +117,6 @@
"Delete" : "Izbriši",
"Allow users to mount external storage" : "Dovoli uporabnikom priklapljanje zunanje shrambe",
"Allow users to mount the following external storage" : "Dovoli uporabnikom priklapljanje navedenih zunanjih shramb.",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Ni mogoče pridobiti podrobnosti s strežnika ownCloud:{koda} {vrsta}",
- "Global Credentials" : "Globalne poverilnice",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Opomba:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.",
- "External Storage" : "Zunanja podatkovna shramba"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Ni mogoče pridobiti podrobnosti s strežnika ownCloud:{koda} {vrsta}"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/sq.js b/apps/files_external/l10n/sq.js
index 0bc3e4b9c95..f782c82c966 100644
--- a/apps/files_external/l10n/sq.js
+++ b/apps/files_external/l10n/sq.js
@@ -21,9 +21,11 @@ OC.L10N.register(
"Compatibility with Mac NFD encoding (slow)" : "Pëerputhshmëri me kodim Mac NFD (e ngadaltë)",
"Admin defined" : "Përcaktuar nga përgjegjësi",
"Saved" : "U ruajt",
+ "Saving..." : "Po ruhet …",
"Save" : "Ruaje",
- "Empty response from the server" : "Përgjigje e zbrazët prej shërbyesit",
+ "Empty response from the server" : "Përgjigje e zbrazët prej serverit",
"Couldn't access. Please logout and login to activate this mount point" : "S’fut dot. Ju lutemi, dilni dhe hyni që të aktivizohet kjo pikë montimi",
+ "Couldn't get the information from the remote server: {code} {type}" : "Nuk u morën dot të dhëna nga shërbyesi në largësi: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "S’u mor dot lista e pikave të jashtme të montimit: {type}",
"There was an error with message: " : "Pati një gabim me këtë mesazh:",
"External mount error" : "Gabim i jashtëm montimi",
@@ -63,8 +65,11 @@ OC.L10N.register(
"Identity endpoint URL" : "Identifiko pikëmbarimin URL",
"Rackspace" : "Rackspace",
"API key" : "Kyç API",
+ "Global credentials" : "Kredenciale globale",
+ "Log-in credentials, save in database" : "Kredencialet e identifikimit, ruaji në bazën e të dhënave",
"Username and password" : "Emër përdoruesi dhe fjalëkalim",
"Log-in credentials, save in session" : "Kredenciale hyrjesh, ruaji për sesion",
+ "User entered, store in database" : "Përdoruesi u identifikua, ruaj në bazë të dhënash",
"RSA public key" : "Kyç publik RSA ",
"Public key" : "Kyç publik",
"Amazon S3" : "Amazon S3",
@@ -85,6 +90,7 @@ OC.L10N.register(
"Google Drive" : "Google Drive",
"Local" : "Vendore",
"Location" : "Vendndodhje",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Rrënjë",
"SFTP with secret key login" : "SFTP me hyrje me kyç të fshehtë",
@@ -96,6 +102,10 @@ OC.L10N.register(
"OpenStack Object Storage" : "Depozitë OpenStack Object",
"Service name" : "Emër shërbimi",
"Request timeout (seconds)" : "Kohë skadimi kërkese (sekonda)",
+ "External storages" : "Kujtesë e jashtëme",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Mbështetja e cURL në PHP nuk është e instaluar ose e aktivizuar. Lidhja e %s nuk është e mundur. Ju lutemi kërkojini administratorin të sistemit tuaj që ta instaloj.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Mbështetja e FTP në PHP nuk është e aktivizuar ose instaluar.Lidhja e %s nuk është e mundur.Ju lutem kërkojini administratorit të sistemit tuaj që ta instalojë.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" nuk është instaluar.Montimi i %s nuk është i mundur.Ju lutem kërkojini administratorit të sistemit tuaj ta instalojë.",
"No external storage configured" : "Pa depozita të jashtme të formësuara",
"You can add external storages in the personal settings" : "Depozita të jashtme mund të shtoni që prej rregullimeve personale",
"Name" : "Emër",
@@ -116,12 +126,6 @@ OC.L10N.register(
"Delete" : "Fshije",
"Allow users to mount external storage" : "Lejoju përdoruesve të montojnë depozita të jashtme",
"Allow users to mount the following external storage" : "Lejoju përdoruesve të montojnë depozitën e jashtme vijuese",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "S’u morën dot të dhëna nga shërbyesi ownCloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Shënim:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i cURL-ve në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i FTP-së në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është instaluar \"%s\". Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.",
- "External Storage" : "Depozitë e Jashtme"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "S’u morën dot të dhëna nga shërbyesi ownCloud: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/sq.json b/apps/files_external/l10n/sq.json
index b572d9826bb..b7b518107fe 100644
--- a/apps/files_external/l10n/sq.json
+++ b/apps/files_external/l10n/sq.json
@@ -19,9 +19,11 @@
"Compatibility with Mac NFD encoding (slow)" : "Pëerputhshmëri me kodim Mac NFD (e ngadaltë)",
"Admin defined" : "Përcaktuar nga përgjegjësi",
"Saved" : "U ruajt",
+ "Saving..." : "Po ruhet …",
"Save" : "Ruaje",
- "Empty response from the server" : "Përgjigje e zbrazët prej shërbyesit",
+ "Empty response from the server" : "Përgjigje e zbrazët prej serverit",
"Couldn't access. Please logout and login to activate this mount point" : "S’fut dot. Ju lutemi, dilni dhe hyni që të aktivizohet kjo pikë montimi",
+ "Couldn't get the information from the remote server: {code} {type}" : "Nuk u morën dot të dhëna nga shërbyesi në largësi: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "S’u mor dot lista e pikave të jashtme të montimit: {type}",
"There was an error with message: " : "Pati një gabim me këtë mesazh:",
"External mount error" : "Gabim i jashtëm montimi",
@@ -61,8 +63,11 @@
"Identity endpoint URL" : "Identifiko pikëmbarimin URL",
"Rackspace" : "Rackspace",
"API key" : "Kyç API",
+ "Global credentials" : "Kredenciale globale",
+ "Log-in credentials, save in database" : "Kredencialet e identifikimit, ruaji në bazën e të dhënave",
"Username and password" : "Emër përdoruesi dhe fjalëkalim",
"Log-in credentials, save in session" : "Kredenciale hyrjesh, ruaji për sesion",
+ "User entered, store in database" : "Përdoruesi u identifikua, ruaj në bazë të dhënash",
"RSA public key" : "Kyç publik RSA ",
"Public key" : "Kyç publik",
"Amazon S3" : "Amazon S3",
@@ -83,6 +88,7 @@
"Google Drive" : "Google Drive",
"Local" : "Vendore",
"Location" : "Vendndodhje",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Rrënjë",
"SFTP with secret key login" : "SFTP me hyrje me kyç të fshehtë",
@@ -94,6 +100,10 @@
"OpenStack Object Storage" : "Depozitë OpenStack Object",
"Service name" : "Emër shërbimi",
"Request timeout (seconds)" : "Kohë skadimi kërkese (sekonda)",
+ "External storages" : "Kujtesë e jashtëme",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Mbështetja e cURL në PHP nuk është e instaluar ose e aktivizuar. Lidhja e %s nuk është e mundur. Ju lutemi kërkojini administratorin të sistemit tuaj që ta instaloj.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Mbështetja e FTP në PHP nuk është e aktivizuar ose instaluar.Lidhja e %s nuk është e mundur.Ju lutem kërkojini administratorit të sistemit tuaj që ta instalojë.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" nuk është instaluar.Montimi i %s nuk është i mundur.Ju lutem kërkojini administratorit të sistemit tuaj ta instalojë.",
"No external storage configured" : "Pa depozita të jashtme të formësuara",
"You can add external storages in the personal settings" : "Depozita të jashtme mund të shtoni që prej rregullimeve personale",
"Name" : "Emër",
@@ -114,12 +124,6 @@
"Delete" : "Fshije",
"Allow users to mount external storage" : "Lejoju përdoruesve të montojnë depozita të jashtme",
"Allow users to mount the following external storage" : "Lejoju përdoruesve të montojnë depozitën e jashtme vijuese",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "S’u morën dot të dhëna nga shërbyesi ownCloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Shënim:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i cURL-ve në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i FTP-së në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është instaluar \"%s\". Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.",
- "External Storage" : "Depozitë e Jashtme"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "S’u morën dot të dhëna nga shërbyesi ownCloud: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/sv.js b/apps/files_external/l10n/sv.js
index a66a22ae595..0f0ed79c9a6 100644
--- a/apps/files_external/l10n/sv.js
+++ b/apps/files_external/l10n/sv.js
@@ -2,30 +2,51 @@ OC.L10N.register(
"files_external",
{
"Fetching request tokens failed. Verify that your app key and secret are correct." : "Fel vid hämtning av åtkomst-token. Verifiera att din app-nyckel och hemlighet stämmer.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Kontroll av behörigheter misslyckades. Verifiera att ditt app-lösenord och hemlighet är korrekt.",
+ "Please provide a valid app key and secret." : "Vänligen ange en giltig applikationsnyckel och hemlig fras.",
"Step 1 failed. Exception: %s" : "Steg 1 flaerade. Undantag: %s",
"Step 2 failed. Exception: %s" : "Steg 2 falerade. Undantag: %s",
"External storage" : "Extern lagring",
- "Personal" : "Personligt",
+ "Dropbox App Configuration" : "Dropbox Konfiguration",
+ "Google Drive App Configuration" : "Google Drive Konfiguration",
+ "Personal" : "Privat",
"System" : "System",
"Grant access" : "Bevilja åtkomst",
+ "Error configuring OAuth1" : "Misslyckades konfigurera OAuth1",
+ "Error configuring OAuth2" : "Misslyckades konfigurera OAuth2",
"Generate keys" : "Generera nycklar",
"Error generating key pair" : "Fel vid generering av nyckelpar",
"All users. Type to select user or group." : "Alla användare. Skriv för att välja användare eller grupp.",
"(group)" : "(grupp)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitet med Mac NFD kodning (slö)",
"Admin defined" : "Admin definerad",
"Saved" : "Sparad",
+ "Saving..." : "Sparar...",
"Save" : "Spara",
"Empty response from the server" : "Tomt svar från servern",
+ "Couldn't access. Please logout and login to activate this mount point" : "Ingen åtkomst. Vänligen logga ut och in igen för att aktivera denna monteringspunkt.",
+ "Couldn't get the information from the remote server: {code} {type}" : "Kan ej läsa informationen från extern server: {code} {type} ",
"Couldn't get the list of external mount points: {type}" : "Kunde inte hämta listan för externa monteringspunkter: {type}",
"There was an error with message: " : "Det fanns ett fel med meddelande:",
"External mount error" : "Fel vid extern montering",
"external-storage" : "extern-lagring",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Kunde inte hitta listan med Windows nätverksdiskar: tomt svar från servern",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Några av de konfigurerade externa monteringspunkter är inte anslutna. Klicka på den röda rad(er) för mer information.",
+ "Please enter the credentials for the {mount} mount" : "Vänligen ange uppgifterna för {mount} montering",
"Username" : "Användarnamn",
"Password" : "Lösenord",
- "Credentials saved" : "Sparade referenser",
- "Credentials saving failed" : "Misslyckades med att spara referenser",
- "Credentials required" : "Referenser krävs",
+ "Credentials saved" : "Sparade uppgifter",
+ "Credentials saving failed" : "Misslyckades med att spara uppgifterna",
+ "Credentials required" : "Uppgifter krävs",
+ "Storage with id \"%i\" not found" : "Lagring med id \"%i\" kan ej hittas",
+ "Invalid backend or authentication mechanism class" : "Ogiltig backend eller autentiseringsmekanism-klass",
"Invalid mount point" : "Ogiltig monteringspunkt",
+ "Objectstore forbidden" : "Objekt förbjudet",
+ "Invalid storage backend \"%s\"" : "Ogiltig lagrings backend \"%s\"",
+ "Not permitted to use backend \"%s\"" : "Inte tillåtet att använda backend \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "Inte tillåtet att använda autentiseringsmekanism \"%s\"",
+ "Unsatisfied backend parameters" : "Otillfredsställda backend parametrar",
+ "Unsatisfied authentication mechanism parameters" : "Otillfredsställda autentiseringsmekanism parametrar",
"Insufficient data: %s" : "Otillräcklig data: %s",
"%s" : "%s",
"Storage with id \"%i\" is not user editable" : "Lagring med id \"%i\" är inte redigerbar av användare",
@@ -38,13 +59,19 @@ OC.L10N.register(
"App secret" : "App-hemlighet",
"OAuth2" : "OAuth2",
"Client ID" : "Klient ID",
- "Client secret" : "klient secret",
+ "Client secret" : "Klienthemlighet",
"OpenStack" : "OpenStack",
"Tenant name" : "Namn på arrendator",
+ "Identity endpoint URL" : "Identitet endpoint URL",
+ "Rackspace" : "Rackutrymme",
"API key" : "API-nyckel",
+ "Global credentials" : "Globala uppgifter",
+ "Log-in credentials, save in database" : "Inloggningsuppgifter sparade i databasen",
"Username and password" : "Användarnamn och lösenord",
"Log-in credentials, save in session" : "Inloggninguppgifter, spara i sessionen",
- "Public key" : "Publik nyckel",
+ "User entered, store in database" : "Användare lades till, lagras i databasen",
+ "RSA public key" : "RSA offentlig nyckel",
+ "Public key" : "Offentlig nyckel",
"Amazon S3" : "Amazon S3",
"Bucket" : "Bucket",
"Hostname" : "Värdnamn",
@@ -54,7 +81,7 @@ OC.L10N.register(
"Enable Path Style" : "Aktivera Path Style",
"WebDAV" : "WebDAV",
"URL" : "URL",
- "Remote subfolder" : "Fjärrmapp",
+ "Remote subfolder" : "Extern mapp",
"Secure https://" : "Säker https://",
"Dropbox" : "Dropbox",
"FTP" : "FTP",
@@ -63,7 +90,7 @@ OC.L10N.register(
"Google Drive" : "Google Drive",
"Local" : "Lokal",
"Location" : "Plats",
- "ownCloud" : "ownCloud",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
"SFTP with secret key login" : "SFTP-inloggning med hemlig nyckel",
@@ -74,10 +101,11 @@ OC.L10N.register(
"Username as share" : "Användarnamn till utdelning",
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Namn på tjänst",
- "<b>Note:</b> " : "<b> OBS: </ b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> cURL-stöd i PHP inte är aktiverat eller installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> FTP-stödet i PHP inte är aktiverat eller installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> \"%s\" är inte installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
+ "Request timeout (seconds)" : "Sekunder för anslutningsförsök",
+ "External storages" : "Extern Lagring",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL-stöd i PHP är inte aktiverat eller har inte installerats. Montering av %s är inte möjlig. Be din systemadministratör om installation.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP-stöd i PHP är inte aktiverat eller har inte installerats. Montering av %s är inte möjlig. Be din systemadministratör om installation.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" är inte installerad. Montering av %s är inte möjlig. Be din systemadministratör om installation.",
"No external storage configured" : "Ingen extern lagring konfigurerad",
"You can add external storages in the personal settings" : "Du kan lägga till externa lagringar i de personliga inställningarna",
"Name" : "Namn",
@@ -88,7 +116,7 @@ OC.L10N.register(
"Enable sharing" : "Aktivera delning",
"Check for changes" : "Sök efter ändringar",
"Never" : "Aldrig",
- "External Storage" : "Extern lagring",
+ "Once every direct access" : "En gång vid varje direktanslutning",
"Folder name" : "Mappnamn",
"Authentication" : "Autentisering",
"Configuration" : "Konfiguration",
@@ -97,6 +125,7 @@ OC.L10N.register(
"Advanced settings" : "Avancerade inställningar",
"Delete" : "Radera",
"Allow users to mount external storage" : "Tillåt användare att montera extern lagring",
- "Allow users to mount the following external storage" : "Tillåt användare att montera följande extern lagring"
+ "Allow users to mount the following external storage" : "Tillåt användare att montera följande extern lagring",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Kan ej ta emot information från NextCloud server: {code} {type}"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/sv.json b/apps/files_external/l10n/sv.json
index 1bfca8f1f50..f9693a98585 100644
--- a/apps/files_external/l10n/sv.json
+++ b/apps/files_external/l10n/sv.json
@@ -1,29 +1,50 @@
{ "translations": {
"Fetching request tokens failed. Verify that your app key and secret are correct." : "Fel vid hämtning av åtkomst-token. Verifiera att din app-nyckel och hemlighet stämmer.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Kontroll av behörigheter misslyckades. Verifiera att ditt app-lösenord och hemlighet är korrekt.",
+ "Please provide a valid app key and secret." : "Vänligen ange en giltig applikationsnyckel och hemlig fras.",
"Step 1 failed. Exception: %s" : "Steg 1 flaerade. Undantag: %s",
"Step 2 failed. Exception: %s" : "Steg 2 falerade. Undantag: %s",
"External storage" : "Extern lagring",
- "Personal" : "Personligt",
+ "Dropbox App Configuration" : "Dropbox Konfiguration",
+ "Google Drive App Configuration" : "Google Drive Konfiguration",
+ "Personal" : "Privat",
"System" : "System",
"Grant access" : "Bevilja åtkomst",
+ "Error configuring OAuth1" : "Misslyckades konfigurera OAuth1",
+ "Error configuring OAuth2" : "Misslyckades konfigurera OAuth2",
"Generate keys" : "Generera nycklar",
"Error generating key pair" : "Fel vid generering av nyckelpar",
"All users. Type to select user or group." : "Alla användare. Skriv för att välja användare eller grupp.",
"(group)" : "(grupp)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitet med Mac NFD kodning (slö)",
"Admin defined" : "Admin definerad",
"Saved" : "Sparad",
+ "Saving..." : "Sparar...",
"Save" : "Spara",
"Empty response from the server" : "Tomt svar från servern",
+ "Couldn't access. Please logout and login to activate this mount point" : "Ingen åtkomst. Vänligen logga ut och in igen för att aktivera denna monteringspunkt.",
+ "Couldn't get the information from the remote server: {code} {type}" : "Kan ej läsa informationen från extern server: {code} {type} ",
"Couldn't get the list of external mount points: {type}" : "Kunde inte hämta listan för externa monteringspunkter: {type}",
"There was an error with message: " : "Det fanns ett fel med meddelande:",
"External mount error" : "Fel vid extern montering",
"external-storage" : "extern-lagring",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Kunde inte hitta listan med Windows nätverksdiskar: tomt svar från servern",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Några av de konfigurerade externa monteringspunkter är inte anslutna. Klicka på den röda rad(er) för mer information.",
+ "Please enter the credentials for the {mount} mount" : "Vänligen ange uppgifterna för {mount} montering",
"Username" : "Användarnamn",
"Password" : "Lösenord",
- "Credentials saved" : "Sparade referenser",
- "Credentials saving failed" : "Misslyckades med att spara referenser",
- "Credentials required" : "Referenser krävs",
+ "Credentials saved" : "Sparade uppgifter",
+ "Credentials saving failed" : "Misslyckades med att spara uppgifterna",
+ "Credentials required" : "Uppgifter krävs",
+ "Storage with id \"%i\" not found" : "Lagring med id \"%i\" kan ej hittas",
+ "Invalid backend or authentication mechanism class" : "Ogiltig backend eller autentiseringsmekanism-klass",
"Invalid mount point" : "Ogiltig monteringspunkt",
+ "Objectstore forbidden" : "Objekt förbjudet",
+ "Invalid storage backend \"%s\"" : "Ogiltig lagrings backend \"%s\"",
+ "Not permitted to use backend \"%s\"" : "Inte tillåtet att använda backend \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "Inte tillåtet att använda autentiseringsmekanism \"%s\"",
+ "Unsatisfied backend parameters" : "Otillfredsställda backend parametrar",
+ "Unsatisfied authentication mechanism parameters" : "Otillfredsställda autentiseringsmekanism parametrar",
"Insufficient data: %s" : "Otillräcklig data: %s",
"%s" : "%s",
"Storage with id \"%i\" is not user editable" : "Lagring med id \"%i\" är inte redigerbar av användare",
@@ -36,13 +57,19 @@
"App secret" : "App-hemlighet",
"OAuth2" : "OAuth2",
"Client ID" : "Klient ID",
- "Client secret" : "klient secret",
+ "Client secret" : "Klienthemlighet",
"OpenStack" : "OpenStack",
"Tenant name" : "Namn på arrendator",
+ "Identity endpoint URL" : "Identitet endpoint URL",
+ "Rackspace" : "Rackutrymme",
"API key" : "API-nyckel",
+ "Global credentials" : "Globala uppgifter",
+ "Log-in credentials, save in database" : "Inloggningsuppgifter sparade i databasen",
"Username and password" : "Användarnamn och lösenord",
"Log-in credentials, save in session" : "Inloggninguppgifter, spara i sessionen",
- "Public key" : "Publik nyckel",
+ "User entered, store in database" : "Användare lades till, lagras i databasen",
+ "RSA public key" : "RSA offentlig nyckel",
+ "Public key" : "Offentlig nyckel",
"Amazon S3" : "Amazon S3",
"Bucket" : "Bucket",
"Hostname" : "Värdnamn",
@@ -52,7 +79,7 @@
"Enable Path Style" : "Aktivera Path Style",
"WebDAV" : "WebDAV",
"URL" : "URL",
- "Remote subfolder" : "Fjärrmapp",
+ "Remote subfolder" : "Extern mapp",
"Secure https://" : "Säker https://",
"Dropbox" : "Dropbox",
"FTP" : "FTP",
@@ -61,7 +88,7 @@
"Google Drive" : "Google Drive",
"Local" : "Lokal",
"Location" : "Plats",
- "ownCloud" : "ownCloud",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
"SFTP with secret key login" : "SFTP-inloggning med hemlig nyckel",
@@ -72,10 +99,11 @@
"Username as share" : "Användarnamn till utdelning",
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Namn på tjänst",
- "<b>Note:</b> " : "<b> OBS: </ b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> cURL-stöd i PHP inte är aktiverat eller installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> FTP-stödet i PHP inte är aktiverat eller installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b> OBS: </ b> \"%s\" är inte installerat. Montering av %s är inte möjlig. Be din systemadministratör att installera det.",
+ "Request timeout (seconds)" : "Sekunder för anslutningsförsök",
+ "External storages" : "Extern Lagring",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL-stöd i PHP är inte aktiverat eller har inte installerats. Montering av %s är inte möjlig. Be din systemadministratör om installation.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP-stöd i PHP är inte aktiverat eller har inte installerats. Montering av %s är inte möjlig. Be din systemadministratör om installation.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" är inte installerad. Montering av %s är inte möjlig. Be din systemadministratör om installation.",
"No external storage configured" : "Ingen extern lagring konfigurerad",
"You can add external storages in the personal settings" : "Du kan lägga till externa lagringar i de personliga inställningarna",
"Name" : "Namn",
@@ -86,7 +114,7 @@
"Enable sharing" : "Aktivera delning",
"Check for changes" : "Sök efter ändringar",
"Never" : "Aldrig",
- "External Storage" : "Extern lagring",
+ "Once every direct access" : "En gång vid varje direktanslutning",
"Folder name" : "Mappnamn",
"Authentication" : "Autentisering",
"Configuration" : "Konfiguration",
@@ -95,6 +123,7 @@
"Advanced settings" : "Avancerade inställningar",
"Delete" : "Radera",
"Allow users to mount external storage" : "Tillåt användare att montera extern lagring",
- "Allow users to mount the following external storage" : "Tillåt användare att montera följande extern lagring"
+ "Allow users to mount the following external storage" : "Tillåt användare att montera följande extern lagring",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Kan ej ta emot information från NextCloud server: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/th_TH.js b/apps/files_external/l10n/th_TH.js
index f0ddf33ba6c..171ae9bd7c1 100644
--- a/apps/files_external/l10n/th_TH.js
+++ b/apps/files_external/l10n/th_TH.js
@@ -113,12 +113,6 @@ OC.L10N.register(
"Delete" : "ลบ",
"Allow users to mount external storage" : "อนุญาตให้ผู้ใช้ติดตั้งการจัดเก็บข้อมูลภายนอก",
"Allow users to mount the following external storage" : "อนุญาตให้ผู้ใช้ติดตั้งจัดเก็บข้อมูลภายนอกต่อไปนี้",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "ไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ ownCloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>หมายเหตุ:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน cURL ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน FTP ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> %s ไม่ได้ติดตั้ง การติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน",
- "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ ownCloud: {code} {type}"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/th_TH.json b/apps/files_external/l10n/th_TH.json
index 44ec19a5844..a0f9a659a97 100644
--- a/apps/files_external/l10n/th_TH.json
+++ b/apps/files_external/l10n/th_TH.json
@@ -111,12 +111,6 @@
"Delete" : "ลบ",
"Allow users to mount external storage" : "อนุญาตให้ผู้ใช้ติดตั้งการจัดเก็บข้อมูลภายนอก",
"Allow users to mount the following external storage" : "อนุญาตให้ผู้ใช้ติดตั้งจัดเก็บข้อมูลภายนอกต่อไปนี้",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "ไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ ownCloud: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>หมายเหตุ:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน cURL ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน FTP ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> %s ไม่ได้ติดตั้ง การติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน",
- "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ ownCloud: {code} {type}"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js
index dd325f6052e..1c874d47b66 100644
--- a/apps/files_external/l10n/tr.js
+++ b/apps/files_external/l10n/tr.js
@@ -119,13 +119,6 @@ OC.L10N.register(
"Delete" : "Sil",
"Allow users to mount external storage" : "Kullanıcılara harici depolama bağlamalarına izin ver",
"Allow users to mount the following external storage" : "Kullanıcıların aşağıdaki harici depolamayı bağlamalarına izin ver",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud sunucusundan bilgi alınamadı: {code} {type}",
- "Global Credentials" : "Genel Kimlik Bilgileri",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Not:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
- "External Storage" : "Harici Depolama"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud sunucusundan bilgi alınamadı: {code} {type}"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json
index a3b39387fdf..4ea6e0f5391 100644
--- a/apps/files_external/l10n/tr.json
+++ b/apps/files_external/l10n/tr.json
@@ -117,13 +117,6 @@
"Delete" : "Sil",
"Allow users to mount external storage" : "Kullanıcılara harici depolama bağlamalarına izin ver",
"Allow users to mount the following external storage" : "Kullanıcıların aşağıdaki harici depolamayı bağlamalarına izin ver",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud sunucusundan bilgi alınamadı: {code} {type}",
- "Global Credentials" : "Genel Kimlik Bilgileri",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>Not:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.",
- "External Storage" : "Harici Depolama"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud sunucusundan bilgi alınamadı: {code} {type}"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/zh_CN.js b/apps/files_external/l10n/zh_CN.js
index fcbee03772f..d7913aa7284 100644
--- a/apps/files_external/l10n/zh_CN.js
+++ b/apps/files_external/l10n/zh_CN.js
@@ -1,32 +1,82 @@
OC.L10N.register(
"files_external",
{
- "Step 1 failed. Exception: %s" : "步骤 1 失败。异常:%s",
- "Step 2 failed. Exception: %s" : "步骤 2 失败。异常:%s",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "获取 request token 失败. 请验证您的 appkey 和密钥是否正确.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "获取 access token 失败. 请验证您的 appkey 和密钥是否正确.",
+ "Please provide a valid app key and secret." : "请提供有效的 appkey 和密钥.",
+ "Step 1 failed. Exception: %s" : "步骤 1 失败. 异常: %s",
+ "Step 2 failed. Exception: %s" : "步骤 2 失败. 异常: %s",
"External storage" : "外部存储",
+ "Dropbox App Configuration" : "Dropbox 配置",
+ "Google Drive App Configuration" : "Google Drive 配置",
"Personal" : "个人",
"System" : "系统",
"Grant access" : "授权",
+ "Error configuring OAuth1" : "OAuth1 配置错误",
+ "Error configuring OAuth2" : "OAuth2 配置错误",
+ "Generate keys" : "生成密钥",
+ "Error generating key pair" : "生成密钥对错误",
+ "All users. Type to select user or group." : "全部用户. 点击选择用户或分组.",
+ "(group)" : "(分组)",
+ "Compatibility with Mac NFD encoding (slow)" : "兼用 Mac NFD 编码 (慢)",
+ "Admin defined" : "管理员定义",
"Saved" : "已保存",
+ "Saving..." : "正在保存...",
+ "Save" : "保存",
+ "Empty response from the server" : "服务器响应为空",
+ "Couldn't access. Please logout and login to activate this mount point" : "无法连接. 请注销并重新登录以激活挂载点.",
+ "Couldn't get the information from the remote server: {code} {type}" : "无法从远程服务器获取信息: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "无法获取外部挂载点列表: {type}",
+ "There was an error with message: " : "错误信息: ",
"External mount error" : "外部挂载错误",
"external-storage" : "外部存储",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "无法获取 Windows 网络磁盘挂载点列表: 服务器响应为空",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "一些外部挂载点没有连接. 请检查标红的行以获取更多信息.",
+ "Please enter the credentials for the {mount} mount" : "请输入 {mount} 挂载点的凭据",
"Username" : "用户名",
"Password" : "密码",
- "Save" : "保存",
+ "Credentials saved" : "凭据已保存",
+ "Credentials saving failed" : "凭据保存失败",
+ "Credentials required" : "需要凭据",
+ "Storage with id \"%i\" not found" : "未找到 ID 为 \"%i\" 的存储",
+ "Invalid backend or authentication mechanism class" : "无效的后端或认证类型",
"Invalid mount point" : "无效的挂载点",
+ "Objectstore forbidden" : "对象存储禁止访问",
+ "Invalid storage backend \"%s\"" : "无效的存储后端 \"%s\"",
+ "Not permitted to use backend \"%s\"" : "不允许使用 \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "不允许使用认证方式 \"%s\"",
+ "Unsatisfied backend parameters" : "无法满足后端条件",
+ "Unsatisfied authentication mechanism parameters" : "无法满足认证类型条件",
+ "Insufficient data: %s" : "数据不足: %s",
"%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "无法编辑 ID 为 \"%i\" 的存储",
"Access key" : "Access key",
"Secret key" : "Secret key",
"Builtin" : "内置",
"None" : "无",
+ "OAuth1" : "OAuth1",
+ "App key" : "App key",
+ "App secret" : "App 密钥",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "Client ID",
+ "Client secret" : "客户端密钥",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "租户名称",
+ "Identity endpoint URL" : "身份识别 URL",
+ "Rackspace" : "Rackspace",
"API key" : "API密匙",
+ "Global credentials" : "全局凭据",
+ "Log-in credentials, save in database" : "登录凭据, 保存在数据库中",
"Username and password" : "用户名和密码",
+ "Log-in credentials, save in session" : "登录凭据, 存储在会话中",
+ "User entered, store in database" : "用户登录, 存储在数据库中",
"RSA public key" : "RSA 公钥",
"Public key" : "公钥",
"Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
"Hostname" : "主机名",
"Port" : "端口",
- "Region" : "地区",
+ "Region" : "区域",
"Enable SSL" : "启用 SSL",
"Enable Path Style" : "启用 Path Style",
"WebDAV" : "WebDAV",
@@ -40,20 +90,23 @@ OC.L10N.register(
"Google Drive" : "Google Drive",
"Local" : "本地",
"Location" : "地点",
- "ownCloud" : "ownCloud",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "根路径",
- "SFTP with secret key login" : "包含secret key的SFTP",
+ "SFTP with secret key login" : "包含 secret key 的SFTP",
"SMB / CIFS" : "SMB / CIFS",
"Share" : "共享",
"Domain" : "域名",
"SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登录信息",
+ "Username as share" : "以用户名作为共享名",
"OpenStack Object Storage" : "OpenStack 对象存储",
- "<b>Note:</b> " : "<b>注意:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHP 中的 cURL 支持未启用或未安装。对 %s 的挂载无法进行。请联系系统管理员进行安装。",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHP 中的 FTP 支持未启用或未安装。对 %s 的挂载无法进行。请联系系统管理员进行安装。",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b>“%s”尚未安装。对 %s 的挂载无法进行。请联系系统管理员进行安装。",
- "No external storage configured" : "未配置外部存储",
+ "Service name" : "服务名称",
+ "Request timeout (seconds)" : "请求超时时间 (秒)",
+ "External storages" : "外部存储",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装或启用 PHP 中的 cURL 支持. 无法挂载 %s. 请联系您的系统管理员安装.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装或启用 PHP 中的 FTP 支持. 无法挂载 %s. 请联系您的系统管理员安装.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装 \"%s\". 无法挂载 %s. 请联系您的系统管理员安装.",
+ "No external storage configured" : "没有配置外部存储",
"You can add external storages in the personal settings" : "您可以在个人设置中添加外部存储",
"Name" : "名称",
"Storage type" : "存储类型",
@@ -61,8 +114,9 @@ OC.L10N.register(
"Enable encryption" : "启用加密",
"Enable previews" : "启用预览",
"Enable sharing" : "启用分享",
+ "Check for changes" : "检查修改",
"Never" : "从不",
- "External Storage" : "外部存储",
+ "Once every direct access" : "每次访问时",
"Folder name" : "目录名称",
"Authentication" : "认证",
"Configuration" : "配置",
@@ -71,6 +125,7 @@ OC.L10N.register(
"Advanced settings" : "高级选项",
"Delete" : "删除",
"Allow users to mount external storage" : "允许用户挂载外部存储",
- "Allow users to mount the following external storage" : "允许用户挂载以下外部存储"
+ "Allow users to mount the following external storage" : "允许用户挂载以下外部存储",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "无法从 ownCloud 服务器获取信息: {code} {type}"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/zh_CN.json b/apps/files_external/l10n/zh_CN.json
index 286156dac52..5653c3fa615 100644
--- a/apps/files_external/l10n/zh_CN.json
+++ b/apps/files_external/l10n/zh_CN.json
@@ -1,30 +1,80 @@
{ "translations": {
- "Step 1 failed. Exception: %s" : "步骤 1 失败。异常:%s",
- "Step 2 failed. Exception: %s" : "步骤 2 失败。异常:%s",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "获取 request token 失败. 请验证您的 appkey 和密钥是否正确.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "获取 access token 失败. 请验证您的 appkey 和密钥是否正确.",
+ "Please provide a valid app key and secret." : "请提供有效的 appkey 和密钥.",
+ "Step 1 failed. Exception: %s" : "步骤 1 失败. 异常: %s",
+ "Step 2 failed. Exception: %s" : "步骤 2 失败. 异常: %s",
"External storage" : "外部存储",
+ "Dropbox App Configuration" : "Dropbox 配置",
+ "Google Drive App Configuration" : "Google Drive 配置",
"Personal" : "个人",
"System" : "系统",
"Grant access" : "授权",
+ "Error configuring OAuth1" : "OAuth1 配置错误",
+ "Error configuring OAuth2" : "OAuth2 配置错误",
+ "Generate keys" : "生成密钥",
+ "Error generating key pair" : "生成密钥对错误",
+ "All users. Type to select user or group." : "全部用户. 点击选择用户或分组.",
+ "(group)" : "(分组)",
+ "Compatibility with Mac NFD encoding (slow)" : "兼用 Mac NFD 编码 (慢)",
+ "Admin defined" : "管理员定义",
"Saved" : "已保存",
+ "Saving..." : "正在保存...",
+ "Save" : "保存",
+ "Empty response from the server" : "服务器响应为空",
+ "Couldn't access. Please logout and login to activate this mount point" : "无法连接. 请注销并重新登录以激活挂载点.",
+ "Couldn't get the information from the remote server: {code} {type}" : "无法从远程服务器获取信息: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "无法获取外部挂载点列表: {type}",
+ "There was an error with message: " : "错误信息: ",
"External mount error" : "外部挂载错误",
"external-storage" : "外部存储",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "无法获取 Windows 网络磁盘挂载点列表: 服务器响应为空",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "一些外部挂载点没有连接. 请检查标红的行以获取更多信息.",
+ "Please enter the credentials for the {mount} mount" : "请输入 {mount} 挂载点的凭据",
"Username" : "用户名",
"Password" : "密码",
- "Save" : "保存",
+ "Credentials saved" : "凭据已保存",
+ "Credentials saving failed" : "凭据保存失败",
+ "Credentials required" : "需要凭据",
+ "Storage with id \"%i\" not found" : "未找到 ID 为 \"%i\" 的存储",
+ "Invalid backend or authentication mechanism class" : "无效的后端或认证类型",
"Invalid mount point" : "无效的挂载点",
+ "Objectstore forbidden" : "对象存储禁止访问",
+ "Invalid storage backend \"%s\"" : "无效的存储后端 \"%s\"",
+ "Not permitted to use backend \"%s\"" : "不允许使用 \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "不允许使用认证方式 \"%s\"",
+ "Unsatisfied backend parameters" : "无法满足后端条件",
+ "Unsatisfied authentication mechanism parameters" : "无法满足认证类型条件",
+ "Insufficient data: %s" : "数据不足: %s",
"%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "无法编辑 ID 为 \"%i\" 的存储",
"Access key" : "Access key",
"Secret key" : "Secret key",
"Builtin" : "内置",
"None" : "无",
+ "OAuth1" : "OAuth1",
+ "App key" : "App key",
+ "App secret" : "App 密钥",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "Client ID",
+ "Client secret" : "客户端密钥",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "租户名称",
+ "Identity endpoint URL" : "身份识别 URL",
+ "Rackspace" : "Rackspace",
"API key" : "API密匙",
+ "Global credentials" : "全局凭据",
+ "Log-in credentials, save in database" : "登录凭据, 保存在数据库中",
"Username and password" : "用户名和密码",
+ "Log-in credentials, save in session" : "登录凭据, 存储在会话中",
+ "User entered, store in database" : "用户登录, 存储在数据库中",
"RSA public key" : "RSA 公钥",
"Public key" : "公钥",
"Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
"Hostname" : "主机名",
"Port" : "端口",
- "Region" : "地区",
+ "Region" : "区域",
"Enable SSL" : "启用 SSL",
"Enable Path Style" : "启用 Path Style",
"WebDAV" : "WebDAV",
@@ -38,20 +88,23 @@
"Google Drive" : "Google Drive",
"Local" : "本地",
"Location" : "地点",
- "ownCloud" : "ownCloud",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "根路径",
- "SFTP with secret key login" : "包含secret key的SFTP",
+ "SFTP with secret key login" : "包含 secret key 的SFTP",
"SMB / CIFS" : "SMB / CIFS",
"Share" : "共享",
"Domain" : "域名",
"SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登录信息",
+ "Username as share" : "以用户名作为共享名",
"OpenStack Object Storage" : "OpenStack 对象存储",
- "<b>Note:</b> " : "<b>注意:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHP 中的 cURL 支持未启用或未安装。对 %s 的挂载无法进行。请联系系统管理员进行安装。",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHP 中的 FTP 支持未启用或未安装。对 %s 的挂载无法进行。请联系系统管理员进行安装。",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b>“%s”尚未安装。对 %s 的挂载无法进行。请联系系统管理员进行安装。",
- "No external storage configured" : "未配置外部存储",
+ "Service name" : "服务名称",
+ "Request timeout (seconds)" : "请求超时时间 (秒)",
+ "External storages" : "外部存储",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装或启用 PHP 中的 cURL 支持. 无法挂载 %s. 请联系您的系统管理员安装.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装或启用 PHP 中的 FTP 支持. 无法挂载 %s. 请联系您的系统管理员安装.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装 \"%s\". 无法挂载 %s. 请联系您的系统管理员安装.",
+ "No external storage configured" : "没有配置外部存储",
"You can add external storages in the personal settings" : "您可以在个人设置中添加外部存储",
"Name" : "名称",
"Storage type" : "存储类型",
@@ -59,8 +112,9 @@
"Enable encryption" : "启用加密",
"Enable previews" : "启用预览",
"Enable sharing" : "启用分享",
+ "Check for changes" : "检查修改",
"Never" : "从不",
- "External Storage" : "外部存储",
+ "Once every direct access" : "每次访问时",
"Folder name" : "目录名称",
"Authentication" : "认证",
"Configuration" : "配置",
@@ -69,6 +123,7 @@
"Advanced settings" : "高级选项",
"Delete" : "删除",
"Allow users to mount external storage" : "允许用户挂载外部存储",
- "Allow users to mount the following external storage" : "允许用户挂载以下外部存储"
+ "Allow users to mount the following external storage" : "允许用户挂载以下外部存储",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "无法从 ownCloud 服务器获取信息: {code} {type}"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/zh_TW.js b/apps/files_external/l10n/zh_TW.js
index 89f072a865b..389910c38bd 100644
--- a/apps/files_external/l10n/zh_TW.js
+++ b/apps/files_external/l10n/zh_TW.js
@@ -104,12 +104,6 @@ OC.L10N.register(
"Delete" : "刪除",
"Allow users to mount external storage" : "允許使用者能自行掛載外部儲存",
"Allow users to mount the following external storage" : "允許使用者自行掛載以下的外部儲存",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "無法從ownCloud伺服器得到資訊: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>警告:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告:</b> PHP 並未啓用 Curl 的支援,因此無法掛載 %s 。請洽您的系統管理員將其安裝並啓用。",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>:PHP 並未啓用 FTP 的支援,因此無法掛載 %s,請洽您的系統管理員將其安裝並啓用。",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>並未安裝 \"%s\",因此無法掛載 %s。請洽您的系統管理員將其安裝並啓用。",
- "External Storage" : "外部儲存"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "無法從ownCloud伺服器得到資訊: {code} {type}"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/zh_TW.json b/apps/files_external/l10n/zh_TW.json
index 9f6a9351ac8..2f4b0db76d5 100644
--- a/apps/files_external/l10n/zh_TW.json
+++ b/apps/files_external/l10n/zh_TW.json
@@ -102,12 +102,6 @@
"Delete" : "刪除",
"Allow users to mount external storage" : "允許使用者能自行掛載外部儲存",
"Allow users to mount the following external storage" : "允許使用者自行掛載以下的外部儲存",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "無法從ownCloud伺服器得到資訊: {code} {type}",
- "ownCloud" : "ownCloud",
- "<b>Note:</b> " : "<b>警告:</b> ",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告:</b> PHP 並未啓用 Curl 的支援,因此無法掛載 %s 。請洽您的系統管理員將其安裝並啓用。",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>:PHP 並未啓用 FTP 的支援,因此無法掛載 %s,請洽您的系統管理員將其安裝並啓用。",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>並未安裝 \"%s\",因此無法掛載 %s。請洽您的系統管理員將其安裝並啓用。",
- "External Storage" : "外部儲存"
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "無法從ownCloud伺服器得到資訊: {code} {type}"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/lib/Command/Notify.php b/apps/files_external/lib/Command/Notify.php
index 913299b59b4..a55b16a45c4 100644
--- a/apps/files_external/lib/Command/Notify.php
+++ b/apps/files_external/lib/Command/Notify.php
@@ -27,7 +27,11 @@ use OC\Core\Command\Base;
use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException;
use OCA\Files_External\Lib\StorageConfig;
use OCA\Files_External\Service\GlobalStoragesService;
+use OCP\Files\Notify\IChange;
+use OCP\Files\Notify\INotifyHandler;
+use OCP\Files\Notify\IRenameChange;
use OCP\Files\Storage\INotifyStorage;
+use OCP\Files\Storage\IStorage;
use OCP\Files\StorageNotAvailableException;
use OCP\IDBConnection;
use Symfony\Component\Console\Input\InputArgument;
@@ -123,14 +127,16 @@ class Notify extends Base {
$verbose = $input->getOption('verbose');
$path = trim($input->getOption('path'), '/');
- $storage->listen($path, function ($type, $path, $renameTarget) use ($mount, $verbose, $output) {
+ $notifyHandler = $storage->notify($path);
+ $this->selfTest($storage, $notifyHandler, $verbose, $output);
+ $notifyHandler->listen(function (IChange $change) use ($mount, $verbose, $output) {
if ($verbose) {
- $this->logUpdate($type, $path, $renameTarget, $output);
+ $this->logUpdate($change, $output);
}
- if ($type == INotifyStorage::NOTIFY_RENAMED) {
- $this->markParentAsOutdated($mount->getId(), $renameTarget);
+ if ($change instanceof IRenameChange) {
+ $this->markParentAsOutdated($mount->getId(), $change->getTargetPath());
}
- $this->markParentAsOutdated($mount->getId(), $path);
+ $this->markParentAsOutdated($mount->getId(), $change->getPath());
});
}
@@ -147,8 +153,8 @@ class Notify extends Base {
$this->updateQuery->execute([$parent, $mountId]);
}
- private function logUpdate($type, $path, $renameTarget, OutputInterface $output) {
- switch ($type) {
+ private function logUpdate(IChange $change, OutputInterface $output) {
+ switch ($change->getType()) {
case INotifyStorage::NOTIFY_ADDED:
$text = 'added';
break;
@@ -165,11 +171,42 @@ class Notify extends Base {
return;
}
- $text .= ' ' . $path;
- if ($type === INotifyStorage::NOTIFY_RENAMED) {
- $text .= ' to ' . $renameTarget;
+ $text .= ' ' . $change->getPath();
+ if ($change instanceof IRenameChange) {
+ $text .= ' to ' . $change->getTargetPath();
}
$output->writeln($text);
}
+
+ private function selfTest(IStorage $storage, INotifyHandler $notifyHandler, $verbose, OutputInterface $output) {
+ usleep(100 * 1000); //give time for the notify to start
+ $storage->file_put_contents('/.nc_test_file.txt', 'test content');
+ $storage->mkdir('/.nc_test_folder');
+ $storage->file_put_contents('/.nc_test_folder/subfile.txt', 'test content');
+ $storage->unlink('/.nc_test_file.txt');
+ $storage->unlink('/.nc_test_folder/subfile.txt');
+ $storage->rmdir('/.nc_test_folder');
+ usleep(100 * 1000); //time for all changes to be processed
+
+ $foundRootChange = false;
+ $foundSubfolderChange = false;
+
+ $changes = $notifyHandler->getChanges();
+ foreach ($changes as $change) {
+ if ($change->getPath() === '/.nc_test_file.txt') {
+ $foundRootChange = true;
+ } else if ($change->getPath() === '/.nc_test_folder/subfile.txt') {
+ $foundSubfolderChange = true;
+ }
+ }
+
+ if ($foundRootChange && $foundSubfolderChange && $verbose) {
+ $output->writeln('<info>Self-test successful</info>');
+ } else if ($foundRootChange && !$foundSubfolderChange) {
+ $output->writeln('<error>Error while running self-test, change is subfolder not detected</error>');
+ } else if (!$foundRootChange) {
+ $output->writeln('<error>Error while running self-test, no changes detected</error>');
+ }
+ }
}
diff --git a/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php b/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php
index 2fa939764d7..30644206c26 100644
--- a/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php
+++ b/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php
@@ -1,4 +1,5 @@
<?php
+
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
@@ -23,61 +24,42 @@
namespace OCA\Files_External\Lib\Auth\Password;
-use \OCP\IUser;
-use \OCP\IL10N;
-use \OCA\Files_External\Lib\DefinitionParameter;
-use \OCA\Files_External\Lib\Auth\AuthMechanism;
-use \OCA\Files_External\Lib\StorageConfig;
-use \OCP\ISession;
-use \OCP\Security\ICrypto;
-use \OCP\Files\Storage;
-use \OCA\Files_External\Lib\SessionStorageWrapper;
-use \OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException;
+use OCA\Files_External\Lib\Auth\AuthMechanism;
+use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException;
+use OCA\Files_External\Lib\SessionStorageWrapper;
+use OCA\Files_External\Lib\StorageConfig;
+use OCP\Authentication\Exceptions\CredentialsUnavailableException;
+use OCP\Authentication\LoginCredentials\IStore as CredentialsStore;
+use OCP\Files\Storage;
+use OCP\IL10N;
+use OCP\IUser;
/**
* Username and password from login credentials, saved in session
*/
class SessionCredentials extends AuthMechanism {
- /** @var ISession */
- protected $session;
-
- /** @var ICrypto */
- protected $crypto;
+ /** @var CredentialsStore */
+ private $credentialsStore;
- public function __construct(IL10N $l, ISession $session, ICrypto $crypto) {
- $this->session = $session;
- $this->crypto = $crypto;
+ public function __construct(IL10N $l, CredentialsStore $credentialsStore) {
+ $this->credentialsStore = $credentialsStore;
- $this
- ->setIdentifier('password::sessioncredentials')
+ $this->setIdentifier('password::sessioncredentials')
->setScheme(self::SCHEME_PASSWORD)
->setText($l->t('Log-in credentials, save in session'))
- ->addParameters([
- ])
- ;
-
- \OCP\Util::connectHook('OC_User', 'post_login', $this, 'authenticate');
- }
-
- /**
- * Hook listener on post login
- *
- * @param array $params
- */
- public function authenticate(array $params) {
- $this->session->set('password::sessioncredentials/credentials', $this->crypto->encrypt(json_encode($params)));
+ ->addParameters([]);
}
public function manipulateStorageConfig(StorageConfig &$storage, IUser $user = null) {
- $encrypted = $this->session->get('password::sessioncredentials/credentials');
- if (!isset($encrypted)) {
+ try {
+ $credentials = $this->credentialsStore->getLoginCredentials();
+ } catch (CredentialsUnavailableException $e) {
throw new InsufficientDataForMeaningfulAnswerException('No session credentials saved');
}
- $credentials = json_decode($this->crypto->decrypt($encrypted), true);
- $storage->setBackendOption('user', $this->session->get('loginname'));
- $storage->setBackendOption('password', $credentials['password']);
+ $storage->setBackendOption('user', $credentials->getLoginName());
+ $storage->setBackendOption('password', $credentials->getPassword());
}
public function wrapStorage(Storage $storage) {
diff --git a/apps/files_external/lib/Lib/Notify/SMBNotifyHandler.php b/apps/files_external/lib/Lib/Notify/SMBNotifyHandler.php
new file mode 100644
index 00000000000..9ac74b32ad8
--- /dev/null
+++ b/apps/files_external/lib/Lib/Notify/SMBNotifyHandler.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @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\Files_External\Lib\Notify;
+
+use OC\Files\Notify\Change;
+use OC\Files\Notify\RenameChange;
+use OCP\Files\Notify\IChange;
+use OCP\Files\Notify\INotifyHandler;
+
+class SMBNotifyHandler implements INotifyHandler {
+ /**
+ * @var \Icewind\SMB\INotifyHandler
+ */
+ private $shareNotifyHandler;
+
+ /**
+ * @var string
+ */
+ private $root;
+
+ private $oldRenamePath = null;
+
+ /**
+ * SMBNotifyHandler constructor.
+ *
+ * @param \Icewind\SMB\INotifyHandler $shareNotifyHandler
+ * @param string $root
+ */
+ public function __construct(\Icewind\SMB\INotifyHandler $shareNotifyHandler, $root) {
+ $this->shareNotifyHandler = $shareNotifyHandler;
+ $this->root = $root;
+ }
+
+ private function relativePath($fullPath) {
+ if ($fullPath === $this->root) {
+ return '';
+ } else if (substr($fullPath, 0, strlen($this->root)) === $this->root) {
+ return substr($fullPath, strlen($this->root));
+ } else {
+ return null;
+ }
+ }
+
+ public function listen(callable $callback) {
+ $oldRenamePath = null;
+ $this->shareNotifyHandler->listen(function (\Icewind\SMB\Change $shareChange) use ($callback) {
+ $change = $this->mapChange($shareChange);
+ if (!is_null($change)) {
+ return $callback($change);
+ } else {
+ return true;
+ }
+ });
+ }
+
+ /**
+ * Get all changes detected since the start of the notify process or the last call to getChanges
+ *
+ * @return IChange[]
+ */
+ public function getChanges() {
+ $shareChanges = $this->shareNotifyHandler->getChanges();
+ $changes = [];
+ foreach ($shareChanges as $shareChange) {
+ $change = $this->mapChange($shareChange);
+ if ($change) {
+ $changes[] = $change;
+ }
+ }
+ return $changes;
+ }
+
+ /**
+ * Stop listening for changes
+ *
+ * Note that any pending changes will be discarded
+ */
+ public function stop() {
+ $this->shareNotifyHandler->stop();
+ }
+
+ /**
+ * @param \Icewind\SMB\Change $change
+ * @return IChange|null
+ */
+ private function mapChange(\Icewind\SMB\Change $change) {
+ $path = $this->relativePath($change->getPath());
+ if (is_null($path)) {
+ return null;
+ }
+ if ($change->getCode() === \Icewind\SMB\INotifyHandler::NOTIFY_RENAMED_OLD) {
+ $this->oldRenamePath = $path;
+ return null;
+ }
+ $type = $this->mapNotifyType($change->getCode());
+ if (is_null($type)) {
+ return null;
+ }
+ if ($type === IChange::RENAMED) {
+ if (!is_null($this->oldRenamePath)) {
+ $result = new RenameChange($type, $this->oldRenamePath, $path);
+ $this->oldRenamePath = null;
+ } else {
+ $result = null;
+ }
+ } else {
+ $result = new Change($type, $path);
+ }
+ return $result;
+ }
+
+ private function mapNotifyType($smbType) {
+ switch ($smbType) {
+ case \Icewind\SMB\INotifyHandler::NOTIFY_ADDED:
+ return IChange::ADDED;
+ case \Icewind\SMB\INotifyHandler::NOTIFY_REMOVED:
+ return IChange::REMOVED;
+ case \Icewind\SMB\INotifyHandler::NOTIFY_MODIFIED:
+ case \Icewind\SMB\INotifyHandler::NOTIFY_ADDED_STREAM:
+ case \Icewind\SMB\INotifyHandler::NOTIFY_MODIFIED_STREAM:
+ case \Icewind\SMB\INotifyHandler::NOTIFY_REMOVED_STREAM:
+ return IChange::MODIFIED;
+ case \Icewind\SMB\INotifyHandler::NOTIFY_RENAMED_NEW:
+ return IChange::RENAMED;
+ default:
+ return null;
+ }
+ }
+}
diff --git a/apps/files_external/lib/Lib/Storage/AmazonS3.php b/apps/files_external/lib/Lib/Storage/AmazonS3.php
index e6e26e3547a..9dab25f7197 100644
--- a/apps/files_external/lib/Lib/Storage/AmazonS3.php
+++ b/apps/files_external/lib/Lib/Storage/AmazonS3.php
@@ -42,6 +42,7 @@ require_once 'aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use OC\Files\ObjectStore\S3ConnectionTrait;
@@ -366,14 +367,15 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$ext = '';
}
$tmpFile = \OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
}
- self::$tmpFiles[$tmpFile] = $path;
- return fopen('close://' . $tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function() use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
return false;
}
@@ -514,15 +516,11 @@ class AmazonS3 extends \OC\Files\Storage\Common {
return $this->id;
}
- public function writeBack($tmpFile) {
- if (!isset(self::$tmpFiles[$tmpFile])) {
- return false;
- }
-
+ public function writeBack($tmpFile, $path) {
try {
$this->getConnection()->putObject(array(
'Bucket' => $this->bucket,
- 'Key' => $this->cleanKey(self::$tmpFiles[$tmpFile]),
+ 'Key' => $this->cleanKey($path),
'SourceFile' => $tmpFile,
'ContentType' => \OC::$server->getMimeTypeDetector()->detect($tmpFile),
'ContentLength' => filesize($tmpFile)
diff --git a/apps/files_external/lib/Lib/Storage/Dropbox.php b/apps/files_external/lib/Lib/Storage/Dropbox.php
index 45bc6cd0e98..d2ba1cca751 100644
--- a/apps/files_external/lib/Lib/Storage/Dropbox.php
+++ b/apps/files_external/lib/Lib/Storage/Dropbox.php
@@ -31,6 +31,7 @@
namespace OCA\Files_External\Lib\Storage;
use GuzzleHttp\Exception\RequestException;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use Icewind\Streams\RetryWrapper;
use OCP\Files\StorageNotAvailableException;
@@ -45,8 +46,6 @@ class Dropbox extends \OC\Files\Storage\Common {
private $metaData = array();
private $oauth;
- private static $tempFiles = array();
-
public function __construct($params) {
if (isset($params['configured']) && $params['configured'] == 'true'
&& isset($params['app_key'])
@@ -305,27 +304,26 @@ class Dropbox extends \OC\Files\Storage\Common {
$ext = '';
}
$tmpFile = \OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
}
- self::$tempFiles[$tmpFile] = $path;
- return fopen('close://'.$tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
return false;
}
- public function writeBack($tmpFile) {
- if (isset(self::$tempFiles[$tmpFile])) {
- $handle = fopen($tmpFile, 'r');
- try {
- $this->dropbox->putFile(self::$tempFiles[$tmpFile], $handle);
- unlink($tmpFile);
- $this->deleteMetaData(self::$tempFiles[$tmpFile]);
- } catch (\Exception $exception) {
- \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
- }
+ public function writeBack($tmpFile, $path) {
+ $handle = fopen($tmpFile, 'r');
+ try {
+ $this->dropbox->putFile($path, $handle);
+ unlink($tmpFile);
+ $this->deleteMetaData($path);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
}
}
diff --git a/apps/files_external/lib/Lib/Storage/FTP.php b/apps/files_external/lib/Lib/Storage/FTP.php
index 6f34416d111..22fe2090f30 100644
--- a/apps/files_external/lib/Lib/Storage/FTP.php
+++ b/apps/files_external/lib/Lib/Storage/FTP.php
@@ -33,6 +33,7 @@
namespace OCA\Files_External\Lib\Storage;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\RetryWrapper;
class FTP extends StreamWrapper{
@@ -127,21 +128,20 @@ class FTP extends StreamWrapper{
$ext='';
}
$tmpFile=\OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$this->getFile($path, $tmpFile);
}
- self::$tempFiles[$tmpFile]=$path;
- return fopen('close://'.$tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
return false;
}
- public function writeBack($tmpFile) {
- if (isset(self::$tempFiles[$tmpFile])) {
- $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
- unlink($tmpFile);
- }
+ public function writeBack($tmpFile, $path) {
+ $this->uploadFile($tmpFile, $path);
+ unlink($tmpFile);
}
/**
diff --git a/apps/files_external/lib/Lib/Storage/Google.php b/apps/files_external/lib/Lib/Storage/Google.php
index a3133cb4743..b22b0c29263 100644
--- a/apps/files_external/lib/Lib/Storage/Google.php
+++ b/apps/files_external/lib/Lib/Storage/Google.php
@@ -36,6 +36,7 @@
namespace OCA\Files_External\Lib\Storage;
use GuzzleHttp\Exception\RequestException;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use Icewind\Streams\RetryWrapper;
@@ -50,8 +51,6 @@ class Google extends \OC\Files\Storage\Common {
private $service;
private $driveFiles;
- private static $tempFiles = array();
-
// Google Doc mimetypes
const FOLDER = 'application/vnd.google-apps.folder';
const DOCUMENT = 'application/vnd.google-apps.document';
@@ -495,94 +494,91 @@ class Google extends \OC\Files\Storage\Common {
case 'c':
case 'c+':
$tmpFile = \OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'rb');
file_put_contents($tmpFile, $source);
}
- self::$tempFiles[$tmpFile] = $path;
- return fopen('close://'.$tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
}
- public function writeBack($tmpFile) {
- if (isset(self::$tempFiles[$tmpFile])) {
- $path = self::$tempFiles[$tmpFile];
- $parentFolder = $this->getDriveFile(dirname($path));
- if ($parentFolder) {
- $mimetype = \OC::$server->getMimeTypeDetector()->detect($tmpFile);
- $params = array(
- 'mimeType' => $mimetype,
- 'uploadType' => 'media'
- );
- $result = false;
+ public function writeBack($tmpFile, $path) {
+ $parentFolder = $this->getDriveFile(dirname($path));
+ if ($parentFolder) {
+ $mimetype = \OC::$server->getMimeTypeDetector()->detect($tmpFile);
+ $params = array(
+ 'mimeType' => $mimetype,
+ 'uploadType' => 'media'
+ );
+ $result = false;
+
+ $chunkSizeBytes = 10 * 1024 * 1024;
+
+ $useChunking = false;
+ $size = filesize($tmpFile);
+ if ($size > $chunkSizeBytes) {
+ $useChunking = true;
+ } else {
+ $params['data'] = file_get_contents($tmpFile);
+ }
- $chunkSizeBytes = 10 * 1024 * 1024;
+ if ($this->file_exists($path)) {
+ $file = $this->getDriveFile($path);
+ $this->client->setDefer($useChunking);
+ $request = $this->service->files->update($file->getId(), $file, $params);
+ } else {
+ $file = new \Google_Service_Drive_DriveFile();
+ $file->setTitle(basename($path));
+ $file->setMimeType($mimetype);
+ $parent = new \Google_Service_Drive_ParentReference();
+ $parent->setId($parentFolder->getId());
+ $file->setParents(array($parent));
+ $this->client->setDefer($useChunking);
+ $request = $this->service->files->insert($file, $params);
+ }
- $useChunking = false;
- $size = filesize($tmpFile);
- if ($size > $chunkSizeBytes) {
- $useChunking = true;
- } else {
- $params['data'] = file_get_contents($tmpFile);
+ if ($useChunking) {
+ // Create a media file upload to represent our upload process.
+ $media = new \Google_Http_MediaFileUpload(
+ $this->client,
+ $request,
+ 'text/plain',
+ null,
+ true,
+ $chunkSizeBytes
+ );
+ $media->setFileSize($size);
+
+ // Upload the various chunks. $status will be false until the process is
+ // complete.
+ $status = false;
+ $handle = fopen($tmpFile, 'rb');
+ while (!$status && !feof($handle)) {
+ $chunk = fread($handle, $chunkSizeBytes);
+ $status = $media->nextChunk($chunk);
}
- if ($this->file_exists($path)) {
- $file = $this->getDriveFile($path);
- $this->client->setDefer($useChunking);
- $request = $this->service->files->update($file->getId(), $file, $params);
- } else {
- $file = new \Google_Service_Drive_DriveFile();
- $file->setTitle(basename($path));
- $file->setMimeType($mimetype);
- $parent = new \Google_Service_Drive_ParentReference();
- $parent->setId($parentFolder->getId());
- $file->setParents(array($parent));
- $this->client->setDefer($useChunking);
- $request = $this->service->files->insert($file, $params);
+ // The final value of $status will be the data from the API for the object
+ // that has been uploaded.
+ $result = false;
+ if ($status !== false) {
+ $result = $status;
}
- if ($useChunking) {
- // Create a media file upload to represent our upload process.
- $media = new \Google_Http_MediaFileUpload(
- $this->client,
- $request,
- 'text/plain',
- null,
- true,
- $chunkSizeBytes
- );
- $media->setFileSize($size);
-
- // Upload the various chunks. $status will be false until the process is
- // complete.
- $status = false;
- $handle = fopen($tmpFile, 'rb');
- while (!$status && !feof($handle)) {
- $chunk = fread($handle, $chunkSizeBytes);
- $status = $media->nextChunk($chunk);
- }
-
- // The final value of $status will be the data from the API for the object
- // that has been uploaded.
- $result = false;
- if ($status !== false) {
- $result = $status;
- }
-
- fclose($handle);
- } else {
- $result = $request;
- }
+ fclose($handle);
+ } else {
+ $result = $request;
+ }
- // Reset to the client to execute requests immediately in the future.
- $this->client->setDefer(false);
+ // Reset to the client to execute requests immediately in the future.
+ $this->client->setDefer(false);
- if ($result) {
- $this->setDriveFile($path, $result);
- }
+ if ($result) {
+ $this->setDriveFile($path, $result);
}
- unlink($tmpFile);
}
}
diff --git a/apps/files_external/lib/Lib/Storage/SFTP.php b/apps/files_external/lib/Lib/Storage/SFTP.php
index 9d20742fcb0..1d9affa8d68 100644
--- a/apps/files_external/lib/Lib/Storage/SFTP.php
+++ b/apps/files_external/lib/Lib/Storage/SFTP.php
@@ -207,7 +207,7 @@ class SFTP extends \OC\Files\Storage\Common {
try {
$storage_view = \OCP\Files::getStorage('files_external');
if ($storage_view) {
- return \OC::$server->getConfig()->getSystemValue('datadirectory') .
+ return \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') .
$storage_view->getAbsolutePath('') .
'ssh_hostKeys';
}
diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php
index 28445dd2f61..690f8e2a334 100644
--- a/apps/files_external/lib/Lib/Storage/SMB.php
+++ b/apps/files_external/lib/Lib/Storage/SMB.php
@@ -31,10 +31,13 @@
namespace OCA\Files_External\Lib\Storage;
+use Icewind\SMB\Change;
use Icewind\SMB\Exception\ConnectException;
use Icewind\SMB\Exception\Exception;
use Icewind\SMB\Exception\ForbiddenException;
use Icewind\SMB\Exception\NotFoundException;
+use Icewind\SMB\INotifyHandler;
+use Icewind\SMB\IFileInfo;
use Icewind\SMB\IShare;
use Icewind\SMB\NativeServer;
use Icewind\SMB\Server;
@@ -43,6 +46,9 @@ use Icewind\Streams\IteratorDirectory;
use OC\Cache\CappedMemoryCache;
use OC\Files\Filesystem;
use OC\Files\Storage\Common;
+use OCA\Files_External\Lib\Notify\SMBNotifyHandler;
+use OCP\Files\Notify\IChange;
+use OCP\Files\Notify\IRenameChange;
use OCP\Files\Storage\INotifyStorage;
use OCP\Files\StorageNotAvailableException;
@@ -146,7 +152,9 @@ class SMB extends Common implements INotifyStorage {
foreach ($files as $file) {
$this->statCache[$path . '/' . $file->getName()] = $file;
}
- return $files;
+ return array_filter($files, function (IFileInfo $file) {
+ return !$file->isHidden();
+ });
} catch (ConnectException $e) {
throw new StorageNotAvailableException($e->getMessage(), $e->getCode(), $e);
}
@@ -168,7 +176,46 @@ class SMB extends Common implements INotifyStorage {
* @return array
*/
public function stat($path) {
- return $this->formatInfo($this->getFileInfo($path));
+ $result = $this->formatInfo($this->getFileInfo($path));
+ if ($this->remoteIsShare() && $this->isRootDir($path)) {
+ $result['mtime'] = $this->shareMTime();
+ }
+ return $result;
+ }
+
+ /**
+ * get the best guess for the modification time of the share
+ *
+ * @return int
+ */
+ private function shareMTime() {
+ $highestMTime = 0;
+ $files = $this->share->dir($this->root);
+ foreach ($files as $fileInfo) {
+ if ($fileInfo->getMTime() > $highestMTime) {
+ $highestMTime = $fileInfo->getMTime();
+ }
+ }
+ return $highestMTime;
+ }
+
+ /**
+ * Check if the path is our root dir (not the smb one)
+ *
+ * @param string $path the path
+ * @return bool
+ */
+ private function isRootDir($path) {
+ return $path === '' || $path === '/' || $path === '.';
+ }
+
+ /**
+ * Check if our root points to a smb share
+ *
+ * @return bool true if our root points to a share false otherwise
+ */
+ private function remoteIsShare() {
+ return $this->share->getName() && (!$this->root || $this->root === '/');
}
/**
@@ -442,46 +489,18 @@ class SMB extends Common implements INotifyStorage {
}
public function listen($path, callable $callback) {
- $fullPath = $this->buildPath($path);
- $oldRenamePath = null;
- $this->share->notify($fullPath, function ($smbType, $fullPath) use (&$oldRenamePath, $callback) {
- $path = $this->relativePath($fullPath);
- if (is_null($path)) {
- return true;
- }
- if ($smbType === IShare::NOTIFY_RENAMED_OLD) {
- $oldRenamePath = $path;
- return true;
- }
- $type = $this->mapNotifyType($smbType);
- if (is_null($type)) {
- return true;
- }
- if ($type === INotifyStorage::NOTIFY_RENAMED && !is_null($oldRenamePath)) {
- $result = $callback($type, $path, $oldRenamePath);
- $oldRenamePath = null;
+ $this->notify($path)->listen(function (IChange $change) use ($callback) {
+ if ($change instanceof IRenameChange) {
+ return $callback($change->getType(), $change->getPath(), $change->getTargetPath());
} else {
- $result = $callback($type, $path);
+ return $callback($change->getType(), $change->getPath());
}
- return $result;
});
}
- private function mapNotifyType($smbType) {
- switch ($smbType) {
- case IShare::NOTIFY_ADDED:
- return INotifyStorage::NOTIFY_ADDED;
- case IShare::NOTIFY_REMOVED:
- return INotifyStorage::NOTIFY_REMOVED;
- case IShare::NOTIFY_MODIFIED:
- case IShare::NOTIFY_ADDED_STREAM:
- case IShare::NOTIFY_MODIFIED_STREAM:
- case IShare::NOTIFY_REMOVED_STREAM:
- return INotifyStorage::NOTIFY_MODIFIED;
- case IShare::NOTIFY_RENAMED_NEW:
- return INotifyStorage::NOTIFY_RENAMED;
- default:
- return null;
- }
+ public function notify($path) {
+ $path = '/' . ltrim($path, '/');
+ $shareNotifyHandler = $this->share->notify($this->buildPath($path));
+ return new SMBNotifyHandler($shareNotifyHandler, $this->root);
}
}
diff --git a/apps/files_external/lib/Lib/Storage/Swift.php b/apps/files_external/lib/Lib/Storage/Swift.php
index ba0b4898e2e..5fec278ef3d 100644
--- a/apps/files_external/lib/Lib/Storage/Swift.php
+++ b/apps/files_external/lib/Lib/Storage/Swift.php
@@ -37,6 +37,7 @@ namespace OCA\Files_External\Lib\Storage;
use Guzzle\Http\Url;
use Guzzle\Http\Exception\ClientErrorResponseException;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use OpenCloud;
use OpenCloud\Common\Exceptions;
@@ -410,7 +411,6 @@ class Swift extends \OC\Files\Storage\Common {
$ext = '';
}
$tmpFile = \OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
// Fetch existing file if required
if ($mode[0] !== 'w' && $this->file_exists($path)) {
if ($mode[0] === 'x') {
@@ -424,9 +424,10 @@ class Swift extends \OC\Files\Storage\Common {
fseek($tmpFile, 0, SEEK_END);
}
}
- self::$tmpFiles[$tmpFile] = $path;
-
- return fopen('close://' . $tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
}
@@ -615,12 +616,9 @@ class Swift extends \OC\Files\Storage\Common {
return $this->container;
}
- public function writeBack($tmpFile) {
- if (!isset(self::$tmpFiles[$tmpFile])) {
- return false;
- }
+ public function writeBack($tmpFile, $path) {
$fileData = fopen($tmpFile, 'r');
- $this->getContainer()->uploadObject(self::$tmpFiles[$tmpFile], $fileData);
+ $this->getContainer()->uploadObject($path, $fileData);
// invalidate target object to force repopulation on fetch
$this->objectCache->remove(self::$tmpFiles[$tmpFile]);
unlink($tmpFile);
diff --git a/apps/files_external/lib/Settings/Section.php b/apps/files_external/lib/Settings/Section.php
index 4b4bac93d29..4829bb60d39 100644
--- a/apps/files_external/lib/Settings/Section.php
+++ b/apps/files_external/lib/Settings/Section.php
@@ -24,13 +24,21 @@
namespace OCA\Files_External\Settings;
use OCP\IL10N;
-use OCP\Settings\ISection;
+use OCP\IURLGenerator;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $url;
- public function __construct(IL10N $l) {
+ /**
+ * @param IURLGenerator $url
+ * @param IL10N $l
+ */
+ public function __construct(IURLGenerator $url, IL10N $l) {
+ $this->url = $url;
$this->l = $l;
}
@@ -64,4 +72,11 @@ class Section implements ISection {
public function getPriority() {
return 10;
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return $this->url->imagePath('files_external', 'app-dark.svg');
+ }
}
diff --git a/apps/files_external/tests/AmazonS3MigrationTest.php b/apps/files_external/tests/AmazonS3MigrationTest.php
deleted file mode 100644
index 2788ef6cbb4..00000000000
--- a/apps/files_external/tests/AmazonS3MigrationTest.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @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/>
- *
- */
-
-
-namespace OCA\Files_External\Tests;
-
-use OCA\Files_External\Lib\Storage\AmazonS3;
-
-/**
- * Class AmazonS3Migration
- *
- * @group DB
- *
- * @package OCA\Files_External\Tests
- */
-class AmazonS3MigrationTest extends \Test\TestCase {
-
- /**
- * @var \OC\Files\Storage\Storage instance
- */
- protected $instance;
-
- /** @var array */
- protected $params;
-
- /** @var string */
- protected $oldId;
-
- /** @var string */
- protected $newId;
-
- protected function setUp() {
- parent::setUp();
-
- $uuid = $this->getUniqueID();
-
- $this->params['key'] = 'key'.$uuid;
- $this->params['secret'] = 'secret'.$uuid;
- $this->params['bucket'] = 'bucket'.$uuid;
-
- $this->oldId = 'amazon::' . $this->params['key'] . md5($this->params['secret']);
- $this->newId = 'amazon::' . $this->params['bucket'];
- }
-
- protected function tearDown() {
- $this->deleteStorage($this->oldId);
- $this->deleteStorage($this->newId);
-
- parent::tearDown();
- }
-
- public function testUpdateLegacyOnlyId () {
- // add storage ids
- $oldCache = new \OC\Files\Cache\Cache($this->oldId);
-
- // add file to old cache
- $fileId = $oldCache->put('foobar', array('size' => 0, 'mtime' => time(), 'mimetype' => 'httpd/directory'));
-
- try {
- $this->instance = new AmazonS3($this->params);
- } catch (\Exception $e) {
- //ignore
- }
- $storages = $this->getStorages();
-
- $this->assertTrue(isset($storages[$this->newId]));
- $this->assertFalse(isset($storages[$this->oldId]));
- $this->assertSame((int)$oldCache->getNumericStorageId(), (int)$storages[$this->newId]);
-
- list($storageId, $path) = \OC\Files\Cache\Cache::getById($fileId);
-
- $this->assertSame($this->newId, $storageId);
- $this->assertSame('foobar', $path);
- }
-
- public function testUpdateLegacyAndNewId () {
- // add storage ids
-
- $oldCache = new \OC\Files\Cache\Cache($this->oldId);
- new \OC\Files\Cache\Cache($this->newId);
-
- // add file to old cache
- $fileId = $oldCache->put('/', array('size' => 0, 'mtime' => time(), 'mimetype' => 'httpd/directory'));
-
- try {
- $this->instance = new AmazonS3($this->params);
- } catch (\Exception $e) {
- //ignore
- }
- $storages = $this->getStorages();
-
- $this->assertTrue(isset($storages[$this->newId]));
- $this->assertFalse(isset($storages[$this->oldId]));
-
- $this->assertNull(\OC\Files\Cache\Cache::getById($fileId), 'old filecache has not been cleared');
- }
-
- /**
- * @param $storages
- * @return array
- */
- public function getStorages() {
- $storages = array();
- $stmt = \OC::$server->getDatabaseConnection()->prepare(
- 'SELECT `numeric_id`, `id` FROM `*PREFIX*storages` WHERE `id` IN (?, ?)'
- );
- $stmt->execute(array($this->oldId, $this->newId));
- while ($row = $stmt->fetch()) {
- $storages[$row['id']] = $row['numeric_id'];
- }
- return $storages;
- }
-
- /**
- * @param string $id
- */
- public function deleteStorage($id) {
- $stmt = \OC::$server->getDatabaseConnection()->prepare(
- 'DELETE FROM `*PREFIX*storages` WHERE `id` = ?'
- );
- $stmt->execute(array($id));
- }
-}
diff --git a/apps/files_external/tests/Command/ListCommandTest.php b/apps/files_external/tests/Command/ListCommandTest.php
index f2f9fa94c02..76a8f98f520 100644
--- a/apps/files_external/tests/Command/ListCommandTest.php
+++ b/apps/files_external/tests/Command/ListCommandTest.php
@@ -29,31 +29,36 @@ use OCA\Files_External\Lib\Auth\Password\Password;
use OCA\Files_External\Lib\Auth\Password\SessionCredentials;
use OCA\Files_External\Lib\Backend\Local;
use OCA\Files_External\Lib\StorageConfig;
+use OCA\Files_External\Service\GlobalStoragesService;
+use OCA\Files_External\Service\UserStoragesService;
+use OCP\Authentication\LoginCredentials\IStore;
+use OCP\IL10N;
use OCP\ISession;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\Security\ICrypto;
+use PHPUnit_Framework_MockObject_MockObject;
use Symfony\Component\Console\Output\BufferedOutput;
class ListCommandTest extends CommandTest {
/**
- * @return \OCA\Files_External\Command\ListCommand|\PHPUnit_Framework_MockObject_MockObject
+ * @return ListCommand|PHPUnit_Framework_MockObject_MockObject
*/
private function getInstance() {
- /** @var \OCA\Files_External\Service\GlobalStoragesService|\PHPUnit_Framework_MockObject_MockObject $globalService */
- $globalService = $this->getMock('\OCA\Files_External\Service\GlobalStoragesService', null, [], '', false);
- /** @var \OCA\Files_External\Service\UserStoragesService|\PHPUnit_Framework_MockObject_MockObject $userService */
- $userService = $this->getMock('\OCA\Files_External\Service\UserStoragesService', null, [], '', false);
- /** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject $userManager */
+ /** @var GlobalStoragesService|PHPUnit_Framework_MockObject_MockObject $globalService */
+ $globalService = $this->createMock(GlobalStoragesService::class);
+ /** @var UserStoragesService|PHPUnit_Framework_MockObject_MockObject $userService */
+ $userService = $this->createMock(UserStoragesService::class);
+ /** @var IUserManager|PHPUnit_Framework_MockObject_MockObject $userManager */
$userManager = $this->createMock(IUserManager::class);
- /** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject $userSession */
+ /** @var IUserSession|PHPUnit_Framework_MockObject_MockObject $userSession */
$userSession = $this->createMock(IUserSession::class);
return new ListCommand($globalService, $userService, $userSession, $userManager);
}
public function testListAuthIdentifier() {
- $l10n = $this->getMock('\OPC\IL10N', null, [], '', false);
+ $l10n = $this->createMock(IL10N::class);
$session = $this->createMock(ISession::class);
$crypto = $this->createMock(ICrypto::class);
$instance = $this->getInstance();
@@ -61,7 +66,8 @@ class ListCommandTest extends CommandTest {
$mount1->setAuthMechanism(new Password($l10n));
$mount1->setBackend(new Local($l10n, new NullMechanism($l10n)));
$mount2 = new StorageConfig();
- $mount2->setAuthMechanism(new SessionCredentials($l10n, $session, $crypto));
+ $credentialStore = $this->createMock(IStore::class);
+ $mount2->setAuthMechanism(new SessionCredentials($l10n, $credentialStore));
$mount2->setBackend(new Local($l10n, new NullMechanism($l10n)));
$input = $this->getInput($instance, [], [
'output' => 'json'
diff --git a/apps/files_external/tests/Settings/AdminTest.php b/apps/files_external/tests/Settings/AdminTest.php
index fdf9680e7c3..6236f2d416a 100644
--- a/apps/files_external/tests/Settings/AdminTest.php
+++ b/apps/files_external/tests/Settings/AdminTest.php
@@ -34,21 +34,21 @@ use Test\TestCase;
class AdminTest extends TestCase {
/** @var Admin */
private $admin;
- /** @var IManager */
+ /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
private $encryptionManager;
- /** @var GlobalStoragesService */
+ /** @var GlobalStoragesService|\PHPUnit_Framework_MockObject_MockObject */
private $globalStoragesService;
- /** @var BackendService */
+ /** @var BackendService|\PHPUnit_Framework_MockObject_MockObject */
private $backendService;
- /** @var GlobalAuth */
+ /** @var GlobalAuth|\PHPUnit_Framework_MockObject_MockObject */
private $globalAuth;
public function setUp() {
parent::setUp();
- $this->encryptionManager = $this->getMockBuilder('\OCP\Encryption\IManager')->getMock();
- $this->globalStoragesService = $this->getMockBuilder('\OCA\Files_External\Service\GlobalStoragesService')->disableOriginalConstructor()->getMock();
- $this->backendService = $this->getMockBuilder('\OCA\Files_External\Service\BackendService')->disableOriginalConstructor()->getMock();
- $this->globalAuth = $this->getMockBuilder('\OCA\Files_External\Lib\Auth\Password\GlobalAuth')->disableOriginalConstructor()->getMock();
+ $this->encryptionManager = $this->createMock(IManager::class);
+ $this->globalStoragesService = $this->createMock(GlobalStoragesService::class);
+ $this->backendService = $this->createMock(BackendService::class);
+ $this->globalAuth = $this->createMock(GlobalAuth::class);
$this->admin = new Admin(
$this->encryptionManager,
@@ -79,6 +79,10 @@ class AdminTest extends TestCase {
->expects($this->once())
->method('isUserMountingAllowed')
->willReturn(true);
+ $this->backendService
+ ->expects($this->exactly(2))
+ ->method('getBackends')
+ ->willReturn([]);
$this->globalAuth
->expects($this->once())
->method('getAuth')
diff --git a/apps/files_external/tests/Settings/SectionTest.php b/apps/files_external/tests/Settings/SectionTest.php
index b5dfb28b382..ee501b1270b 100644
--- a/apps/files_external/tests/Settings/SectionTest.php
+++ b/apps/files_external/tests/Settings/SectionTest.php
@@ -25,19 +25,24 @@ namespace OCA\Files_External\Tests\Settings;
use OCA\Files_External\Settings\Section;
use OCP\IL10N;
+use OCP\IURLGenerator;
use Test\TestCase;
class SectionTest extends TestCase {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $urlGenerator;
/** @var Section */
private $section;
public function setUp() {
parent::setUp();
+ $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->disableOriginalConstructor()->getMock();
$this->l = $this->getMockBuilder('\OCP\IL10N')->disableOriginalConstructor()->getMock();
$this->section = new Section(
+ $this->urlGenerator,
$this->l
);
}
diff --git a/apps/files_external/tests/Storage/SmbTest.php b/apps/files_external/tests/Storage/SmbTest.php
index 150d4d3a035..45c01a0c59e 100644
--- a/apps/files_external/tests/Storage/SmbTest.php
+++ b/apps/files_external/tests/Storage/SmbTest.php
@@ -27,7 +27,10 @@
namespace OCA\Files_External\Tests\Storage;
+use OC\Files\Notify\Change;
+use OC\Files\Notify\RenameChange;
use \OCA\Files_External\Lib\Storage\SMB;
+use OCP\Files\Notify\IChange;
/**
* Class SmbTest
@@ -37,6 +40,10 @@ use \OCA\Files_External\Lib\Storage\SMB;
* @package OCA\Files_External\Tests\Storage
*/
class SmbTest extends \Test\Files\Storage\Storage {
+ /**
+ * @var SMB instance
+ */
+ protected $instance;
protected function setUp() {
parent::setUp();
@@ -85,4 +92,44 @@ class SmbTest extends \Test\Files\Storage\Storage {
$this->assertEquals('smb::testuser@testhost//someshare//someroot/', $this->instance->getId());
$this->instance = null;
}
+
+ public function testNotifyGetChanges() {
+ $notifyHandler = $this->instance->notify('');
+ usleep(100 * 1000); //give time for the notify to start
+ $this->instance->file_put_contents('/newfile.txt', 'test content');
+ $this->instance->rename('/newfile.txt', 'renamed.txt');
+ $this->instance->unlink('/renamed.txt');
+ usleep(100 * 1000); //time for all changes to be processed
+
+ $changes = $notifyHandler->getChanges();
+ $notifyHandler->stop();
+
+ $expected = [
+ new Change(IChange::ADDED, 'newfile.txt'),
+ new RenameChange(IChange::RENAMED, 'newfile.txt', 'renamed.txt'),
+ new Change(IChange::REMOVED, 'renamed.txt')
+ ];
+
+ foreach ($expected as $expectedChange) {
+ $this->assertContains($expectedChange, $changes, '', false, false); // dont check object identity
+ }
+ }
+
+ public function testNotifyListen() {
+ $notifyHandler = $this->instance->notify('');
+ usleep(100 * 1000); //give time for the notify to start
+ $this->instance->file_put_contents('/newfile.txt', 'test content');
+ $this->instance->unlink('/newfile.txt');
+ usleep(100 * 1000); //time for all changes to be processed
+
+ $result = null;
+
+ // since the notify handler buffers untill we start listening we will get the above changes
+ $notifyHandler->listen(function (IChange $change) use (&$result) {
+ $result = $change;
+ return false;//stop listening
+ });
+
+ $this->assertEquals(new Change(IChange::ADDED, 'newfile.txt'), $result);
+ }
}
diff --git a/apps/files_external/tests/env/start-smb-linux.sh b/apps/files_external/tests/env/start-smb-linux.sh
new file mode 100755
index 00000000000..173dd25ebb9
--- /dev/null
+++ b/apps/files_external/tests/env/start-smb-linux.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+#
+# ownCloud
+#
+# This script start a docker container to test the files_external tests
+# against. It will also change the files_external config to use the docker
+# container as testing environment. This is reverted in the stop step.W
+#
+# Set environment variable DEBUG to print config file
+#
+# @author Morris Jobke
+# @copyright 2015 Morris Jobke <hey@morrisjobke.de>
+#
+
+# retrieve current folder to place the config in the parent folder
+thisFolder=`echo $0 | sed 's#env/start-smb-linux\.sh##'`
+
+if [ -z "$thisFolder" ]; then
+ thisFolder="."
+fi;
+
+cat > $thisFolder/config.smb.php <<DELIM
+<?php
+
+return array(
+ 'run'=>true,
+ 'host'=>'127.0.0.1',
+ 'user'=>'test',
+ 'password'=>'test',
+ 'root'=>'',
+ 'share'=>'public',
+);
+
+DELIM
+
+echo -n "Waiting for samba initialization"
+if ! "$thisFolder"/env/wait-for-connection 127.0.0.1 445 60; then
+ echo "[ERROR] Waited 60 seconds, no response" >&2
+ exit 1
+fi
+
+sleep 1
diff --git a/apps/files_external/tests/env/start-smb-silvershell.sh b/apps/files_external/tests/env/start-smb-silvershell.sh
deleted file mode 100755
index a7ff3f71eb1..00000000000
--- a/apps/files_external/tests/env/start-smb-silvershell.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env bash
-#
-# ownCloud
-#
-# This script start a docker container to test the files_external tests
-# against. It will also change the files_external config to use the docker
-# container as testing environment. This is reverted in the stop step.W
-#
-# Set environment variable DEBUG to print config file
-#
-# @author Morris Jobke
-# @copyright 2015 Morris Jobke <hey@morrisjobke.de>
-#
-
-if ! command -v docker >/dev/null 2>&1; then
- echo "No docker executable found - skipped docker setup"
- exit 0;
-fi
-
-echo "Docker executable found - setup docker"
-
-echo "Fetch recent silvershell/samba docker image"
-docker pull silvershell/samba
-
-# retrieve current folder to place the config in the parent folder
-thisFolder=`echo $0 | sed 's#env/start-smb-silvershell\.sh##'`
-
-if [ -z "$thisFolder" ]; then
- thisFolder="."
-fi;
-
-container=`docker run -d -e SMB_USER=test -e SMB_PWD=test silvershell/samba`
-
-host=`docker inspect --format="{{.NetworkSettings.IPAddress}}" $container`
-
-cat > $thisFolder/config.smb.php <<DELIM
-<?php
-
-return array(
- 'run'=>true,
- 'host'=>'$host',
- 'user'=>'test',
- 'password'=>'test',
- 'root'=>'',
- 'share'=>'public',
-);
-
-DELIM
-
-echo "samba container: $container"
-
-# put container IDs into a file to drop them after the test run (keep in mind that multiple tests run in parallel on the same host)
-echo $container >> $thisFolder/dockerContainerSilvershell.$EXECUTOR_NUMBER.smb
-
-echo -n "Waiting for samba initialization"
-if ! "$thisFolder"/env/wait-for-connection ${host} 445 60; then
- echo "[ERROR] Waited 60 seconds, no response" >&2
- exit 1
-fi
-sleep 1
-
-if [ -n "$DEBUG" ]; then
- cat $thisFolder/config.smb.php
- cat $thisFolder/dockerContainerSilvershell.$EXECUTOR_NUMBER.smb
-fi
-
-
diff --git a/apps/files_external/tests/env/start-webdav-apachedrone.sh b/apps/files_external/tests/env/start-webdav-apachedrone.sh
new file mode 100755
index 00000000000..9887cea5eee
--- /dev/null
+++ b/apps/files_external/tests/env/start-webdav-apachedrone.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+#
+# Nextcloud
+#
+
+# retrieve current folder to place the config in the parent folder
+thisFolder=`echo $0 | sed 's#env/start-webdav-apachedrone\.sh##'`
+
+if [ -z "$thisFolder" ]; then
+ thisFolder="."
+fi;
+
+cat > $thisFolder/config.webdav.php <<DELIM
+<?php
+
+return array(
+ 'run'=>true,
+ 'host'=>'127.0.0.1:80/webdav/',
+ 'user'=>'test',
+ 'password'=>'pass',
+ 'root'=>'',
+ 'wait'=> 0
+);
+
+DELIM
+
diff --git a/apps/files_external/tests/env/stop-smb-linux.sh b/apps/files_external/tests/env/stop-smb-linux.sh
new file mode 100755
index 00000000000..434d3e166b1
--- /dev/null
+++ b/apps/files_external/tests/env/stop-smb-linux.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+#
+# ownCloud
+#
+# This script stops the docker container the files_external tests were run
+# against. It will also revert the config changes done in start step.
+#
+# @author Morris Jobke
+# @copyright 2015 Morris Jobke <hey@morrisjobke.de>
+#
+
+# retrieve current folder to remove the config from the parent folder
+thisFolder=`echo $0 | sed 's#env/stop-smb-linux\.sh##'`
+
+if [ -z "$thisFolder" ]; then
+ thisFolder="."
+fi;
+
+# cleanup
+rm $thisFolder/config.smb.php
+
diff --git a/apps/files_external/tests/env/stop-smb-silvershell.sh b/apps/files_external/tests/env/stop-smb-silvershell.sh
deleted file mode 100755
index 56866f13b1f..00000000000
--- a/apps/files_external/tests/env/stop-smb-silvershell.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-#
-# ownCloud
-#
-# This script stops the docker container the files_external tests were run
-# against. It will also revert the config changes done in start step.
-#
-# @author Morris Jobke
-# @copyright 2015 Morris Jobke <hey@morrisjobke.de>
-#
-
-if ! command -v docker >/dev/null 2>&1; then
- echo "No docker executable found - skipped docker stop"
- exit 0;
-fi
-
-echo "Docker executable found - stop and remove docker containers"
-
-# retrieve current folder to remove the config from the parent folder
-thisFolder=`echo $0 | sed 's#env/stop-smb-silvershell\.sh##'`
-
-if [ -z "$thisFolder" ]; then
- thisFolder="."
-fi;
-
-# stopping and removing docker containers
-for container in `cat $thisFolder/dockerContainerSilvershell.$EXECUTOR_NUMBER.smb`; do
- echo "Stopping and removing docker container $container"
- # kills running container and removes it
- docker stop $container
- docker rm -f $container
-done;
-
-# cleanup
-rm $thisFolder/config.smb.php
-rm $thisFolder/dockerContainerSilvershell.$EXECUTOR_NUMBER.smb
-
diff --git a/apps/files_external/tests/env/stop-webdav-apachedrone.sh b/apps/files_external/tests/env/stop-webdav-apachedrone.sh
new file mode 100755
index 00000000000..3c4b0492dd0
--- /dev/null
+++ b/apps/files_external/tests/env/stop-webdav-apachedrone.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+#
+# Nextcloud
+
+# retrieve current folder to remove the config from the parent folder
+thisFolder=`echo $0 | sed 's#env/stop-webdav-apachedrone\.sh##'`
+
+if [ -z "$thisFolder" ]; then
+ thisFolder="."
+fi;
+
+# cleanup
+rm $thisFolder/config.webdav.php
+
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index cff424d223a..e93bc99d540 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -3,19 +3,19 @@
<id>files_sharing</id>
<name>File sharing</name>
<description>
- This application enables users to share files within ownCloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within ownCloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of ownCloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.
-Turning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the ownCloud Documentation.
+ This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.
+Turning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation.
</description>
<licence>AGPL</licence>
<author>Michael Gapczynski, Bjoern Schiessle</author>
<default_enable/>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<types>
<filesystem/>
</types>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<public>
<files>public.php</files>
diff --git a/apps/files_sharing/css/authenticate.css b/apps/files_sharing/css/authenticate.css
index 55a40cf508d..16687916ac4 100644
--- a/apps/files_sharing/css/authenticate.css
+++ b/apps/files_sharing/css/authenticate.css
@@ -9,12 +9,8 @@ input[type='submit'] {
margin: 6px;
}
-#body-login input[type='submit'] {
- position: absolute;
- top: 0;
- border: none;
-}
-
fieldset > p {
position: relative;
+ display: flex;
+ align-items: center;
}
diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css
index 94183cf0057..9c8c4a66630 100644
--- a/apps/files_sharing/css/public.css
+++ b/apps/files_sharing/css/public.css
@@ -107,29 +107,33 @@ thead {
max-width: 90%;
}
+/* header buttons */
+#details {
+ display: inline-flex;
+}
+#details button,
+#details input,
+#details .button {
+ margin: 0 5px;
+ line-height: normal;
+}
+#details button:hover,
+#details input:hover,
+#details .button:hover {
+ /* No */
+ border-color: rgba(0,0,0,0.3) !important;
+}
+
/* within #save */
#save .save-form {
position: relative;
}
#remote_address {
- margin: 0;
- width: 130px;
- height: 14px;
- padding: 6px;
- padding-right: 24px;
-}
+ width: 200px;
-.ie8 #remote_address {
- padding-right: 30px;
-}
-
-#save #save-button,
-#save #save-button-confirm {
- margin: 0 5px;
- height: 28px;
- padding-bottom: 4px;
- line-height: 14px;
+ margin-right: 4px;
+ height: 31px;
}
#save-button-confirm {
@@ -137,31 +141,9 @@ thead {
background-color: transparent;
border: none;
margin: 2px 4px !important;
- right: 0;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- filter: alpha(opacity=50);
- opacity: .5;
-}
-
-.ie8 #save-button-confirm {
- margin: 2px 0 !important;
-}
-
-#save-button-confirm:disabled,
-#save-button-confirm:disabled:hover,
-#save-button-confirm:disabled:focus {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
- filter: alpha(opacity=20);
- opacity: .2;
- cursor: default;
-}
-
-#save-button-confirm:hover,
-#save-button-confirm:focus {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- filter: alpha(opacity=100);
- opacity: 1;
- cursor: pointer;
+ right: 7px;
+ top: -8px;
+ height: 30px;
}
#public-upload .avatardiv {
diff --git a/apps/files_sharing/css/sharetabview.css b/apps/files_sharing/css/sharetabview.css
index 936e1af246a..979ef01c030 100644
--- a/apps/files_sharing/css/sharetabview.css
+++ b/apps/files_sharing/css/sharetabview.css
@@ -51,10 +51,9 @@
padding: 0 0 16px;
}
-#shareWithList li {
+#shareWithList > li {
padding-top: 5px;
padding-bottom: 5px;
- font-weight: bold;
white-space: normal;
display: inline-flex;
align-items: center;
@@ -70,6 +69,11 @@
opacity: .5;
}
+#shareWithList .shareOption.menuitem > label:before {
+ /* Checkboxes positionning */
+ margin: 0 12px !important;
+}
+
#shareWithList .unshare {
padding: 1px 6px;
vertical-align: text-bottom;
@@ -78,12 +82,6 @@
vertical-align: text-top;
}
-#shareWithList .unshare .icon-delete {
- padding-right: 4px;
- background-position-x: 0;
- display: inline-block;
-}
-
#shareWithList .sharingOptionsGroup .popovermenu:after {
right: 3px;
}
@@ -100,7 +98,7 @@
overflow: hidden;
vertical-align: middle;
}
-#shareWithList li label {
+#shareWithList li .sharingOptionsGroup > .shareOption > label {
padding: 6px;
margin-right: 8px;
vertical-align: text-top;
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 0045c7156d2..ad3ef856f23 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -259,7 +259,7 @@ OCA.Sharing.PublicApp = {
$('.save-form').submit(function (event) {
event.preventDefault();
- var remote = $(this).find('input[type="text"]').val();
+ var remote = $(this).find('input[type="email"]').val();
var token = $('#sharingToken').val();
var owner = $('#save').data('owner');
var ownerDisplayName = $('#save').data('owner-display-name');
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index 01c2ccfb863..fcae7bc9a58 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -9,6 +9,12 @@
*/
(function() {
+
+ _.extend(OC.Files.Client, {
+ PROPERTY_SHARE_TYPES: '{' + OC.Files.Client.NS_OWNCLOUD + '}share-types',
+ PROPERTY_OWNER_DISPLAY_NAME: '{' + OC.Files.Client.NS_OWNCLOUD + '}owner-display-name'
+ });
+
if (!OCA.Sharing) {
OCA.Sharing = {};
}
@@ -65,32 +71,38 @@
fileInfo.shareTypes = shareTypes;
}
+ if( $el.attr('data-expiration')){
+ var expirationTimestamp = parseInt($el.attr('data-expiration'));
+ fileInfo.shares = [];
+ fileInfo.shares.push({expiration: expirationTimestamp});
+ }
+
+ fileInfo.recipientsDisplayName = $el.attr('data-share-recipients') || undefined;
+
return fileInfo;
};
- var NS_OC = 'http://owncloud.org/ns';
-
var oldGetWebdavProperties = fileList._getWebdavProperties;
fileList._getWebdavProperties = function() {
var props = oldGetWebdavProperties.apply(this, arguments);
- props.push('{' + NS_OC + '}owner-display-name');
- props.push('{' + NS_OC + '}share-types');
+ props.push(OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME);
+ props.push(OC.Files.Client.PROPERTY_SHARE_TYPES);
return props;
};
fileList.filesClient.addFileInfoParser(function(response) {
var data = {};
var props = response.propStat[0].properties;
- var permissionsProp = props['{' + NS_OC + '}permissions'];
+ var permissionsProp = props[OC.Files.Client.PROPERTY_PERMISSIONS];
if (permissionsProp && permissionsProp.indexOf('S') >= 0) {
- data.shareOwner = props['{' + NS_OC + '}owner-display-name'];
+ data.shareOwner = props[OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME];
}
- var shareTypesProp = props['{' + NS_OC + '}share-types'];
+ var shareTypesProp = props[OC.Files.Client.PROPERTY_SHARE_TYPES];
if (shareTypesProp) {
data.shareTypes = _.chain(shareTypesProp).filter(function(xmlvalue) {
- return (xmlvalue.namespaceURI === NS_OC && xmlvalue.nodeName.split(':')[1] === 'share-type');
+ return (xmlvalue.namespaceURI === OC.Files.Client.NS_OWNCLOUD && xmlvalue.nodeName.split(':')[1] === 'share-type');
}).map(function(xmlvalue) {
return parseInt(xmlvalue.textContent || xmlvalue.text, 10);
}).value();
diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js
index f2eba22fa17..4dff7b988e4 100644
--- a/apps/files_sharing/l10n/cs_CZ.js
+++ b/apps/files_sharing/l10n/cs_CZ.js
@@ -18,52 +18,82 @@ OC.L10N.register(
"No expiration date set" : "Není nastaveno datum vypršení platnosti",
"Shared by" : "Sdílí",
"Sharing" : "Sdílení",
- "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> soubor nebo adresář sdílený jako veřejný odkaz",
- "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
- "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
- "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
- "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
- "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
- "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
- "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
- "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s nasdílel(a) %1$s s %3$s",
- "You removed the share of %2$s for %1$s" : "Odstranil(a) jsi sdílení %2$s pro %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s odstranil(a) sdílení %3$s pro %1$s",
- "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s nasdílel(a) %1$s se skupinou %3$s",
- "You removed the share of group %2$s for %1$s" : "Odstranil(a) jsi sdílení skupině %2$s pro %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s odstranil(a) sdílení skupině %3$s pro %1$s",
- "%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
- "You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
- "You removed the public link for %1$s" : "Odstranil(a) jsi veřejný odkaz na %1$s",
- "%2$s removed the public link for %1$s" : "%2$s odstranil(a) veřejný odkaz na %1$s",
- "Your public link for %1$s expired" : "Veřejný odkaz pro %1$s vypršel",
- "The public link of %2$s for %1$s expired" : "Veřejný odkaz na %2$s pro %1$s vypršel",
- "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
- "%2$s removed the share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
- "File %1$s shared by email with %2$s was downloaded" : "Soubor %1$s sdílen pomocí emailu s %2$s byl stažen",
- "Folder %1$s shared by email with %2$s was downloaded" : "Adresář %1$s sdílen pomocí emailu s %2$s byl stažen",
+ "File shares" : "Sdílení souboru",
"Downloaded via public link" : "Staženo pomocí veřejného odkazu",
- "Shared with %2$s" : "Sdíleno s %2$s",
- "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
- "Removed share for %2$s" : "Odstranil(a) sdílení pro %2$s",
- "%2$s removed share for %3$s" : "%2$s odstranil(a) sdílení pro %3$s",
- "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
- "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
- "Removed share of group %2$s" : "Odstranil(a) sdílení skupině %2$s",
- "%2$s removed share of group %3$s" : "%2$s odstranil(a) sdílení skupině %3$s",
- "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
- "Shared via public link" : "Sdíleno jako veřejný odkaz",
+ "Downloaded by %1$s" : "Stáhnul(o) %1$s",
+ "Downloaded by {email}" : "Stáhl {email}",
+ "%1$s downloaded via public link" : "%1$s stažen pomocí veřejného odkazu",
+ "{file} downloaded via public link" : "{file} stažen pomocí veřejného odkazu",
+ "%1$s downloaded %2$s" : "%1$s stáhl(a) %2$s",
+ "{email} downloaded {file}" : "{email} stáhnul {file}",
+ "Shared with group %1$s" : "Sdíleno se skupinou %1$s",
+ "Shared with group {group}" : "Sdíleno se skupinou {group}",
+ "Removed share for group %1$s" : "Odstraněno sdílení pro skupinu %1$s",
+ "Removed share for group {group}" : "Odstranil sdílení pro skupinu {group}",
+ "%2$s shared with group %1$s" : "%2$s sdílel se skupinou %1$s",
+ "{actor} shared with group {group}" : "{actor} sdílel(a) se skupinou {group}",
+ "%2$s removed share for group %1$s" : "%2$s odstranil(a) sdílení pro skupinu %1$s",
+ "{actor} removed share for group {group}" : "{actor} odstranil(a) sdílení pro skupinu {group}",
+ "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s",
+ "You shared {file} with group {group}" : "Se skupinou {group} jste nasdílel(a) {file}",
+ "You removed group %2$s from %1$s" : "Z %1$s jste odstranil(a) skupinu %2$s",
+ "You removed group {group} from {file}" : "Z {file} jste odstranil(a) skupinu {group}",
+ "%3$s shared %1$s with group %2$s" : "%3$s sdílel %1$s se skupinou %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} sdílel(a) {file} se skupinou {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s odstranil(a) z %1$s skupinu %2$s",
+ "{actor} removed group {group} from {file}" : "{actor} odstranil(a) skupinu {group} z {file}",
+ "Shared as public link" : "Sdíleno jako veřejný odkaz",
"Removed public link" : "Odstranil(a) veřejný odkaz",
- "%2$s removed public link" : "%2$s odstranil(a) veřejný odkaz",
- "Public link expired" : "Veřejný odkaz vypršel",
- "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel",
- "Shared by %2$s" : "%2$s sdílel(a)",
- "Downloaded by %2$s" : "Staženo uživatelem %2$s",
- "File shares" : "Sdílení souboru",
+ "%1$s shared as public link" : "%1$s sdílen jako veřejný odkaz",
+ "{actor} shared as public link" : "{actor} sdílel(a) jako veřejný odkaz",
+ "%1$s removed public link" : "%1$s odstranil(a) veřejný odkaz",
+ "{actor} removed public link" : "{actor} odstranil(a) veřejný odkaz",
+ "You shared %1$s as public link" : "Sdílel(a) jste %1$s jako veřejný odkaz",
+ "You shared {file} as public link" : "Sdílel(a) jste {file} jako veřejný odkaz",
+ "You removed public link for %1$s" : "Odstranil(a) jste veřejný odkaz pro %1$s",
+ "You removed public link for {file}" : "Odstranil(a) jste veřejný odkaz pro {file}",
+ "%2$s shared %1$s as public link" : "%2$s sdílel(a) %1$s jako veřejný odkaz",
+ "{actor} shared {file} as public link" : "{actor} sdílel(a) {file} jako veřejný odkaz",
+ "%2$s removed public link for %1$s" : "%2$s odstranil veřejný odkaz z %1$s",
+ "{actor} removed public link for {file}" : "{actor} odstranil(a) veřejný odkaz pro {file}",
+ "%1$s accepted the remote share" : "%1$s přijal(a) vzdálené sdílení",
+ "{user} accepted the remote share" : "{user} přijal(a) vzdálené sdílení",
+ "%1$s declined the remote share" : "%1$s odmítl(a) vzdálené sdílení",
+ "{user} declined the remote share" : "{user} odmítl vzdálené sdílení",
+ "You received a new remote share %1$s from %2$s" : "Obdržel(a) jste nové vzdálené sdílení %1$s z %2$s",
+ "You received a new remote share {file} from {user}" : "Obdržel(a) jste nové vzdálené sdílení souboru {file} od {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s přijal(a) vzdálené sdílení %1$s",
+ "{user} accepted the remote share of {file}" : "{user} přijal vzdálené sdílení souboru {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odmítl vzdálené sdílení %1$s",
+ "{user} declined the remote share of {file}" : "{user} odmítl(a) vzdálené sdílení {file}",
+ "%2$s unshared %1$s from you" : "%2$s s vámi přestal(a) sdílet %1$s",
+ "{user} unshared {file} from you" : "{user} s vámi již nesdílí soubor {file}",
+ "Shared with %1$s" : "Sdíleno s %1$s",
+ "Shared with {user}" : "Sdíleno s {user}",
+ "Removed share for %1$s" : "Odstraněno sdílení %1$s",
+ "Removed share for {user}" : "Odstraněno sdílení pro {user}",
+ "%2$s shared with %1$s" : "%2$s sdíleno s %1$s",
+ "{actor} shared with {user}" : "{actor} sdílel(a) s {user}",
+ "%2$s removed share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "{actor} removed share for {user}" : "{actor} odstranil(a) sdílení pro {user}",
+ "Shared by %1$s" : "Sdíleno %1$s",
+ "Shared by {actor}" : "Sdílel {actor}",
+ "%1$s removed share" : "%1$s odstranil(a) sdílení",
+ "{actor} removed share" : "{actor} odebral(a) sdílení",
+ "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s",
+ "You shared {file} with {user}" : "Sdílel(a) jste {file} s {user}",
+ "You removed %2$s from %1$s" : "Odstranil(a) jste %2$s z %1$s",
+ "You removed {user} from {file}" : "Odstranil(a) jste uživatele {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s s %2$s sdílel(a) %1$s",
+ "{actor} removed {user} from {file}" : "{actor} odstranil(a) uživatele {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s odstranil(a) %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
+ "{actor} shared {file} with you" : "{actor} s vámi sdílel(a) soubor {file}",
+ "%2$s removed you from %1$s" : "%2$s vás odstranil(a) z %1$s",
+ "{actor} removed you from {file}" : "{actor} vás odstranil(a) ze souboru {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> soubor nebo adresář sdílený jako veřejný odkaz",
+ "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>",
"Wrong share ID, share doesn't exist" : "Špatné ID sdílení, sdílení neexistuje",
"could not delete share" : "nelze smazat sdílení",
"Could not delete share" : "Nelze smazat sdílení",
@@ -109,36 +139,40 @@ OC.L10N.register(
"Uploading files…" : "Probíhá nahrávání souborů...",
"Uploaded files:" : "Nahrané soubory:",
"A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář",
- "Shares" : "Sdílení",
- "Server to server sharing is not enabled on this server" : "Sdílení mezi servery není na tomto serveru povoleno",
- "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje nepovolené znaky.",
- "Not allowed to create a federated share with the same user server" : "Není povoleno vytvořit propojené sdílení s tím samým serverem",
- "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát",
- "Could not authenticate to remote share, password might be wrong" : "Nezdařilo se přihlášení ke vzdálenému úložišti, nejspíše bylo zadáno chybné heslo",
- "Storage not valid" : "Úložiště není platné",
- "Couldn't add remote share" : "Nelze přidat vzdálené úložiště",
- "Federated sharing" : "Propojené sdílení",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené úložiště {name} uživatele {owner}@{remote}?",
- "Remote share" : "Vzdálené úložiště",
- "Remote share password" : "Heslo ke vzdálenému úložišti",
- "Cancel" : "Zrušit",
- "Add remote share" : "Přidat vzdálené úložiště",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}",
- "Invalid ownCloud url" : "Neplatná ownCloud url",
- "You received \"/%2$s\" as a remote share from %1$s" : "Obdrželi jste \"/%2$s\" jako vzdálené sdílení od %1$s",
- "Accept" : "Přijmout",
- "Decline" : "Zamítnout",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID",
- "Federated Cloud Sharing" : "Propojené cloudové sdílení",
- "Open documentation" : "Otevřít dokumentaci",
- "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
- "Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů",
- "Federated Cloud" : "Sdružený cloud",
- "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:",
- "Share it:" : "Sdílet:",
- "Add to your website" : "Přidat na svou webovou stránku",
- "Share with me via Nextcloud" : "Sdíleno se mnou přes Nextcloud",
- "HTML Code:" : "HTML kód:"
+ "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
+ "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
+ "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
+ "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
+ "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
+ "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
+ "%2$s shared %1$s with %3$s" : "%2$s nasdílel(a) %1$s s %3$s",
+ "You removed the share of %2$s for %1$s" : "Odstranil(a) jsi sdílení %2$s pro %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s odstranil(a) sdílení %3$s pro %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s nasdílel(a) %1$s se skupinou %3$s",
+ "You removed the share of group %2$s for %1$s" : "Odstranil(a) jsi sdílení skupině %2$s pro %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s odstranil(a) sdílení skupině %3$s pro %1$s",
+ "%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
+ "You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
+ "You removed the public link for %1$s" : "Odstranil(a) jsi veřejný odkaz na %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s odstranil(a) veřejný odkaz na %1$s",
+ "Your public link for %1$s expired" : "Veřejný odkaz pro %1$s vypršel",
+ "The public link of %2$s for %1$s expired" : "Veřejný odkaz na %2$s pro %1$s vypršel",
+ "%2$s removed the share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "Shared with %2$s" : "Sdíleno s %2$s",
+ "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
+ "Removed share for %2$s" : "Odstranil(a) sdílení pro %2$s",
+ "%2$s removed share for %3$s" : "%2$s odstranil(a) sdílení pro %3$s",
+ "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
+ "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
+ "Removed share of group %2$s" : "Odstranil(a) sdílení skupině %2$s",
+ "%2$s removed share of group %3$s" : "%2$s odstranil(a) sdílení skupině %3$s",
+ "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
+ "Shared via public link" : "Sdíleno jako veřejný odkaz",
+ "%2$s removed public link" : "%2$s odstranil(a) veřejný odkaz",
+ "Public link expired" : "Veřejný odkaz vypršel",
+ "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel",
+ "Shared by %2$s" : "%2$s sdílel(a)",
+ "Shares" : "Sdílení"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json
index 9d82343e895..a96d2fd6f7e 100644
--- a/apps/files_sharing/l10n/cs_CZ.json
+++ b/apps/files_sharing/l10n/cs_CZ.json
@@ -16,52 +16,82 @@
"No expiration date set" : "Není nastaveno datum vypršení platnosti",
"Shared by" : "Sdílí",
"Sharing" : "Sdílení",
- "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> soubor nebo adresář sdílený jako veřejný odkaz",
- "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
- "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
- "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
- "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
- "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
- "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
- "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
- "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s nasdílel(a) %1$s s %3$s",
- "You removed the share of %2$s for %1$s" : "Odstranil(a) jsi sdílení %2$s pro %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s odstranil(a) sdílení %3$s pro %1$s",
- "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s nasdílel(a) %1$s se skupinou %3$s",
- "You removed the share of group %2$s for %1$s" : "Odstranil(a) jsi sdílení skupině %2$s pro %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s odstranil(a) sdílení skupině %3$s pro %1$s",
- "%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
- "You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
- "You removed the public link for %1$s" : "Odstranil(a) jsi veřejný odkaz na %1$s",
- "%2$s removed the public link for %1$s" : "%2$s odstranil(a) veřejný odkaz na %1$s",
- "Your public link for %1$s expired" : "Veřejný odkaz pro %1$s vypršel",
- "The public link of %2$s for %1$s expired" : "Veřejný odkaz na %2$s pro %1$s vypršel",
- "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
- "%2$s removed the share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
- "File %1$s shared by email with %2$s was downloaded" : "Soubor %1$s sdílen pomocí emailu s %2$s byl stažen",
- "Folder %1$s shared by email with %2$s was downloaded" : "Adresář %1$s sdílen pomocí emailu s %2$s byl stažen",
+ "File shares" : "Sdílení souboru",
"Downloaded via public link" : "Staženo pomocí veřejného odkazu",
- "Shared with %2$s" : "Sdíleno s %2$s",
- "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
- "Removed share for %2$s" : "Odstranil(a) sdílení pro %2$s",
- "%2$s removed share for %3$s" : "%2$s odstranil(a) sdílení pro %3$s",
- "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
- "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
- "Removed share of group %2$s" : "Odstranil(a) sdílení skupině %2$s",
- "%2$s removed share of group %3$s" : "%2$s odstranil(a) sdílení skupině %3$s",
- "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
- "Shared via public link" : "Sdíleno jako veřejný odkaz",
+ "Downloaded by %1$s" : "Stáhnul(o) %1$s",
+ "Downloaded by {email}" : "Stáhl {email}",
+ "%1$s downloaded via public link" : "%1$s stažen pomocí veřejného odkazu",
+ "{file} downloaded via public link" : "{file} stažen pomocí veřejného odkazu",
+ "%1$s downloaded %2$s" : "%1$s stáhl(a) %2$s",
+ "{email} downloaded {file}" : "{email} stáhnul {file}",
+ "Shared with group %1$s" : "Sdíleno se skupinou %1$s",
+ "Shared with group {group}" : "Sdíleno se skupinou {group}",
+ "Removed share for group %1$s" : "Odstraněno sdílení pro skupinu %1$s",
+ "Removed share for group {group}" : "Odstranil sdílení pro skupinu {group}",
+ "%2$s shared with group %1$s" : "%2$s sdílel se skupinou %1$s",
+ "{actor} shared with group {group}" : "{actor} sdílel(a) se skupinou {group}",
+ "%2$s removed share for group %1$s" : "%2$s odstranil(a) sdílení pro skupinu %1$s",
+ "{actor} removed share for group {group}" : "{actor} odstranil(a) sdílení pro skupinu {group}",
+ "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s",
+ "You shared {file} with group {group}" : "Se skupinou {group} jste nasdílel(a) {file}",
+ "You removed group %2$s from %1$s" : "Z %1$s jste odstranil(a) skupinu %2$s",
+ "You removed group {group} from {file}" : "Z {file} jste odstranil(a) skupinu {group}",
+ "%3$s shared %1$s with group %2$s" : "%3$s sdílel %1$s se skupinou %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} sdílel(a) {file} se skupinou {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s odstranil(a) z %1$s skupinu %2$s",
+ "{actor} removed group {group} from {file}" : "{actor} odstranil(a) skupinu {group} z {file}",
+ "Shared as public link" : "Sdíleno jako veřejný odkaz",
"Removed public link" : "Odstranil(a) veřejný odkaz",
- "%2$s removed public link" : "%2$s odstranil(a) veřejný odkaz",
- "Public link expired" : "Veřejný odkaz vypršel",
- "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel",
- "Shared by %2$s" : "%2$s sdílel(a)",
- "Downloaded by %2$s" : "Staženo uživatelem %2$s",
- "File shares" : "Sdílení souboru",
+ "%1$s shared as public link" : "%1$s sdílen jako veřejný odkaz",
+ "{actor} shared as public link" : "{actor} sdílel(a) jako veřejný odkaz",
+ "%1$s removed public link" : "%1$s odstranil(a) veřejný odkaz",
+ "{actor} removed public link" : "{actor} odstranil(a) veřejný odkaz",
+ "You shared %1$s as public link" : "Sdílel(a) jste %1$s jako veřejný odkaz",
+ "You shared {file} as public link" : "Sdílel(a) jste {file} jako veřejný odkaz",
+ "You removed public link for %1$s" : "Odstranil(a) jste veřejný odkaz pro %1$s",
+ "You removed public link for {file}" : "Odstranil(a) jste veřejný odkaz pro {file}",
+ "%2$s shared %1$s as public link" : "%2$s sdílel(a) %1$s jako veřejný odkaz",
+ "{actor} shared {file} as public link" : "{actor} sdílel(a) {file} jako veřejný odkaz",
+ "%2$s removed public link for %1$s" : "%2$s odstranil veřejný odkaz z %1$s",
+ "{actor} removed public link for {file}" : "{actor} odstranil(a) veřejný odkaz pro {file}",
+ "%1$s accepted the remote share" : "%1$s přijal(a) vzdálené sdílení",
+ "{user} accepted the remote share" : "{user} přijal(a) vzdálené sdílení",
+ "%1$s declined the remote share" : "%1$s odmítl(a) vzdálené sdílení",
+ "{user} declined the remote share" : "{user} odmítl vzdálené sdílení",
+ "You received a new remote share %1$s from %2$s" : "Obdržel(a) jste nové vzdálené sdílení %1$s z %2$s",
+ "You received a new remote share {file} from {user}" : "Obdržel(a) jste nové vzdálené sdílení souboru {file} od {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s přijal(a) vzdálené sdílení %1$s",
+ "{user} accepted the remote share of {file}" : "{user} přijal vzdálené sdílení souboru {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odmítl vzdálené sdílení %1$s",
+ "{user} declined the remote share of {file}" : "{user} odmítl(a) vzdálené sdílení {file}",
+ "%2$s unshared %1$s from you" : "%2$s s vámi přestal(a) sdílet %1$s",
+ "{user} unshared {file} from you" : "{user} s vámi již nesdílí soubor {file}",
+ "Shared with %1$s" : "Sdíleno s %1$s",
+ "Shared with {user}" : "Sdíleno s {user}",
+ "Removed share for %1$s" : "Odstraněno sdílení %1$s",
+ "Removed share for {user}" : "Odstraněno sdílení pro {user}",
+ "%2$s shared with %1$s" : "%2$s sdíleno s %1$s",
+ "{actor} shared with {user}" : "{actor} sdílel(a) s {user}",
+ "%2$s removed share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "{actor} removed share for {user}" : "{actor} odstranil(a) sdílení pro {user}",
+ "Shared by %1$s" : "Sdíleno %1$s",
+ "Shared by {actor}" : "Sdílel {actor}",
+ "%1$s removed share" : "%1$s odstranil(a) sdílení",
+ "{actor} removed share" : "{actor} odebral(a) sdílení",
+ "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s",
+ "You shared {file} with {user}" : "Sdílel(a) jste {file} s {user}",
+ "You removed %2$s from %1$s" : "Odstranil(a) jste %2$s z %1$s",
+ "You removed {user} from {file}" : "Odstranil(a) jste uživatele {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s s %2$s sdílel(a) %1$s",
+ "{actor} removed {user} from {file}" : "{actor} odstranil(a) uživatele {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s odstranil(a) %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
+ "{actor} shared {file} with you" : "{actor} s vámi sdílel(a) soubor {file}",
+ "%2$s removed you from %1$s" : "%2$s vás odstranil(a) z %1$s",
+ "{actor} removed you from {file}" : "{actor} vás odstranil(a) ze souboru {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> soubor nebo adresář sdílený jako veřejný odkaz",
+ "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>",
"Wrong share ID, share doesn't exist" : "Špatné ID sdílení, sdílení neexistuje",
"could not delete share" : "nelze smazat sdílení",
"Could not delete share" : "Nelze smazat sdílení",
@@ -107,36 +137,40 @@
"Uploading files…" : "Probíhá nahrávání souborů...",
"Uploaded files:" : "Nahrané soubory:",
"A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář",
- "Shares" : "Sdílení",
- "Server to server sharing is not enabled on this server" : "Sdílení mezi servery není na tomto serveru povoleno",
- "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje nepovolené znaky.",
- "Not allowed to create a federated share with the same user server" : "Není povoleno vytvořit propojené sdílení s tím samým serverem",
- "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát",
- "Could not authenticate to remote share, password might be wrong" : "Nezdařilo se přihlášení ke vzdálenému úložišti, nejspíše bylo zadáno chybné heslo",
- "Storage not valid" : "Úložiště není platné",
- "Couldn't add remote share" : "Nelze přidat vzdálené úložiště",
- "Federated sharing" : "Propojené sdílení",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené úložiště {name} uživatele {owner}@{remote}?",
- "Remote share" : "Vzdálené úložiště",
- "Remote share password" : "Heslo ke vzdálenému úložišti",
- "Cancel" : "Zrušit",
- "Add remote share" : "Přidat vzdálené úložiště",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}",
- "Invalid ownCloud url" : "Neplatná ownCloud url",
- "You received \"/%2$s\" as a remote share from %1$s" : "Obdrželi jste \"/%2$s\" jako vzdálené sdílení od %1$s",
- "Accept" : "Přijmout",
- "Decline" : "Zamítnout",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID",
- "Federated Cloud Sharing" : "Propojené cloudové sdílení",
- "Open documentation" : "Otevřít dokumentaci",
- "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
- "Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů",
- "Federated Cloud" : "Sdružený cloud",
- "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:",
- "Share it:" : "Sdílet:",
- "Add to your website" : "Přidat na svou webovou stránku",
- "Share with me via Nextcloud" : "Sdíleno se mnou přes Nextcloud",
- "HTML Code:" : "HTML kód:"
+ "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
+ "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
+ "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
+ "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
+ "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
+ "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
+ "%2$s shared %1$s with %3$s" : "%2$s nasdílel(a) %1$s s %3$s",
+ "You removed the share of %2$s for %1$s" : "Odstranil(a) jsi sdílení %2$s pro %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s odstranil(a) sdílení %3$s pro %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s nasdílel(a) %1$s se skupinou %3$s",
+ "You removed the share of group %2$s for %1$s" : "Odstranil(a) jsi sdílení skupině %2$s pro %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s odstranil(a) sdílení skupině %3$s pro %1$s",
+ "%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
+ "You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
+ "You removed the public link for %1$s" : "Odstranil(a) jsi veřejný odkaz na %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s odstranil(a) veřejný odkaz na %1$s",
+ "Your public link for %1$s expired" : "Veřejný odkaz pro %1$s vypršel",
+ "The public link of %2$s for %1$s expired" : "Veřejný odkaz na %2$s pro %1$s vypršel",
+ "%2$s removed the share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "Shared with %2$s" : "Sdíleno s %2$s",
+ "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
+ "Removed share for %2$s" : "Odstranil(a) sdílení pro %2$s",
+ "%2$s removed share for %3$s" : "%2$s odstranil(a) sdílení pro %3$s",
+ "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
+ "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
+ "Removed share of group %2$s" : "Odstranil(a) sdílení skupině %2$s",
+ "%2$s removed share of group %3$s" : "%2$s odstranil(a) sdílení skupině %3$s",
+ "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
+ "Shared via public link" : "Sdíleno jako veřejný odkaz",
+ "%2$s removed public link" : "%2$s odstranil(a) veřejný odkaz",
+ "Public link expired" : "Veřejný odkaz vypršel",
+ "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel",
+ "Shared by %2$s" : "%2$s sdílel(a)",
+ "Shares" : "Sdílení"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index 9a500fdf2c9..3505b3b07ab 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -91,9 +91,9 @@ OC.L10N.register(
"{actor} shared {file} with you" : "{actor} hat {file} mit dir geteilt",
"%2$s removed you from %1$s" : "Du wurdest durch %2$s von %1$s entfernt",
"{actor} removed you from {file}" : "Du wurdest durch {actor} von {file} entfernt",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Eine Datei oder ein Ordner der per E-Mail oder öffentlich geteilt ist wurde <strong>heruntergeladen</strong>",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Öffentlich oder per E-Mail geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
- "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurden <strong>geteilt</strong>",
"Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht",
"could not delete share" : "Freigabe konnte nicht gelöscht werden",
"Could not delete share" : "Freigabe konnte nicht gelöscht werden",
@@ -138,7 +138,7 @@ OC.L10N.register(
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen...",
"Uploaded files:" : "Hochgeladene Dateien: ",
- "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>",
"You received a new remote share %2$s from %1$s" : "Du hast eine neue Remotefreigabe %2$s von %1$s erhalten",
"You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten",
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
@@ -173,36 +173,6 @@ OC.L10N.register(
"Public link expired" : "öffentlicher Link ist abgelaufen",
"Public link of %2$s expired" : "Öffentlicher Link von %2$s ist abgelaufen",
"Shared by %2$s" : "Geteilt von %2$s",
- "Shares" : "Freigaben",
- "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert",
- "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.",
- "Not allowed to create a federated share with the same user server" : "Teilen mit Nutzern auf dem selben Server via Federated-Cloud ist nicht erlaubt",
- "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat",
- "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein",
- "Storage not valid" : "Speicher ungültig",
- "Couldn't add remote share" : "Entfernte Freigabe kann nicht hinzugefügt werden",
- "Federated sharing" : "Federated-Sharing",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soll die entfernte Freigabe {name} von {owner}@{remote} hinzugefügt werden?",
- "Remote share" : "Entfernte Freigabe",
- "Remote share password" : "Passwort für die entfernte Freigabe",
- "Cancel" : "Abbrechen",
- "Add remote share" : "Entfernte Freigabe hinzufügen",
- "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden",
- "Invalid ownCloud url" : "Ungültige OwnCloud-URL",
- "You received \"/%2$s\" as a remote share from %1$s" : "Du hast \"/%2$s\" als entfernte Freigabe von %1$s erhalten",
- "Accept" : "Akzeptieren",
- "Decline" : "Ablehnen",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID",
- "Federated Cloud Sharing" : "Federated-Cloud-Sharing",
- "Open documentation" : "Dokumentation öffnen",
- "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
- "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Federated Cloud" : "Federated-Cloud",
- "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
- "Share it:" : "Teilen:",
- "Add to your website" : "Zu deiner Webseite hinzufügen",
- "Share with me via Nextcloud" : "Teile mit mir über Nextcloud",
- "HTML Code:" : "HTML-Code:"
+ "Shares" : "Freigaben"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index 9191aa2dafd..95c3f5dd72e 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -89,9 +89,9 @@
"{actor} shared {file} with you" : "{actor} hat {file} mit dir geteilt",
"%2$s removed you from %1$s" : "Du wurdest durch %2$s von %1$s entfernt",
"{actor} removed you from {file}" : "Du wurdest durch {actor} von {file} entfernt",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Eine Datei oder ein Ordner der per E-Mail oder öffentlich geteilt ist wurde <strong>heruntergeladen</strong>",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Öffentlich oder per E-Mail geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt",
- "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurden <strong>geteilt</strong>",
"Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht",
"could not delete share" : "Freigabe konnte nicht gelöscht werden",
"Could not delete share" : "Freigabe konnte nicht gelöscht werden",
@@ -136,7 +136,7 @@
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen...",
"Uploaded files:" : "Hochgeladene Dateien: ",
- "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentlich geteilte Datei / Ordner wurde <strong>heruntergeladen</strong>",
"You received a new remote share %2$s from %1$s" : "Du hast eine neue Remotefreigabe %2$s von %1$s erhalten",
"You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten",
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
@@ -171,36 +171,6 @@
"Public link expired" : "öffentlicher Link ist abgelaufen",
"Public link of %2$s expired" : "Öffentlicher Link von %2$s ist abgelaufen",
"Shared by %2$s" : "Geteilt von %2$s",
- "Shares" : "Freigaben",
- "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert",
- "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.",
- "Not allowed to create a federated share with the same user server" : "Teilen mit Nutzern auf dem selben Server via Federated-Cloud ist nicht erlaubt",
- "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat",
- "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein",
- "Storage not valid" : "Speicher ungültig",
- "Couldn't add remote share" : "Entfernte Freigabe kann nicht hinzugefügt werden",
- "Federated sharing" : "Federated-Sharing",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soll die entfernte Freigabe {name} von {owner}@{remote} hinzugefügt werden?",
- "Remote share" : "Entfernte Freigabe",
- "Remote share password" : "Passwort für die entfernte Freigabe",
- "Cancel" : "Abbrechen",
- "Add remote share" : "Entfernte Freigabe hinzufügen",
- "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden",
- "Invalid ownCloud url" : "Ungültige OwnCloud-URL",
- "You received \"/%2$s\" as a remote share from %1$s" : "Du hast \"/%2$s\" als entfernte Freigabe von %1$s erhalten",
- "Accept" : "Akzeptieren",
- "Decline" : "Ablehnen",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID",
- "Federated Cloud Sharing" : "Federated-Cloud-Sharing",
- "Open documentation" : "Dokumentation öffnen",
- "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
- "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Federated Cloud" : "Federated-Cloud",
- "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
- "Share it:" : "Teilen:",
- "Add to your website" : "Zu deiner Webseite hinzufügen",
- "Share with me via Nextcloud" : "Teile mit mir über Nextcloud",
- "HTML Code:" : "HTML-Code:"
+ "Shares" : "Freigaben"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js
index 5ddda8c48f3..01bcc8ccbe8 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -81,10 +81,10 @@ OC.L10N.register(
"%1$s removed share" : "%1$s hat die Freigabe entfernt",
"{actor} removed share" : "{actor} hat die Freigabe entfernt",
"You shared %1$s with %2$s" : "Sie haben %1$s mit %2$s geteilt",
- "You shared {file} with {user}" : "Du hast {file} mit {user} geteilt",
- "You removed %2$s from %1$s" : "Sie haben die %2$s von %1$s entfernt",
- "You removed {user} from {file}" : "Sie haben die {user} von {file} entfernt",
- "%3$s shared %1$s with %2$s" : "%3$s geteilt %1$s mit %2$s",
+ "You shared {file} with {user}" : "Sie haben {file} mit {user} geteilt",
+ "You removed %2$s from %1$s" : "Sie haben %2$s von %1$s entfernt",
+ "You removed {user} from {file}" : "Sie haben {user} von {file} entfernt",
+ "%3$s shared %1$s with %2$s" : "%3$s hat %1$s mit %2$s geteilt",
"{actor} removed {user} from {file}" : "{actor} hat {user} von {file} entfernt",
"%3$s removed %2$s from %1$s" : "%3$s hat %2$s von %1$s entfernt",
"%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt",
@@ -97,7 +97,7 @@ OC.L10N.register(
"Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht",
"could not delete share" : "Freigabe konnte nicht gelöscht werden",
"Could not delete share" : "Freigabe konnte nicht gelöscht werden",
- "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an",
+ "Please specify a file or folder path" : "Bitte Datei oder Ordner-Pfad eingeben",
"Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht",
"Could not create share" : "Freigabe konnte nicht erstellt werden",
"invalid permissions" : "Ungültige Berechtigung",
@@ -112,7 +112,7 @@ OC.L10N.register(
"Unknown share type" : "Unbekannter Freigabetyp",
"Not a directory" : "Kein Verzeichnis",
"Could not lock path" : "Pfad konnte nicht gesperrt werden",
- "Wrong or no update parameter given" : "Falscher oder kein Updateparameter wurde übergeben",
+ "Wrong or no update parameter given" : "Es wurde ein falscher oder kein Updateparameter übergeben",
"Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden",
"Cannot increase permissions" : "Berechtigungen können nicht erhöht werden",
"%s is publicly shared" : "%s ist öffentlich geteilt",
@@ -144,8 +144,8 @@ OC.L10N.register(
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
"%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
"%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Sie entfernt",
- "Public shared folder %1$s was downloaded" : "Der öffentliche geteilte Ordner %1$s wurde heruntergeladen",
- "Public shared file %1$s was downloaded" : "Die öffentliche geteilte Datei %1$s wurde heruntergeladen",
+ "Public shared folder %1$s was downloaded" : "Der öffentlich geteilte Ordner %1$s wurde heruntergeladen",
+ "Public shared file %1$s was downloaded" : "Die öffentlich geteilte Datei %1$s wurde heruntergeladen",
"%2$s shared %1$s with %3$s" : "%2$s hat %1$s mit %3$s geteilt",
"You removed the share of %2$s for %1$s" : "Sie haben die Freigabe von %2$s für %1$s entfernt",
"%2$s removed the share of %3$s for %1$s" : "%2$s hat die Freigabe von %3$s für %1$s entfernt",
@@ -166,43 +166,13 @@ OC.L10N.register(
"Shared with group %2$s" : "Geteilt mit der Gruppe %2$s",
"Shared with group %3$s by %2$s" : "Geteilt mit der Gruppe %3$s von %2$s",
"Removed share of group %2$s" : "Freigabe für Gruppe %2$s entfernt",
- "%2$s removed share of group %3$s" : "%2$s hat die Freigabe für Gruppe %3$s entfernt",
+ "%2$s removed share of group %3$s" : "%2$s hat die Freigabe für die Gruppe %3$s entfernt",
"Shared via link by %2$s" : "Geteilt durch einen Link von %2$s",
"Shared via public link" : "Durch einen öffentlichen Link geteilt",
- "%2$s removed public link" : "%2$s hat die Freigabe als Link entfernt",
+ "%2$s removed public link" : "%2$s hat die Freigabe als öffentlichen Link entfernt",
"Public link expired" : "öffentlicher Link ist abgelaufen",
"Public link of %2$s expired" : "Öffentlicher Link von %2$s ist abgelaufen",
"Shared by %2$s" : "Geteilt von %2$s",
- "Shares" : "Geteiltes",
- "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert",
- "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.",
- "Not allowed to create a federated share with the same user server" : "Das Erstellen einer Federated Cloud Freigabe mit dem gleichen Benutzer-Server ist nicht erlaubt",
- "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat",
- "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein",
- "Storage not valid" : "Speicher ungültig",
- "Couldn't add remote share" : "Entfernte Freigabe kann nicht hinzugefügt werden",
- "Federated sharing" : "Federated-Sharing",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Möchten Sie die entfernte Freigabe {name} von {owner}@{remote} hinzufügen? ",
- "Remote share" : "Entfernte Freigabe",
- "Remote share password" : "Passwort für die entfernte Freigabe",
- "Cancel" : "Abbrechen",
- "Add remote share" : "Entfernte Freigabe hinzufügen",
- "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden",
- "Invalid ownCloud url" : "Ungültige Nextcloud-Adresse",
- "You received \"/%2$s\" as a remote share from %1$s" : "Sie haben \"/%2$s\" als Remotefreigabe von %1$s erhalten",
- "Accept" : "Akzeptieren",
- "Decline" : "Ablehnen",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID",
- "Federated Cloud Sharing" : "Federated-Cloud-Sharing",
- "Open documentation" : "Dokumentation öffnen",
- "Allow users on this server to send shares to other servers" : "Gestatten Sie Nutzern dieses Servers Freigaben von anderen Servern zu erhalten",
- "Allow users on this server to receive shares from other servers" : "Erlauben Sie Nutzern dieses Servers Freigaben von anderen Servern zu erhalten",
- "Federated Cloud" : "Federated-Cloud",
- "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
- "Share it:" : "Teilen:",
- "Add to your website" : "Zu Ihrer Web-Seite hinzufügen",
- "Share with me via Nextcloud" : "Teilen Sie mit mir über Nextcloud ",
- "HTML Code:" : "HTML-Code:"
+ "Shares" : "Geteiltes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index 534d7970df7..5c5d6b815b7 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -79,10 +79,10 @@
"%1$s removed share" : "%1$s hat die Freigabe entfernt",
"{actor} removed share" : "{actor} hat die Freigabe entfernt",
"You shared %1$s with %2$s" : "Sie haben %1$s mit %2$s geteilt",
- "You shared {file} with {user}" : "Du hast {file} mit {user} geteilt",
- "You removed %2$s from %1$s" : "Sie haben die %2$s von %1$s entfernt",
- "You removed {user} from {file}" : "Sie haben die {user} von {file} entfernt",
- "%3$s shared %1$s with %2$s" : "%3$s geteilt %1$s mit %2$s",
+ "You shared {file} with {user}" : "Sie haben {file} mit {user} geteilt",
+ "You removed %2$s from %1$s" : "Sie haben %2$s von %1$s entfernt",
+ "You removed {user} from {file}" : "Sie haben {user} von {file} entfernt",
+ "%3$s shared %1$s with %2$s" : "%3$s hat %1$s mit %2$s geteilt",
"{actor} removed {user} from {file}" : "{actor} hat {user} von {file} entfernt",
"%3$s removed %2$s from %1$s" : "%3$s hat %2$s von %1$s entfernt",
"%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt",
@@ -95,7 +95,7 @@
"Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht",
"could not delete share" : "Freigabe konnte nicht gelöscht werden",
"Could not delete share" : "Freigabe konnte nicht gelöscht werden",
- "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an",
+ "Please specify a file or folder path" : "Bitte Datei oder Ordner-Pfad eingeben",
"Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht",
"Could not create share" : "Freigabe konnte nicht erstellt werden",
"invalid permissions" : "Ungültige Berechtigung",
@@ -110,7 +110,7 @@
"Unknown share type" : "Unbekannter Freigabetyp",
"Not a directory" : "Kein Verzeichnis",
"Could not lock path" : "Pfad konnte nicht gesperrt werden",
- "Wrong or no update parameter given" : "Falscher oder kein Updateparameter wurde übergeben",
+ "Wrong or no update parameter given" : "Es wurde ein falscher oder kein Updateparameter übergeben",
"Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden",
"Cannot increase permissions" : "Berechtigungen können nicht erhöht werden",
"%s is publicly shared" : "%s ist öffentlich geteilt",
@@ -142,8 +142,8 @@
"%1$s accepted remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s akzeptiert",
"%1$s declined remote share %2$s" : "%1$s hat die Remotefreigabe von %2$s abgelehnt",
"%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Sie entfernt",
- "Public shared folder %1$s was downloaded" : "Der öffentliche geteilte Ordner %1$s wurde heruntergeladen",
- "Public shared file %1$s was downloaded" : "Die öffentliche geteilte Datei %1$s wurde heruntergeladen",
+ "Public shared folder %1$s was downloaded" : "Der öffentlich geteilte Ordner %1$s wurde heruntergeladen",
+ "Public shared file %1$s was downloaded" : "Die öffentlich geteilte Datei %1$s wurde heruntergeladen",
"%2$s shared %1$s with %3$s" : "%2$s hat %1$s mit %3$s geteilt",
"You removed the share of %2$s for %1$s" : "Sie haben die Freigabe von %2$s für %1$s entfernt",
"%2$s removed the share of %3$s for %1$s" : "%2$s hat die Freigabe von %3$s für %1$s entfernt",
@@ -164,43 +164,13 @@
"Shared with group %2$s" : "Geteilt mit der Gruppe %2$s",
"Shared with group %3$s by %2$s" : "Geteilt mit der Gruppe %3$s von %2$s",
"Removed share of group %2$s" : "Freigabe für Gruppe %2$s entfernt",
- "%2$s removed share of group %3$s" : "%2$s hat die Freigabe für Gruppe %3$s entfernt",
+ "%2$s removed share of group %3$s" : "%2$s hat die Freigabe für die Gruppe %3$s entfernt",
"Shared via link by %2$s" : "Geteilt durch einen Link von %2$s",
"Shared via public link" : "Durch einen öffentlichen Link geteilt",
- "%2$s removed public link" : "%2$s hat die Freigabe als Link entfernt",
+ "%2$s removed public link" : "%2$s hat die Freigabe als öffentlichen Link entfernt",
"Public link expired" : "öffentlicher Link ist abgelaufen",
"Public link of %2$s expired" : "Öffentlicher Link von %2$s ist abgelaufen",
"Shared by %2$s" : "Geteilt von %2$s",
- "Shares" : "Geteiltes",
- "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert",
- "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.",
- "Not allowed to create a federated share with the same user server" : "Das Erstellen einer Federated Cloud Freigabe mit dem gleichen Benutzer-Server ist nicht erlaubt",
- "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat",
- "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein",
- "Storage not valid" : "Speicher ungültig",
- "Couldn't add remote share" : "Entfernte Freigabe kann nicht hinzugefügt werden",
- "Federated sharing" : "Federated-Sharing",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Möchten Sie die entfernte Freigabe {name} von {owner}@{remote} hinzufügen? ",
- "Remote share" : "Entfernte Freigabe",
- "Remote share password" : "Passwort für die entfernte Freigabe",
- "Cancel" : "Abbrechen",
- "Add remote share" : "Entfernte Freigabe hinzufügen",
- "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden",
- "Invalid ownCloud url" : "Ungültige Nextcloud-Adresse",
- "You received \"/%2$s\" as a remote share from %1$s" : "Sie haben \"/%2$s\" als Remotefreigabe von %1$s erhalten",
- "Accept" : "Akzeptieren",
- "Decline" : "Ablehnen",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID",
- "Federated Cloud Sharing" : "Federated-Cloud-Sharing",
- "Open documentation" : "Dokumentation öffnen",
- "Allow users on this server to send shares to other servers" : "Gestatten Sie Nutzern dieses Servers Freigaben von anderen Servern zu erhalten",
- "Allow users on this server to receive shares from other servers" : "Erlauben Sie Nutzern dieses Servers Freigaben von anderen Servern zu erhalten",
- "Federated Cloud" : "Federated-Cloud",
- "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
- "Share it:" : "Teilen:",
- "Add to your website" : "Zu Ihrer Web-Seite hinzufügen",
- "Share with me via Nextcloud" : "Teilen Sie mit mir über Nextcloud ",
- "HTML Code:" : "HTML-Code:"
+ "Shares" : "Geteiltes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index b4309c05685..abada5b6efb 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -173,36 +173,6 @@ OC.L10N.register(
"Public link expired" : "El enlace público ha expirado",
"Public link of %2$s expired" : "El enlace público %2$s ha expirado",
"Shared by %2$s" : "Compartido por %2$s",
- "Shares" : "Compartidos",
- "Server to server sharing is not enabled on this server" : "Compartir entre servidores no está habilitado en este servidor",
- "The mountpoint name contains invalid characters." : "El punto de montaje contiene caracteres inválidos.",
- "Not allowed to create a federated share with the same user server" : "No se permite crear un recurso compartido federado con el mismo servidor del usuario",
- "Invalid or untrusted SSL certificate" : "Certificado SSL no válido o no confiable",
- "Could not authenticate to remote share, password might be wrong" : "No se ha podido autenticar para compartir remotamente, quizás esté mal la contraseña",
- "Storage not valid" : "Almacenamiento inválido",
- "Couldn't add remote share" : "No se ha podido añadir el recurso compartido remoto",
- "Federated sharing" : "Compartido federado",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea añadir el recurso compartido remoto {name} de {owner}@{remote}?",
- "Remote share" : "Recurso compartido remoto",
- "Remote share password" : "Contraseña del recurso compartido remoto",
- "Cancel" : "Cancelar",
- "Add remote share" : "Añadir recurso compartido remoto",
- "No ownCloud installation (7 or higher) found at {remote}" : "No se encontró una instalación de ownCloud (7 o mayor) en {remote}",
- "Invalid ownCloud url" : "URL de ownCloud no válida",
- "You received \"/%2$s\" as a remote share from %1$s" : "Has recibido \"/%2$s\" como recurso compartido remoto de %1$s",
- "Accept" : "Aceptar",
- "Decline" : "Rechazar",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Comparta conmigo a través de mi ID Nube Federada #Nextcloud, ver %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Comparta conmigo a través de mi ID Nube Federada #Nextcloud",
- "Federated Cloud Sharing" : "Compartido en Cloud Federado",
- "Open documentation" : "Documentación abierta",
- "Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
- "Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir recursos compartidos de usuarios de otros servidores",
- "Federated Cloud" : "Nube Federada",
- "Your Federated Cloud ID:" : "Su ID de Nube Federada:",
- "Share it:" : "Compartir:",
- "Add to your website" : "Añadir a su sitio web",
- "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
- "HTML Code:" : "Código HTML:"
+ "Shares" : "Compartidos"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index 8b3481df8ec..64463b90054 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -171,36 +171,6 @@
"Public link expired" : "El enlace público ha expirado",
"Public link of %2$s expired" : "El enlace público %2$s ha expirado",
"Shared by %2$s" : "Compartido por %2$s",
- "Shares" : "Compartidos",
- "Server to server sharing is not enabled on this server" : "Compartir entre servidores no está habilitado en este servidor",
- "The mountpoint name contains invalid characters." : "El punto de montaje contiene caracteres inválidos.",
- "Not allowed to create a federated share with the same user server" : "No se permite crear un recurso compartido federado con el mismo servidor del usuario",
- "Invalid or untrusted SSL certificate" : "Certificado SSL no válido o no confiable",
- "Could not authenticate to remote share, password might be wrong" : "No se ha podido autenticar para compartir remotamente, quizás esté mal la contraseña",
- "Storage not valid" : "Almacenamiento inválido",
- "Couldn't add remote share" : "No se ha podido añadir el recurso compartido remoto",
- "Federated sharing" : "Compartido federado",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea añadir el recurso compartido remoto {name} de {owner}@{remote}?",
- "Remote share" : "Recurso compartido remoto",
- "Remote share password" : "Contraseña del recurso compartido remoto",
- "Cancel" : "Cancelar",
- "Add remote share" : "Añadir recurso compartido remoto",
- "No ownCloud installation (7 or higher) found at {remote}" : "No se encontró una instalación de ownCloud (7 o mayor) en {remote}",
- "Invalid ownCloud url" : "URL de ownCloud no válida",
- "You received \"/%2$s\" as a remote share from %1$s" : "Has recibido \"/%2$s\" como recurso compartido remoto de %1$s",
- "Accept" : "Aceptar",
- "Decline" : "Rechazar",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Comparta conmigo a través de mi ID Nube Federada #Nextcloud, ver %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Comparta conmigo a través de mi ID Nube Federada #Nextcloud",
- "Federated Cloud Sharing" : "Compartido en Cloud Federado",
- "Open documentation" : "Documentación abierta",
- "Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
- "Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir recursos compartidos de usuarios de otros servidores",
- "Federated Cloud" : "Nube Federada",
- "Your Federated Cloud ID:" : "Su ID de Nube Federada:",
- "Share it:" : "Compartir:",
- "Add to your website" : "Añadir a su sitio web",
- "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
- "HTML Code:" : "Código HTML:"
+ "Shares" : "Compartidos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index c82967cc46d..2f9b6c522f5 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"You can upload into this folder" : "Vous pouvez téléverser dans ce dossier",
"No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}",
"Invalid server URL" : "URL serveur invalide",
- "Failed to add the public link to your Nextcloud" : "Echec de l'ajout du lien public à votre Nextcloud",
+ "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud",
"Share" : "Partager",
"No expiration date set" : "Aucune date d'expiration définie",
"Shared by" : "Partagé par",
@@ -97,7 +97,7 @@ OC.L10N.register(
"Wrong share ID, share doesn't exist" : "Mauvais ID de partage, le partage n'existe pas",
"could not delete share" : "impossible de supprimer le partage",
"Could not delete share" : "Impossible de supprimer le partage",
- "Please specify a file or folder path" : "Veuillez spécifier un fichier ou dossier",
+ "Please specify a file or folder path" : "Veuillez indiquer un fichier ou un chemin",
"Wrong path, file/folder doesn't exist" : "Mauvais chemin, Le fichier/dossier n'existe pas",
"Could not create share" : "Impossible de créer le partage",
"invalid permissions" : "permissions invalides",
@@ -173,36 +173,6 @@ OC.L10N.register(
"Public link expired" : "Lien public expiré",
"Public link of %2$s expired" : "Le lien public de %2$s a expiré",
"Shared by %2$s" : "Partagé par %2$s",
- "Shares" : "Partages",
- "Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur",
- "The mountpoint name contains invalid characters." : "Le nom du point de montage contient des caractères invalides.",
- "Not allowed to create a federated share with the same user server" : "Non autorisé à créer un partage fédéré avec un utilisateur du même serveur",
- "Invalid or untrusted SSL certificate" : "Certificat SSL non valable ou non fiable",
- "Could not authenticate to remote share, password might be wrong" : "Impossible de s'authentifier au partage distant, le mot de passe est probablement incorrect",
- "Storage not valid" : "Support de stockage non valide",
- "Couldn't add remote share" : "Impossible d'ajouter le partage distant",
- "Federated sharing" : "Partage fédéré",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Voulez-vous ajouter le partage distant {name} depuis {owner}@{remote} ?",
- "Remote share" : "Partage distant",
- "Remote share password" : "Mot de passe du partage distant",
- "Cancel" : "Annuler",
- "Add remote share" : "Ajouter un partage distant",
- "No ownCloud installation (7 or higher) found at {remote}" : "Aucune installation ownCloud (7 ou supérieur) trouvée sur {remote}",
- "Invalid ownCloud url" : "URL Nextcloud non valide",
- "You received \"/%2$s\" as a remote share from %1$s" : "Vous avez reçu \"/%2$s\" comme partage distant de %1$s",
- "Accept" : "Accepter",
- "Decline" : "Refuser",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partager avec moi avec mon ID de Cloud fédéré #ownCloud, voir %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #ownCloud",
- "Federated Cloud Sharing" : "Federated Cloud Sharing",
- "Open documentation" : "Ouvrir la documentation",
- "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs",
- "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs",
- "Federated Cloud" : "Federated Cloud",
- "Your Federated Cloud ID:" : "Votre identifiant de Cloud Fédéré:",
- "Share it:" : "Partager :",
- "Add to your website" : "Ajouter à votre site web",
- "Share with me via Nextcloud" : "Partagez avec moi via Nextcloud",
- "HTML Code:" : "Code HTML :"
+ "Shares" : "Partages"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index ee85777b00e..85a2eae4870 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -11,7 +11,7 @@
"You can upload into this folder" : "Vous pouvez téléverser dans ce dossier",
"No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}",
"Invalid server URL" : "URL serveur invalide",
- "Failed to add the public link to your Nextcloud" : "Echec de l'ajout du lien public à votre Nextcloud",
+ "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud",
"Share" : "Partager",
"No expiration date set" : "Aucune date d'expiration définie",
"Shared by" : "Partagé par",
@@ -95,7 +95,7 @@
"Wrong share ID, share doesn't exist" : "Mauvais ID de partage, le partage n'existe pas",
"could not delete share" : "impossible de supprimer le partage",
"Could not delete share" : "Impossible de supprimer le partage",
- "Please specify a file or folder path" : "Veuillez spécifier un fichier ou dossier",
+ "Please specify a file or folder path" : "Veuillez indiquer un fichier ou un chemin",
"Wrong path, file/folder doesn't exist" : "Mauvais chemin, Le fichier/dossier n'existe pas",
"Could not create share" : "Impossible de créer le partage",
"invalid permissions" : "permissions invalides",
@@ -171,36 +171,6 @@
"Public link expired" : "Lien public expiré",
"Public link of %2$s expired" : "Le lien public de %2$s a expiré",
"Shared by %2$s" : "Partagé par %2$s",
- "Shares" : "Partages",
- "Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur",
- "The mountpoint name contains invalid characters." : "Le nom du point de montage contient des caractères invalides.",
- "Not allowed to create a federated share with the same user server" : "Non autorisé à créer un partage fédéré avec un utilisateur du même serveur",
- "Invalid or untrusted SSL certificate" : "Certificat SSL non valable ou non fiable",
- "Could not authenticate to remote share, password might be wrong" : "Impossible de s'authentifier au partage distant, le mot de passe est probablement incorrect",
- "Storage not valid" : "Support de stockage non valide",
- "Couldn't add remote share" : "Impossible d'ajouter le partage distant",
- "Federated sharing" : "Partage fédéré",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Voulez-vous ajouter le partage distant {name} depuis {owner}@{remote} ?",
- "Remote share" : "Partage distant",
- "Remote share password" : "Mot de passe du partage distant",
- "Cancel" : "Annuler",
- "Add remote share" : "Ajouter un partage distant",
- "No ownCloud installation (7 or higher) found at {remote}" : "Aucune installation ownCloud (7 ou supérieur) trouvée sur {remote}",
- "Invalid ownCloud url" : "URL Nextcloud non valide",
- "You received \"/%2$s\" as a remote share from %1$s" : "Vous avez reçu \"/%2$s\" comme partage distant de %1$s",
- "Accept" : "Accepter",
- "Decline" : "Refuser",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partager avec moi avec mon ID de Cloud fédéré #ownCloud, voir %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #ownCloud",
- "Federated Cloud Sharing" : "Federated Cloud Sharing",
- "Open documentation" : "Ouvrir la documentation",
- "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs",
- "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs",
- "Federated Cloud" : "Federated Cloud",
- "Your Federated Cloud ID:" : "Votre identifiant de Cloud Fédéré:",
- "Share it:" : "Partager :",
- "Add to your website" : "Ajouter à votre site web",
- "Share with me via Nextcloud" : "Partagez avec moi via Nextcloud",
- "HTML Code:" : "Code HTML :"
+ "Shares" : "Partages"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js
index 373946bf602..debb82f3254 100644
--- a/apps/files_sharing/l10n/hu_HU.js
+++ b/apps/files_sharing/l10n/hu_HU.js
@@ -173,36 +173,6 @@ OC.L10N.register(
"Public link expired" : "Nyilvános hivatkozás lejárt",
"Public link of %2$s expired" : "%2$s nyilvános hivatkozása lejárt",
"Shared by %2$s" : "Megosztó: %2$s",
- "Shares" : "Megosztások",
- "Server to server sharing is not enabled on this server" : "A szervertől-szerverig megosztás nem engedélyezett ezen a szerveren",
- "The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz.",
- "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
- "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható SSL certifikáció",
- "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
- "Storage not valid" : "Tároló nem érvényes",
- "Couldn't add remote share" : "Nem sikerült hozzáadni a távoli megosztást",
- "Federated sharing" : "Egyesített megosztás",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Hozzá akarod adni {owner}@{remote} távoli megosztását: {name}?",
- "Remote share" : "Távoli megosztás",
- "Remote share password" : "Távoli megosztás jelszava",
- "Cancel" : "Mégsem",
- "Add remote share" : "Távoli megosztás hozzáadás",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nem található telepített ownCloud (7 vagy újabb) itt: {remote}",
- "Invalid ownCloud url" : "Érvénytelen ownCloud URL",
- "You received \"/%2$s\" as a remote share from %1$s" : "Kaptál egy távoli megosztást: \"/%2$s\", innen: %1$s",
- "Accept" : "Elfogadás",
- "Decline" : "Elutasítás",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Oszd meg velem az #ownCloud Egyesített Felhő Azonosító segítségével, lásd %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Oszd meg velem az #ownCloud Egyesített Felhő Azonosító segítségével",
- "Federated Cloud Sharing" : "Egyesített felhő megosztás",
- "Open documentation" : "Dokumentáció megnyitása",
- "Allow users on this server to send shares to other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
- "Allow users on this server to receive shares from other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
- "Federated Cloud" : "Egyesített felhő",
- "Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
- "Share it:" : "Oszd meg:",
- "Add to your website" : "Add hozzá a weboldaladhoz",
- "Share with me via Nextcloud" : "Oszd meg velem a Nextcloudon",
- "HTML Code:" : "HTML kód:"
+ "Shares" : "Megosztások"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json
index 147bdc6ac37..75ec4969e69 100644
--- a/apps/files_sharing/l10n/hu_HU.json
+++ b/apps/files_sharing/l10n/hu_HU.json
@@ -171,36 +171,6 @@
"Public link expired" : "Nyilvános hivatkozás lejárt",
"Public link of %2$s expired" : "%2$s nyilvános hivatkozása lejárt",
"Shared by %2$s" : "Megosztó: %2$s",
- "Shares" : "Megosztások",
- "Server to server sharing is not enabled on this server" : "A szervertől-szerverig megosztás nem engedélyezett ezen a szerveren",
- "The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz.",
- "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
- "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható SSL certifikáció",
- "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
- "Storage not valid" : "Tároló nem érvényes",
- "Couldn't add remote share" : "Nem sikerült hozzáadni a távoli megosztást",
- "Federated sharing" : "Egyesített megosztás",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Hozzá akarod adni {owner}@{remote} távoli megosztását: {name}?",
- "Remote share" : "Távoli megosztás",
- "Remote share password" : "Távoli megosztás jelszava",
- "Cancel" : "Mégsem",
- "Add remote share" : "Távoli megosztás hozzáadás",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nem található telepített ownCloud (7 vagy újabb) itt: {remote}",
- "Invalid ownCloud url" : "Érvénytelen ownCloud URL",
- "You received \"/%2$s\" as a remote share from %1$s" : "Kaptál egy távoli megosztást: \"/%2$s\", innen: %1$s",
- "Accept" : "Elfogadás",
- "Decline" : "Elutasítás",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Oszd meg velem az #ownCloud Egyesített Felhő Azonosító segítségével, lásd %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Oszd meg velem az #ownCloud Egyesített Felhő Azonosító segítségével",
- "Federated Cloud Sharing" : "Egyesített felhő megosztás",
- "Open documentation" : "Dokumentáció megnyitása",
- "Allow users on this server to send shares to other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
- "Allow users on this server to receive shares from other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
- "Federated Cloud" : "Egyesített felhő",
- "Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
- "Share it:" : "Oszd meg:",
- "Add to your website" : "Add hozzá a weboldaladhoz",
- "Share with me via Nextcloud" : "Oszd meg velem a Nextcloudon",
- "HTML Code:" : "HTML kód:"
+ "Shares" : "Megosztások"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 8dfee4bb302..b216a0ccacc 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -173,36 +173,6 @@ OC.L10N.register(
"Public link expired" : "Collegamento pubblico scaduto",
"Public link of %2$s expired" : "il collegamento pubblico di %2$s è scaduto",
"Shared by %2$s" : "Condivisa da %2$s",
- "Shares" : "Condivisioni",
- "Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server",
- "The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.",
- "Not allowed to create a federated share with the same user server" : "Non è consentito creare una condivisione federata con lo stesso server dell'utente",
- "Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile",
- "Could not authenticate to remote share, password might be wrong" : "Impossibile autenticarsi sulla condivisione remota, la password potrebbe essere errata",
- "Storage not valid" : "Archiviazione non valida",
- "Couldn't add remote share" : "Impossibile aggiungere la condivisione remota",
- "Federated sharing" : "Condivisione federata",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vuoi aggiungere la condivisione remota {name} da {owner}@{remote}?",
- "Remote share" : "Condivisione remota",
- "Remote share password" : "Password della condivisione remota",
- "Cancel" : "Annulla",
- "Add remote share" : "Aggiungi condivisione remota",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nessuna installazione di ownCloud (7 o superiore) trovata su {remote}",
- "Invalid ownCloud url" : "URL di ownCloud non valido",
- "You received \"/%2$s\" as a remote share from %1$s" : "Hai ricevuto \"/%2$s\" come condivisione remota da %1$s",
- "Accept" : "Accetta",
- "Decline" : "Rifiuta",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud, vedi %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud",
- "Federated Cloud Sharing" : "Condivisione cloud federata",
- "Open documentation" : "Apri la documentazione",
- "Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server",
- "Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server",
- "Federated Cloud" : "Cloud federata",
- "Your Federated Cloud ID:" : "Il tuo ID di cloud federata:",
- "Share it:" : "Condividilo:",
- "Add to your website" : "Aggiungi al tuo sito web",
- "Share with me via Nextcloud" : "Condividi con me tramite Nextcloud",
- "HTML Code:" : "Codice HTML:"
+ "Shares" : "Condivisioni"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index 2125faa6c52..dc2f25f1676 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -171,36 +171,6 @@
"Public link expired" : "Collegamento pubblico scaduto",
"Public link of %2$s expired" : "il collegamento pubblico di %2$s è scaduto",
"Shared by %2$s" : "Condivisa da %2$s",
- "Shares" : "Condivisioni",
- "Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server",
- "The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.",
- "Not allowed to create a federated share with the same user server" : "Non è consentito creare una condivisione federata con lo stesso server dell'utente",
- "Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile",
- "Could not authenticate to remote share, password might be wrong" : "Impossibile autenticarsi sulla condivisione remota, la password potrebbe essere errata",
- "Storage not valid" : "Archiviazione non valida",
- "Couldn't add remote share" : "Impossibile aggiungere la condivisione remota",
- "Federated sharing" : "Condivisione federata",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vuoi aggiungere la condivisione remota {name} da {owner}@{remote}?",
- "Remote share" : "Condivisione remota",
- "Remote share password" : "Password della condivisione remota",
- "Cancel" : "Annulla",
- "Add remote share" : "Aggiungi condivisione remota",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nessuna installazione di ownCloud (7 o superiore) trovata su {remote}",
- "Invalid ownCloud url" : "URL di ownCloud non valido",
- "You received \"/%2$s\" as a remote share from %1$s" : "Hai ricevuto \"/%2$s\" come condivisione remota da %1$s",
- "Accept" : "Accetta",
- "Decline" : "Rifiuta",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud, vedi %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud",
- "Federated Cloud Sharing" : "Condivisione cloud federata",
- "Open documentation" : "Apri la documentazione",
- "Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server",
- "Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server",
- "Federated Cloud" : "Cloud federata",
- "Your Federated Cloud ID:" : "Il tuo ID di cloud federata:",
- "Share it:" : "Condividilo:",
- "Add to your website" : "Aggiungi al tuo sito web",
- "Share with me via Nextcloud" : "Condividi con me tramite Nextcloud",
- "HTML Code:" : "Codice HTML:"
+ "Shares" : "Condivisioni"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/nb_NO.js b/apps/files_sharing/l10n/nb_NO.js
index 3a1abf17889..c9e842c5d8b 100644
--- a/apps/files_sharing/l10n/nb_NO.js
+++ b/apps/files_sharing/l10n/nb_NO.js
@@ -18,48 +18,82 @@ OC.L10N.register(
"No expiration date set" : "Ingen utløpsdato er satt",
"Shared by" : "Delt av",
"Sharing" : "Deling",
- "A file or folder has been <strong>shared</strong>" : "En fil eller mappe ble <strong>delt</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen tjener</strong>",
- "You received a new remote share %2$s from %1$s" : "Du mottok en ny ekstern deling %2$s fra %1$s",
- "You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s",
- "%1$s accepted remote share %2$s" : "%1$s aksepterte ekstern deling %2$s",
- "%1$s declined remote share %2$s" : "%1$s avviste ekstern deling %2$s",
- "%1$s unshared %2$s from you" : "%1$s fjernet deling %2$s fra deg",
- "Public shared folder %1$s was downloaded" : "Offentlig delt mappe %1$s ble lastet ned",
- "Public shared file %1$s was downloaded" : "Offentlig delt fil %1$s ble lastet ned",
- "You shared %1$s with %2$s" : "Du delte %1$s med %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s delte %1$s med %3$s",
- "You removed the share of %2$s for %1$s" : "Du fjernet deling av %2$s for %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s fjernet deling av %3$s for %1$s",
- "You shared %1$s with group %2$s" : "Du delte %1$s med gruppe %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s delte %1$s med gruppe %3$s",
- "You removed the share of group %2$s for %1$s" : "Du fjernet deling av gruppe %2$s for %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s fjernet deling av gruppe %3$s for %1$s",
- "%2$s shared %1$s via link" : "%2$s delte %1$s via lenke",
- "You shared %1$s via link" : "Du delte %1$s via lenke",
- "You removed the public link for %1$s" : "Du fjernet den offentlige lenken for %1$s",
- "%2$s removed the public link for %1$s" : "%2$s fjernet den offentlige lenken for %1$s",
- "Your public link for %1$s expired" : "Din offentlige lenke for %1$s er utløpt",
- "The public link of %2$s for %1$s expired" : "Den offentlige lenken til %2$s for %1$s er utløpt",
- "%2$s shared %1$s with you" : "%2$s delte %1$s med deg",
- "%2$s removed the share for %1$s" : "%2$s fjernet delingen for %1$s",
+ "File shares" : "Fildelinger",
"Downloaded via public link" : "Nedlastet via offentlig lenke",
- "Shared with %2$s" : "Delt med %2$s",
- "Shared with %3$s by %2$s" : "Delt med %3$s av %2$s",
- "Removed share for %2$s" : "Fjernet deling for %2$s",
- "%2$s removed share for %3$s" : "%2$s fjernet deling for %3$s",
- "Shared with group %2$s" : "Delt med gruppe %2$s",
- "Shared with group %3$s by %2$s" : "Delt med gruppe %3$s av %2$s",
- "Removed share of group %2$s" : "Fjernet deling av gruppe %2$s",
- "%2$s removed share of group %3$s" : "%2$s fjernet deling av gruppe %3$s",
- "Shared via link by %2$s" : "Delt via lenke av %2$s",
- "Shared via public link" : "Delt via offentlig lenke",
+ "Downloaded by %1$s" : "Lastet ned av %1$s",
+ "Downloaded by {email}" : "Lastet ned av {email}",
+ "%1$s downloaded via public link" : "%1$s lastet ned via offentlig lenke",
+ "{file} downloaded via public link" : "{file} lastet ned via offentlig lenke",
+ "%1$s downloaded %2$s" : "%1$s lastet ned %2$s",
+ "{email} downloaded {file}" : "{email} lastet ned {file}",
+ "Shared with group %1$s" : "Delt med gruppen %1$s",
+ "Shared with group {group}" : "Delt med gruppen {group}",
+ "Removed share for group %1$s" : "Fjernet deling for gruppen %1$s",
+ "Removed share for group {group}" : "Fjernet deling for gruppen {group}",
+ "%2$s shared with group %1$s" : "%2$s delt med gruppen %1$s",
+ "{actor} shared with group {group}" : "{actor} delt med gruppen {group}",
+ "%2$s removed share for group %1$s" : "%2$s fjernet deling for gruppen %1$s",
+ "{actor} removed share for group {group}" : "{actor} fjernet deling for gruppen {group}",
+ "You shared %1$s with group %2$s" : "Du delte %1$s med gruppe %2$s",
+ "You shared {file} with group {group}" : "Du delte {file} med gruppen {group}",
+ "You removed group %2$s from %1$s" : "Du fjernet gruppen %2$s fra %1$s",
+ "You removed group {group} from {file}" : "Du fjernet gruppen {group} fra {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s delte %1$s med gruppen %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} delte {file} med gruppen {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s fjernet gruppen %2$s fra %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} fjernet gruppen {group} fra {file}",
+ "Shared as public link" : "Delt som offentlig lenke",
"Removed public link" : "Fjernet offentlig lenke",
- "%2$s removed public link" : "%2$s fjernet offentlig lenke",
- "Public link expired" : "Offentlig lenke er utløpt",
- "Public link of %2$s expired" : "Offentlig lenke til %2$s er utløpt",
- "Shared by %2$s" : "Delt av %2$s",
- "File shares" : "Fildelinger",
+ "%1$s shared as public link" : "%1$s delt som offentlig lenke",
+ "{actor} shared as public link" : "{actor} delte som offentlig lenke",
+ "%1$s removed public link" : "%1$s fjernet offentlig lenke",
+ "{actor} removed public link" : "{actor} fjernet offentlig lenke",
+ "You shared %1$s as public link" : "Du delte %1$s som offentlig lenke",
+ "You shared {file} as public link" : "Du delte {file} som offentlig lenke",
+ "You removed public link for %1$s" : "Du fjernet offentlig lenke for %1$s",
+ "You removed public link for {file}" : "Du fjernet offentlig lenke for {file}",
+ "%2$s shared %1$s as public link" : "%2$s delte %1$s som offentlig lenke",
+ "{actor} shared {file} as public link" : "{actor} delte {file} som offentlig lenke",
+ "%2$s removed public link for %1$s" : "%2$s fjernet offentlig lenke for %1$s",
+ "{actor} removed public link for {file}" : "{actor} fjernet offentlig lenke for {file}",
+ "%1$s accepted the remote share" : "%1$s godtok den offentlige delingen",
+ "{user} accepted the remote share" : "{user} godtok fjerndelingen",
+ "%1$s declined the remote share" : "%1$s avslo fjerndelingen",
+ "{user} declined the remote share" : "{user} avslo fjerndelingen",
+ "You received a new remote share %1$s from %2$s" : "Du har mottatt en ny fjerndeling %1$s fra %2$s",
+ "You received a new remote share {file} from {user}" : "Du har mottatt en ny fjerndeling {file} fra {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s godtok fjerndelingen av %1$s",
+ "{user} accepted the remote share of {file}" : "{user} godtok fjerndelingen av {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s avslo fjerndelingen av %1$s",
+ "{user} declined the remote share of {file}" : "{user} avslo fjerndelingen av {file}",
+ "%2$s unshared %1$s from you" : "%2$s fjernet deling av %1$s med deg",
+ "{user} unshared {file} from you" : "{user} fjernet deling av {file} med deg",
+ "Shared with %1$s" : "Delt med %1$s",
+ "Shared with {user}" : "Delt med {user}",
+ "Removed share for %1$s" : "Fjernet deling med %1$s",
+ "Removed share for {user}" : "Fjernet deling med {user}",
+ "%2$s shared with %1$s" : "%2$s delt med %1$s",
+ "{actor} shared with {user}" : "{actor} delte med {user}",
+ "%2$s removed share for %1$s" : "%2$s fjernet deling med %1$s",
+ "{actor} removed share for {user}" : "{actor} fjernet deling med {user}",
+ "Shared by %1$s" : "Delt av %1$s",
+ "Shared by {actor}" : "Delt av {actor}",
+ "%1$s removed share" : "%1$s fjernet deling",
+ "{actor} removed share" : "{actor} fjernet deling",
+ "You shared %1$s with %2$s" : "Du delte %1$s med %2$s",
+ "You shared {file} with {user}" : "Du delte {file} med {user}",
+ "You removed %2$s from %1$s" : "Du fjernet %2$s fra %1$s",
+ "You removed {user} from {file}" : "Du fjernet {user} fra {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s delte %1$s med %2$s",
+ "{actor} removed {user} from {file}" : "{actor} fjernet {user} fra {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s fjernet %2$s fra %1$s",
+ "%2$s shared %1$s with you" : "%2$s delte %1$s med deg",
+ "{actor} shared {file} with you" : "{actor} delte {file} med deg",
+ "%2$s removed you from %1$s" : "%2$s fjernet deg fra %1$s",
+ "{actor} removed you from {file}" : "{actor} fjernet deg fra {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "En fil eller mappe delt via e-post eller offentlig lenke ble <strong>lastet ned</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen tjener</strong>",
+ "A file or folder has been <strong>shared</strong>" : "En fil eller mappe ble <strong>delt</strong>",
"Wrong share ID, share doesn't exist" : "Feil ressurs ID, ressursen finnes ikke",
"could not delete share" : "kunne ikke slette ressursen",
"Could not delete share" : "Kunne ikke slette ressursen",
@@ -105,36 +139,40 @@ OC.L10N.register(
"Uploading files…" : "Laster opp filer...",
"Uploaded files:" : "Opplastede filer:",
"A public shared file or folder was <strong>downloaded</strong>" : "En offentlig delt fil eller mappe ble <strong>lastet ned</strong>",
- "Shares" : "Delinger",
- "Server to server sharing is not enabled on this server" : "Tjener til tjenerdeling er ikke aktivert på denne tjeneren",
- "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.",
- "Not allowed to create a federated share with the same user server" : "Kan ikke opprette en forent ressurs med samme brukertjener",
- "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke-klarert SSL-sertifikat",
- "Could not authenticate to remote share, password might be wrong" : "Klarte ikke å autentisere mot ekstern deling. Passordet kan være feil",
- "Storage not valid" : "Lagerplass ikke gyldig",
- "Couldn't add remote share" : "Klarte ikke å legge til ekstern ressurs",
- "Federated sharing" : "Sammenknyttet deling",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vil du legge til den eksterne ressursen {name} fra {owner}@{remote}?",
- "Remote share" : "Ekstern ressurs",
- "Remote share password" : "Passord for ekstern ressurs",
- "Cancel" : "Avbryt",
- "Add remote share" : "Legg til ekstern ressurs",
- "No ownCloud installation (7 or higher) found at {remote}" : "Ingen Nextcloud-installasjon (7 eller høyere) funnet på {remote}",
- "Invalid ownCloud url" : "Ugyldig Nextcloud url",
- "You received \"/%2$s\" as a remote share from %1$s" : "Du mottok \"/%2$s\" som en fjerndeling %1$s",
- "Accept" : "Aksepter",
- "Decline" : "Avslå",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky, se %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky",
- "Federated Cloud Sharing" : "Sammenknyttet skydeling",
- "Open documentation" : "Åpne dokumentasjonen",
- "Allow users on this server to send shares to other servers" : "Tillat brukere på denne tjeneren å sende delinger til andre tjenere",
- "Allow users on this server to receive shares from other servers" : "Tillat brukere på denne tjeneren å motta delinger fra andre tjenere",
- "Federated Cloud" : "Sammenknyttet sky",
- "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:",
- "Share it:" : "Del:",
- "Add to your website" : "Legg på nettsiden din",
- "Share with me via Nextcloud" : "Del med meg via Nextcloud",
- "HTML Code:" : "HTML kode:"
+ "You received a new remote share %2$s from %1$s" : "Du mottok en ny ekstern deling %2$s fra %1$s",
+ "You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s",
+ "%1$s accepted remote share %2$s" : "%1$s aksepterte ekstern deling %2$s",
+ "%1$s declined remote share %2$s" : "%1$s avviste ekstern deling %2$s",
+ "%1$s unshared %2$s from you" : "%1$s fjernet deling %2$s fra deg",
+ "Public shared folder %1$s was downloaded" : "Offentlig delt mappe %1$s ble lastet ned",
+ "Public shared file %1$s was downloaded" : "Offentlig delt fil %1$s ble lastet ned",
+ "%2$s shared %1$s with %3$s" : "%2$s delte %1$s med %3$s",
+ "You removed the share of %2$s for %1$s" : "Du fjernet deling av %2$s for %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s fjernet deling av %3$s for %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s delte %1$s med gruppe %3$s",
+ "You removed the share of group %2$s for %1$s" : "Du fjernet deling av gruppe %2$s for %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s fjernet deling av gruppe %3$s for %1$s",
+ "%2$s shared %1$s via link" : "%2$s delte %1$s via lenke",
+ "You shared %1$s via link" : "Du delte %1$s via lenke",
+ "You removed the public link for %1$s" : "Du fjernet den offentlige lenken for %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s fjernet den offentlige lenken for %1$s",
+ "Your public link for %1$s expired" : "Din offentlige lenke for %1$s er utløpt",
+ "The public link of %2$s for %1$s expired" : "Den offentlige lenken til %2$s for %1$s er utløpt",
+ "%2$s removed the share for %1$s" : "%2$s fjernet delingen for %1$s",
+ "Shared with %2$s" : "Delt med %2$s",
+ "Shared with %3$s by %2$s" : "Delt med %3$s av %2$s",
+ "Removed share for %2$s" : "Fjernet deling for %2$s",
+ "%2$s removed share for %3$s" : "%2$s fjernet deling for %3$s",
+ "Shared with group %2$s" : "Delt med gruppe %2$s",
+ "Shared with group %3$s by %2$s" : "Delt med gruppe %3$s av %2$s",
+ "Removed share of group %2$s" : "Fjernet deling av gruppe %2$s",
+ "%2$s removed share of group %3$s" : "%2$s fjernet deling av gruppe %3$s",
+ "Shared via link by %2$s" : "Delt via lenke av %2$s",
+ "Shared via public link" : "Delt via offentlig lenke",
+ "%2$s removed public link" : "%2$s fjernet offentlig lenke",
+ "Public link expired" : "Offentlig lenke er utløpt",
+ "Public link of %2$s expired" : "Offentlig lenke til %2$s er utløpt",
+ "Shared by %2$s" : "Delt av %2$s",
+ "Shares" : "Delinger"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nb_NO.json b/apps/files_sharing/l10n/nb_NO.json
index 2811c6ad66d..bc829079db6 100644
--- a/apps/files_sharing/l10n/nb_NO.json
+++ b/apps/files_sharing/l10n/nb_NO.json
@@ -16,48 +16,82 @@
"No expiration date set" : "Ingen utløpsdato er satt",
"Shared by" : "Delt av",
"Sharing" : "Deling",
- "A file or folder has been <strong>shared</strong>" : "En fil eller mappe ble <strong>delt</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen tjener</strong>",
- "You received a new remote share %2$s from %1$s" : "Du mottok en ny ekstern deling %2$s fra %1$s",
- "You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s",
- "%1$s accepted remote share %2$s" : "%1$s aksepterte ekstern deling %2$s",
- "%1$s declined remote share %2$s" : "%1$s avviste ekstern deling %2$s",
- "%1$s unshared %2$s from you" : "%1$s fjernet deling %2$s fra deg",
- "Public shared folder %1$s was downloaded" : "Offentlig delt mappe %1$s ble lastet ned",
- "Public shared file %1$s was downloaded" : "Offentlig delt fil %1$s ble lastet ned",
- "You shared %1$s with %2$s" : "Du delte %1$s med %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s delte %1$s med %3$s",
- "You removed the share of %2$s for %1$s" : "Du fjernet deling av %2$s for %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s fjernet deling av %3$s for %1$s",
- "You shared %1$s with group %2$s" : "Du delte %1$s med gruppe %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s delte %1$s med gruppe %3$s",
- "You removed the share of group %2$s for %1$s" : "Du fjernet deling av gruppe %2$s for %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s fjernet deling av gruppe %3$s for %1$s",
- "%2$s shared %1$s via link" : "%2$s delte %1$s via lenke",
- "You shared %1$s via link" : "Du delte %1$s via lenke",
- "You removed the public link for %1$s" : "Du fjernet den offentlige lenken for %1$s",
- "%2$s removed the public link for %1$s" : "%2$s fjernet den offentlige lenken for %1$s",
- "Your public link for %1$s expired" : "Din offentlige lenke for %1$s er utløpt",
- "The public link of %2$s for %1$s expired" : "Den offentlige lenken til %2$s for %1$s er utløpt",
- "%2$s shared %1$s with you" : "%2$s delte %1$s med deg",
- "%2$s removed the share for %1$s" : "%2$s fjernet delingen for %1$s",
+ "File shares" : "Fildelinger",
"Downloaded via public link" : "Nedlastet via offentlig lenke",
- "Shared with %2$s" : "Delt med %2$s",
- "Shared with %3$s by %2$s" : "Delt med %3$s av %2$s",
- "Removed share for %2$s" : "Fjernet deling for %2$s",
- "%2$s removed share for %3$s" : "%2$s fjernet deling for %3$s",
- "Shared with group %2$s" : "Delt med gruppe %2$s",
- "Shared with group %3$s by %2$s" : "Delt med gruppe %3$s av %2$s",
- "Removed share of group %2$s" : "Fjernet deling av gruppe %2$s",
- "%2$s removed share of group %3$s" : "%2$s fjernet deling av gruppe %3$s",
- "Shared via link by %2$s" : "Delt via lenke av %2$s",
- "Shared via public link" : "Delt via offentlig lenke",
+ "Downloaded by %1$s" : "Lastet ned av %1$s",
+ "Downloaded by {email}" : "Lastet ned av {email}",
+ "%1$s downloaded via public link" : "%1$s lastet ned via offentlig lenke",
+ "{file} downloaded via public link" : "{file} lastet ned via offentlig lenke",
+ "%1$s downloaded %2$s" : "%1$s lastet ned %2$s",
+ "{email} downloaded {file}" : "{email} lastet ned {file}",
+ "Shared with group %1$s" : "Delt med gruppen %1$s",
+ "Shared with group {group}" : "Delt med gruppen {group}",
+ "Removed share for group %1$s" : "Fjernet deling for gruppen %1$s",
+ "Removed share for group {group}" : "Fjernet deling for gruppen {group}",
+ "%2$s shared with group %1$s" : "%2$s delt med gruppen %1$s",
+ "{actor} shared with group {group}" : "{actor} delt med gruppen {group}",
+ "%2$s removed share for group %1$s" : "%2$s fjernet deling for gruppen %1$s",
+ "{actor} removed share for group {group}" : "{actor} fjernet deling for gruppen {group}",
+ "You shared %1$s with group %2$s" : "Du delte %1$s med gruppe %2$s",
+ "You shared {file} with group {group}" : "Du delte {file} med gruppen {group}",
+ "You removed group %2$s from %1$s" : "Du fjernet gruppen %2$s fra %1$s",
+ "You removed group {group} from {file}" : "Du fjernet gruppen {group} fra {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s delte %1$s med gruppen %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} delte {file} med gruppen {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s fjernet gruppen %2$s fra %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} fjernet gruppen {group} fra {file}",
+ "Shared as public link" : "Delt som offentlig lenke",
"Removed public link" : "Fjernet offentlig lenke",
- "%2$s removed public link" : "%2$s fjernet offentlig lenke",
- "Public link expired" : "Offentlig lenke er utløpt",
- "Public link of %2$s expired" : "Offentlig lenke til %2$s er utløpt",
- "Shared by %2$s" : "Delt av %2$s",
- "File shares" : "Fildelinger",
+ "%1$s shared as public link" : "%1$s delt som offentlig lenke",
+ "{actor} shared as public link" : "{actor} delte som offentlig lenke",
+ "%1$s removed public link" : "%1$s fjernet offentlig lenke",
+ "{actor} removed public link" : "{actor} fjernet offentlig lenke",
+ "You shared %1$s as public link" : "Du delte %1$s som offentlig lenke",
+ "You shared {file} as public link" : "Du delte {file} som offentlig lenke",
+ "You removed public link for %1$s" : "Du fjernet offentlig lenke for %1$s",
+ "You removed public link for {file}" : "Du fjernet offentlig lenke for {file}",
+ "%2$s shared %1$s as public link" : "%2$s delte %1$s som offentlig lenke",
+ "{actor} shared {file} as public link" : "{actor} delte {file} som offentlig lenke",
+ "%2$s removed public link for %1$s" : "%2$s fjernet offentlig lenke for %1$s",
+ "{actor} removed public link for {file}" : "{actor} fjernet offentlig lenke for {file}",
+ "%1$s accepted the remote share" : "%1$s godtok den offentlige delingen",
+ "{user} accepted the remote share" : "{user} godtok fjerndelingen",
+ "%1$s declined the remote share" : "%1$s avslo fjerndelingen",
+ "{user} declined the remote share" : "{user} avslo fjerndelingen",
+ "You received a new remote share %1$s from %2$s" : "Du har mottatt en ny fjerndeling %1$s fra %2$s",
+ "You received a new remote share {file} from {user}" : "Du har mottatt en ny fjerndeling {file} fra {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s godtok fjerndelingen av %1$s",
+ "{user} accepted the remote share of {file}" : "{user} godtok fjerndelingen av {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s avslo fjerndelingen av %1$s",
+ "{user} declined the remote share of {file}" : "{user} avslo fjerndelingen av {file}",
+ "%2$s unshared %1$s from you" : "%2$s fjernet deling av %1$s med deg",
+ "{user} unshared {file} from you" : "{user} fjernet deling av {file} med deg",
+ "Shared with %1$s" : "Delt med %1$s",
+ "Shared with {user}" : "Delt med {user}",
+ "Removed share for %1$s" : "Fjernet deling med %1$s",
+ "Removed share for {user}" : "Fjernet deling med {user}",
+ "%2$s shared with %1$s" : "%2$s delt med %1$s",
+ "{actor} shared with {user}" : "{actor} delte med {user}",
+ "%2$s removed share for %1$s" : "%2$s fjernet deling med %1$s",
+ "{actor} removed share for {user}" : "{actor} fjernet deling med {user}",
+ "Shared by %1$s" : "Delt av %1$s",
+ "Shared by {actor}" : "Delt av {actor}",
+ "%1$s removed share" : "%1$s fjernet deling",
+ "{actor} removed share" : "{actor} fjernet deling",
+ "You shared %1$s with %2$s" : "Du delte %1$s med %2$s",
+ "You shared {file} with {user}" : "Du delte {file} med {user}",
+ "You removed %2$s from %1$s" : "Du fjernet %2$s fra %1$s",
+ "You removed {user} from {file}" : "Du fjernet {user} fra {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s delte %1$s med %2$s",
+ "{actor} removed {user} from {file}" : "{actor} fjernet {user} fra {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s fjernet %2$s fra %1$s",
+ "%2$s shared %1$s with you" : "%2$s delte %1$s med deg",
+ "{actor} shared {file} with you" : "{actor} delte {file} med deg",
+ "%2$s removed you from %1$s" : "%2$s fjernet deg fra %1$s",
+ "{actor} removed you from {file}" : "{actor} fjernet deg fra {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "En fil eller mappe delt via e-post eller offentlig lenke ble <strong>lastet ned</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen tjener</strong>",
+ "A file or folder has been <strong>shared</strong>" : "En fil eller mappe ble <strong>delt</strong>",
"Wrong share ID, share doesn't exist" : "Feil ressurs ID, ressursen finnes ikke",
"could not delete share" : "kunne ikke slette ressursen",
"Could not delete share" : "Kunne ikke slette ressursen",
@@ -103,36 +137,40 @@
"Uploading files…" : "Laster opp filer...",
"Uploaded files:" : "Opplastede filer:",
"A public shared file or folder was <strong>downloaded</strong>" : "En offentlig delt fil eller mappe ble <strong>lastet ned</strong>",
- "Shares" : "Delinger",
- "Server to server sharing is not enabled on this server" : "Tjener til tjenerdeling er ikke aktivert på denne tjeneren",
- "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.",
- "Not allowed to create a federated share with the same user server" : "Kan ikke opprette en forent ressurs med samme brukertjener",
- "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke-klarert SSL-sertifikat",
- "Could not authenticate to remote share, password might be wrong" : "Klarte ikke å autentisere mot ekstern deling. Passordet kan være feil",
- "Storage not valid" : "Lagerplass ikke gyldig",
- "Couldn't add remote share" : "Klarte ikke å legge til ekstern ressurs",
- "Federated sharing" : "Sammenknyttet deling",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vil du legge til den eksterne ressursen {name} fra {owner}@{remote}?",
- "Remote share" : "Ekstern ressurs",
- "Remote share password" : "Passord for ekstern ressurs",
- "Cancel" : "Avbryt",
- "Add remote share" : "Legg til ekstern ressurs",
- "No ownCloud installation (7 or higher) found at {remote}" : "Ingen Nextcloud-installasjon (7 eller høyere) funnet på {remote}",
- "Invalid ownCloud url" : "Ugyldig Nextcloud url",
- "You received \"/%2$s\" as a remote share from %1$s" : "Du mottok \"/%2$s\" som en fjerndeling %1$s",
- "Accept" : "Aksepter",
- "Decline" : "Avslå",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky, se %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky",
- "Federated Cloud Sharing" : "Sammenknyttet skydeling",
- "Open documentation" : "Åpne dokumentasjonen",
- "Allow users on this server to send shares to other servers" : "Tillat brukere på denne tjeneren å sende delinger til andre tjenere",
- "Allow users on this server to receive shares from other servers" : "Tillat brukere på denne tjeneren å motta delinger fra andre tjenere",
- "Federated Cloud" : "Sammenknyttet sky",
- "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:",
- "Share it:" : "Del:",
- "Add to your website" : "Legg på nettsiden din",
- "Share with me via Nextcloud" : "Del med meg via Nextcloud",
- "HTML Code:" : "HTML kode:"
+ "You received a new remote share %2$s from %1$s" : "Du mottok en ny ekstern deling %2$s fra %1$s",
+ "You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s",
+ "%1$s accepted remote share %2$s" : "%1$s aksepterte ekstern deling %2$s",
+ "%1$s declined remote share %2$s" : "%1$s avviste ekstern deling %2$s",
+ "%1$s unshared %2$s from you" : "%1$s fjernet deling %2$s fra deg",
+ "Public shared folder %1$s was downloaded" : "Offentlig delt mappe %1$s ble lastet ned",
+ "Public shared file %1$s was downloaded" : "Offentlig delt fil %1$s ble lastet ned",
+ "%2$s shared %1$s with %3$s" : "%2$s delte %1$s med %3$s",
+ "You removed the share of %2$s for %1$s" : "Du fjernet deling av %2$s for %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s fjernet deling av %3$s for %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s delte %1$s med gruppe %3$s",
+ "You removed the share of group %2$s for %1$s" : "Du fjernet deling av gruppe %2$s for %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s fjernet deling av gruppe %3$s for %1$s",
+ "%2$s shared %1$s via link" : "%2$s delte %1$s via lenke",
+ "You shared %1$s via link" : "Du delte %1$s via lenke",
+ "You removed the public link for %1$s" : "Du fjernet den offentlige lenken for %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s fjernet den offentlige lenken for %1$s",
+ "Your public link for %1$s expired" : "Din offentlige lenke for %1$s er utløpt",
+ "The public link of %2$s for %1$s expired" : "Den offentlige lenken til %2$s for %1$s er utløpt",
+ "%2$s removed the share for %1$s" : "%2$s fjernet delingen for %1$s",
+ "Shared with %2$s" : "Delt med %2$s",
+ "Shared with %3$s by %2$s" : "Delt med %3$s av %2$s",
+ "Removed share for %2$s" : "Fjernet deling for %2$s",
+ "%2$s removed share for %3$s" : "%2$s fjernet deling for %3$s",
+ "Shared with group %2$s" : "Delt med gruppe %2$s",
+ "Shared with group %3$s by %2$s" : "Delt med gruppe %3$s av %2$s",
+ "Removed share of group %2$s" : "Fjernet deling av gruppe %2$s",
+ "%2$s removed share of group %3$s" : "%2$s fjernet deling av gruppe %3$s",
+ "Shared via link by %2$s" : "Delt via lenke av %2$s",
+ "Shared via public link" : "Delt via offentlig lenke",
+ "%2$s removed public link" : "%2$s fjernet offentlig lenke",
+ "Public link expired" : "Offentlig lenke er utløpt",
+ "Public link of %2$s expired" : "Offentlig lenke til %2$s er utløpt",
+ "Shared by %2$s" : "Delt av %2$s",
+ "Shares" : "Delinger"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js
index 78e9c9d6aef..e5ba0ad7c21 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -173,36 +173,6 @@ OC.L10N.register(
"Public link expired" : "Openbare link is verlopen",
"Public link of %2$s expired" : "Openbare link van %2$s is verlopen",
"Shared by %2$s" : "Gedeeld door %2$s",
- "Shares" : "Gedeeld",
- "Server to server sharing is not enabled on this server" : "Server met server delen is niet geactiveerd op deze server",
- "The mountpoint name contains invalid characters." : "De naam van het mountpoint bevat ongeldige karakters.",
- "Not allowed to create a federated share with the same user server" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken",
- "Invalid or untrusted SSL certificate" : "Ongeldig of niet vertrouwd SSL-certificaat",
- "Could not authenticate to remote share, password might be wrong" : "Kon niet authenticeren bij externe share, misschien verkeerd wachtwoord",
- "Storage not valid" : "Opslag ongeldig",
- "Couldn't add remote share" : "Kon geen externe share toevoegen",
- "Federated sharing" : "Gefedereerd delen",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Wil je de externe share {name} van {owner}@{remote} toevoegen?",
- "Remote share" : "Externe share",
- "Remote share password" : "Wachtwoord externe share",
- "Cancel" : "Annuleren",
- "Add remote share" : "Toevoegen externe share",
- "No ownCloud installation (7 or higher) found at {remote}" : "Geen ownCloud installatie (7 of hoger) gevonden op {remote}",
- "Invalid ownCloud url" : "Ongeldige ownCloud url",
- "You received \"/%2$s\" as a remote share from %1$s" : "Je ontving \"/%2$s\" als een externe share van %1$s",
- "Accept" : "Accepteren",
- "Decline" : "Afwijzen",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Deel met mij via mijn #ownCloud gefedereerde Cloud ID, zie %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Deel met mij via mijn #ownCloud gefedereerde Cloud ID",
- "Federated Cloud Sharing" : "Gefedereerd delen in de Cloud",
- "Open documentation" : "Openen documentatie",
- "Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers",
- "Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers",
- "Federated Cloud" : "Gefedereerde Cloud",
- "Your Federated Cloud ID:" : "Je gefedereerde Cloud ID:",
- "Share it:" : "Deel het:",
- "Add to your website" : "Toevoegen aan je website",
- "Share with me via Nextcloud" : "Deel met mij via Nextcloud",
- "HTML Code:" : "HTML Code:"
+ "Shares" : "Gedeeld"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index 57ca2d4dd1a..b3ceedff6be 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -171,36 +171,6 @@
"Public link expired" : "Openbare link is verlopen",
"Public link of %2$s expired" : "Openbare link van %2$s is verlopen",
"Shared by %2$s" : "Gedeeld door %2$s",
- "Shares" : "Gedeeld",
- "Server to server sharing is not enabled on this server" : "Server met server delen is niet geactiveerd op deze server",
- "The mountpoint name contains invalid characters." : "De naam van het mountpoint bevat ongeldige karakters.",
- "Not allowed to create a federated share with the same user server" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken",
- "Invalid or untrusted SSL certificate" : "Ongeldig of niet vertrouwd SSL-certificaat",
- "Could not authenticate to remote share, password might be wrong" : "Kon niet authenticeren bij externe share, misschien verkeerd wachtwoord",
- "Storage not valid" : "Opslag ongeldig",
- "Couldn't add remote share" : "Kon geen externe share toevoegen",
- "Federated sharing" : "Gefedereerd delen",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Wil je de externe share {name} van {owner}@{remote} toevoegen?",
- "Remote share" : "Externe share",
- "Remote share password" : "Wachtwoord externe share",
- "Cancel" : "Annuleren",
- "Add remote share" : "Toevoegen externe share",
- "No ownCloud installation (7 or higher) found at {remote}" : "Geen ownCloud installatie (7 of hoger) gevonden op {remote}",
- "Invalid ownCloud url" : "Ongeldige ownCloud url",
- "You received \"/%2$s\" as a remote share from %1$s" : "Je ontving \"/%2$s\" als een externe share van %1$s",
- "Accept" : "Accepteren",
- "Decline" : "Afwijzen",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Deel met mij via mijn #ownCloud gefedereerde Cloud ID, zie %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Deel met mij via mijn #ownCloud gefedereerde Cloud ID",
- "Federated Cloud Sharing" : "Gefedereerd delen in de Cloud",
- "Open documentation" : "Openen documentatie",
- "Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers",
- "Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers",
- "Federated Cloud" : "Gefedereerde Cloud",
- "Your Federated Cloud ID:" : "Je gefedereerde Cloud ID:",
- "Share it:" : "Deel het:",
- "Add to your website" : "Toevoegen aan je website",
- "Share with me via Nextcloud" : "Deel met mij via Nextcloud",
- "HTML Code:" : "HTML Code:"
+ "Shares" : "Gedeeld"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js
index e1bec669533..0e2339b6581 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -1,55 +1,168 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
- "The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
- "Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
- "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
- "Storage not valid" : "Zasób nie jest prawidłowy",
- "Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
"Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
"Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
"Nothing shared yet" : "Jeszcze nic nie udostępniono",
- "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
+ "Files and folders you share will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
- "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
- "Remote share" : "Zdalny zasób",
- "Remote share password" : "Hasło do zdalnego zasobu",
- "Cancel" : "Anuluj",
- "Add remote share" : "Dodaj zdalny zasób",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nie znaleziono instalacji ownCloud (w wersji 7 lub nowszej) na {remote}",
- "Invalid ownCloud url" : "Błędny adres URL",
+ "Files and folders you share by link will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
+ "You can upload into this folder" : "Możesz przesłać do tego folderu",
+ "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}",
+ "Invalid server URL" : "Błędny adres serwera",
+ "Failed to add the public link to your Nextcloud" : "Nie udało się dodać linku do publicznego Nextcloud",
+ "Share" : "Udostępnij",
+ "No expiration date set" : "Nie ustawiono daty wygaśnięcia",
"Shared by" : "Udostępniane przez",
"Sharing" : "Udostępnianie",
+ "File shares" : "Udziały",
+ "Downloaded via public link" : "Pobierane poprzez link publiczny",
+ "Downloaded by %1$s" : "Pobierane przez %1$s",
+ "Downloaded by {email}" : "Pobierane przez {email}",
+ "%1$s downloaded via public link" : "%1$s pobierane za pośrednictwem łącza publicznego",
+ "{file} downloaded via public link" : "{file} pobierane za pośrednictwem łącza publicznego",
+ "%1$s downloaded %2$s" : "%1$s pobierane %2$s",
+ "{email} downloaded {file}" : "{email} pobierane {file}",
+ "Shared with group %1$s" : "Udostępnione grupie %1$s",
+ "Shared with group {group}" : "Udostępnione grupie {group}",
+ "Removed share for group %1$s" : "Zakończono udostępnianie grupie %1$s",
+ "Removed share for group {group}" : "Zakończono udostępnianie grupie {group}",
+ "%2$s shared with group %1$s" : "%2$s jest udostępniane grupie %1$s",
+ "{actor} shared with group {group}" : "{actor} udostępnił grupie {group}",
+ "%2$s removed share for group %1$s" : "%2$s zakończył udostępnianie grupie %1$s",
+ "{actor} removed share for group {group}" : "{actor} zakończył udostępnianie grupie {group}",
+ "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
+ "You shared {file} with group {group}" : "Udostępniasz {file} grupie {group}",
+ "You removed group %2$s from %1$s" : "Usunąłeś grupę %2$s z %1$s",
+ "You removed group {group} from {file}" : "Usunąłeś grupę {group} z {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s udostępnił %1$s grupie %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} udostępnił {file} grupie {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s usunął grupę %2$s z %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} usunął grupę {group} z {file}",
+ "Shared as public link" : "Udostępnione jako publiczny link",
+ "Removed public link" : "Usunięto link publiczny",
+ "%1$s shared as public link" : "%1$s udostępnione jako publiczny link",
+ "{actor} shared as public link" : "{actor} udostępniony jako publiczny link",
+ "%1$s removed public link" : "%1$s usunąłeś publiczny link",
+ "{actor} removed public link" : "{actor} usunął publiczny link",
+ "You shared %1$s as public link" : "Udostępniasz %1$s jako publiczny link",
+ "You shared {file} as public link" : "Udostępniasz {file} jako publiczny link",
+ "You removed public link for %1$s" : "Usuwasz link publiczny dla %1$s",
+ "You removed public link for {file}" : "Usuwasz link publiczny dla {file}",
+ "%2$s shared %1$s as public link" : "%2$s udostępnił %1$s jako publiczne łącze",
+ "{actor} shared {file} as public link" : "{actor} udostępnił {file} jako publiczne łącze",
+ "%2$s removed public link for %1$s" : "%2$s usunął publiczne łącze do %1$s",
+ "{actor} removed public link for {file}" : "{actor} usunął publiczne łącze do {file}",
+ "%1$s accepted the remote share" : "%1$s zaakceptował zdalny udział",
+ "{user} accepted the remote share" : "{user} zaakceptował zdalny udział",
+ "%1$s declined the remote share" : "%1$s odrzucił zdalny udział",
+ "{user} declined the remote share" : "{user} odrzucił zdalny udział",
+ "You received a new remote share %1$s from %2$s" : "Otrzymałeś nowy zdalny udział %1$s od użytkownika %2$s",
+ "You received a new remote share {file} from {user}" : "Otrzymałeś nowy zdalny udział {file} od użytkownika {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s zaakceptował zdalny udział %1$s",
+ "{user} accepted the remote share of {file}" : "{user} zaakceptował zdalny udział {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odrzucił zdalny udział %1$s",
+ "{user} declined the remote share of {file}" : "{user} odrzucił zadalny udział {file}",
+ "%2$s unshared %1$s from you" : "%2$s przestał ci udostępniać %1$s",
+ "{user} unshared {file} from you" : "{user} przestał ci udostępniać {file}",
+ "Shared with %1$s" : "Udostępnione %1$s",
+ "Shared with {user}" : "Udostępnione użytkownikowi {user}",
+ "Removed share for %1$s" : "Zakończono udostępnianie użytkownikowi %1$s",
+ "Removed share for {user}" : "Zakończono udostępnianie użytkownikowi {user}",
+ "%2$s shared with %1$s" : "%2$s udostępnia użytkownikowi %1$s",
+ "{actor} shared with {user}" : "{actor} udostępnia użytkownikowi {user}",
+ "%2$s removed share for %1$s" : "%2$s usuwa udostępnienie dla użytkownika %1$s",
+ "{actor} removed share for {user}" : "{actor} usuwa udostępnienie dla użytkownika {user}",
+ "Shared by %1$s" : "Udostępnione przez użytkownika %1$s",
+ "Shared by {actor}" : "Udostępnione przez użytkownika {actor}",
+ "%1$s removed share" : "%1$s usunął udostępnienie",
+ "{actor} removed share" : "{actor} usunął udostępnienie",
+ "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
+ "You shared {file} with {user}" : "Współdzielisz {file} z {user}",
+ "You removed %2$s from %1$s" : "Usunąłeś użytkownika %2$s z %1$s",
+ "You removed {user} from {file}" : "Usunąłeś użytkownika {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s udostępnił %1$s użytkownikowi %2$s",
+ "{actor} removed {user} from {file}" : "{actor} usunął użytkownika {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s usunął użytkownika %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
+ "{actor} shared {file} with you" : "{actor} udostępnił ci {file}",
+ "%2$s removed you from %1$s" : "%2$s usunął cię z %1$s",
+ "{actor} removed you from {file}" : "{actor} usunął cie z {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Plik lub folder udostępniony za pomocą maila lub publicznego łącza został <strong>pobrany</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Plik lub folder został udostępniony z <strong>innego serwera</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
+ "Wrong share ID, share doesn't exist" : "Złe ID udziału, udział nie istnieje",
+ "could not delete share" : "nie można usunąć udział",
+ "Could not delete share" : "Nie można usunąć udział",
+ "Please specify a file or folder path" : "Proszę podać pliku lub ścieżkę do folderu",
+ "Wrong path, file/folder doesn't exist" : "Ścieżka nieprawidłowa, plik/folder nie istnieje",
+ "Could not create share" : "Nie można utworzyć udział",
+ "invalid permissions" : "nieprawidłowe uprawnienia",
+ "Please specify a valid user" : "Proszę podać poprawnego użytkownika",
+ "Group sharing is disabled by the administrator" : "Udostępnianie grupy zostało wyłączone przez administratora",
+ "Please specify a valid group" : "Proszę podać prawidłową grupę",
"Public link sharing is disabled by the administrator" : "Udostępnianie linków publicznych zostało zablokowane przez twojego administratora",
"Public upload disabled by the administrator" : "Publiczne wczytywanie zostało zablokowane przez twojego administratora",
"Public upload is only possible for publicly shared folders" : "Publiczne wczytywanie jest możliwe wyłącznie do katalogów publicznych",
- "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
- "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
- "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
- "You shared %1$s via link" : "Udostępniasz %1$s przez link",
- "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
- "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
- "Shares" : "Udziały",
+ "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być YYYY-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Udostępnienie %s nie powiodło się ponieważ backend nie zezwala na udziały typu %s",
+ "Unknown share type" : "Nieznany typ udziału",
+ "Not a directory" : "Nie jest katalogiem",
+ "Could not lock path" : "Nie udało się zablokować ścieżki",
+ "Wrong or no update parameter given" : "Brakujący lub błędny parametr aktualizacji",
+ "Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów",
+ "Cannot increase permissions" : "Nie można zwiększyć uprawnień",
+ "%s is publicly shared" : "%s jest publicznie dostępny",
+ "Share API is disabled" : "API udostępniania jest wyłączone",
"This share is password-protected" : "Udział ten jest chroniony hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
"Password" : "Hasło",
"No entries found in this folder" : "Brak wpisów w tym folderze",
"Name" : "Nazwa",
"Share time" : "Czas współdzielenia",
+ "Expiration date" : "Data wygaśnięcia",
"Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.",
"Reasons might be:" : "Możliwe powody:",
"the item was removed" : "element został usunięty",
"the link expired" : "link wygasł",
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
- "Add to your ownCloud" : "Dodaj do twojego ownCloud",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
"Download %s" : "Pobierz %s",
- "Direct link" : "Bezpośredni link"
+ "Direct link" : "Bezpośredni link",
+ "Upload files to %s" : "Prześlij pliki do %s",
+ "Select or drop files" : "Wybierz i upuść pliki",
+ "Uploading files…" : "Wysyłanie plików...",
+ "Uploaded files:" : "Wysłane pliki:",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Publicznie udostępniony plik lub katalog został <strong>pobrany</strong>",
+ "You received a new remote share %2$s from %1$s" : "Otrzymałeś nowy udział zdalny %2$s z %1$s",
+ "You received a new remote share from %s" : "Otrzymałeś nowy zdalny udział z %s",
+ "%1$s accepted remote share %2$s" : "%1$s zaakceptował zdalny udział %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odrzucił zdalny udział %2$s",
+ "%1$s unshared %2$s from you" : "%1$s zakończył udostępnianie Ci %2$s",
+ "Public shared folder %1$s was downloaded" : "Udostępniony publicznie folder %1$s został pobrany",
+ "Public shared file %1$s was downloaded" : "Udostępniony publicznie plik %1$s został pobrany",
+ "%2$s shared %1$s with %3$s" : "%2$s udostępnił %1$s użytkownikowi %3$s",
+ "You removed the share of %2$s for %1$s" : "Zakończyłeś udostępnianie %2$s użytkownikowi %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s zakończył udostępnianie %3$s użytkownikowi %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s udostępnił %1$s grupie %3$s",
+ "%2$s shared %1$s via link" : "%2$s udostępnił %1$s poprzez łącze",
+ "You shared %1$s via link" : "Udostępniasz %1$s przez link",
+ "Your public link for %1$s expired" : "Twoje publiczne łącze do %1$s wygasło",
+ "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
+ "Shared with %2$s" : "Współdzielone z %2$s",
+ "Shared with %3$s by %2$s" : "Udostępniono użytkownikowi %3$s przez %2$s",
+ "Shared with group %2$s" : "Udostępniono grupie %2$s",
+ "Shared with group %3$s by %2$s" : "Udostępniono grupie %3$s przez użytkownika %2$s",
+ "Shared via link by %2$s" : "Udostępniono za pomocą łącza przez użytkownika %2$s",
+ "Shared via public link" : "Udostępniono przez publiczne łącze",
+ "%2$s removed public link" : "%2$s usunął publiczne łącze",
+ "Public link expired" : "Link publiczny wygasł",
+ "Shared by %2$s" : "Udostępniane przez %2$s",
+ "Shares" : "Udziały"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index 6190871b16f..955222647b3 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -1,53 +1,166 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
- "The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
- "Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
- "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
- "Storage not valid" : "Zasób nie jest prawidłowy",
- "Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
"Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
"Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
"Nothing shared yet" : "Jeszcze nic nie udostępniono",
- "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
+ "Files and folders you share will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
- "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
- "Remote share" : "Zdalny zasób",
- "Remote share password" : "Hasło do zdalnego zasobu",
- "Cancel" : "Anuluj",
- "Add remote share" : "Dodaj zdalny zasób",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nie znaleziono instalacji ownCloud (w wersji 7 lub nowszej) na {remote}",
- "Invalid ownCloud url" : "Błędny adres URL",
+ "Files and folders you share by link will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
+ "You can upload into this folder" : "Możesz przesłać do tego folderu",
+ "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}",
+ "Invalid server URL" : "Błędny adres serwera",
+ "Failed to add the public link to your Nextcloud" : "Nie udało się dodać linku do publicznego Nextcloud",
+ "Share" : "Udostępnij",
+ "No expiration date set" : "Nie ustawiono daty wygaśnięcia",
"Shared by" : "Udostępniane przez",
"Sharing" : "Udostępnianie",
+ "File shares" : "Udziały",
+ "Downloaded via public link" : "Pobierane poprzez link publiczny",
+ "Downloaded by %1$s" : "Pobierane przez %1$s",
+ "Downloaded by {email}" : "Pobierane przez {email}",
+ "%1$s downloaded via public link" : "%1$s pobierane za pośrednictwem łącza publicznego",
+ "{file} downloaded via public link" : "{file} pobierane za pośrednictwem łącza publicznego",
+ "%1$s downloaded %2$s" : "%1$s pobierane %2$s",
+ "{email} downloaded {file}" : "{email} pobierane {file}",
+ "Shared with group %1$s" : "Udostępnione grupie %1$s",
+ "Shared with group {group}" : "Udostępnione grupie {group}",
+ "Removed share for group %1$s" : "Zakończono udostępnianie grupie %1$s",
+ "Removed share for group {group}" : "Zakończono udostępnianie grupie {group}",
+ "%2$s shared with group %1$s" : "%2$s jest udostępniane grupie %1$s",
+ "{actor} shared with group {group}" : "{actor} udostępnił grupie {group}",
+ "%2$s removed share for group %1$s" : "%2$s zakończył udostępnianie grupie %1$s",
+ "{actor} removed share for group {group}" : "{actor} zakończył udostępnianie grupie {group}",
+ "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
+ "You shared {file} with group {group}" : "Udostępniasz {file} grupie {group}",
+ "You removed group %2$s from %1$s" : "Usunąłeś grupę %2$s z %1$s",
+ "You removed group {group} from {file}" : "Usunąłeś grupę {group} z {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s udostępnił %1$s grupie %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} udostępnił {file} grupie {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s usunął grupę %2$s z %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} usunął grupę {group} z {file}",
+ "Shared as public link" : "Udostępnione jako publiczny link",
+ "Removed public link" : "Usunięto link publiczny",
+ "%1$s shared as public link" : "%1$s udostępnione jako publiczny link",
+ "{actor} shared as public link" : "{actor} udostępniony jako publiczny link",
+ "%1$s removed public link" : "%1$s usunąłeś publiczny link",
+ "{actor} removed public link" : "{actor} usunął publiczny link",
+ "You shared %1$s as public link" : "Udostępniasz %1$s jako publiczny link",
+ "You shared {file} as public link" : "Udostępniasz {file} jako publiczny link",
+ "You removed public link for %1$s" : "Usuwasz link publiczny dla %1$s",
+ "You removed public link for {file}" : "Usuwasz link publiczny dla {file}",
+ "%2$s shared %1$s as public link" : "%2$s udostępnił %1$s jako publiczne łącze",
+ "{actor} shared {file} as public link" : "{actor} udostępnił {file} jako publiczne łącze",
+ "%2$s removed public link for %1$s" : "%2$s usunął publiczne łącze do %1$s",
+ "{actor} removed public link for {file}" : "{actor} usunął publiczne łącze do {file}",
+ "%1$s accepted the remote share" : "%1$s zaakceptował zdalny udział",
+ "{user} accepted the remote share" : "{user} zaakceptował zdalny udział",
+ "%1$s declined the remote share" : "%1$s odrzucił zdalny udział",
+ "{user} declined the remote share" : "{user} odrzucił zdalny udział",
+ "You received a new remote share %1$s from %2$s" : "Otrzymałeś nowy zdalny udział %1$s od użytkownika %2$s",
+ "You received a new remote share {file} from {user}" : "Otrzymałeś nowy zdalny udział {file} od użytkownika {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s zaakceptował zdalny udział %1$s",
+ "{user} accepted the remote share of {file}" : "{user} zaakceptował zdalny udział {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odrzucił zdalny udział %1$s",
+ "{user} declined the remote share of {file}" : "{user} odrzucił zadalny udział {file}",
+ "%2$s unshared %1$s from you" : "%2$s przestał ci udostępniać %1$s",
+ "{user} unshared {file} from you" : "{user} przestał ci udostępniać {file}",
+ "Shared with %1$s" : "Udostępnione %1$s",
+ "Shared with {user}" : "Udostępnione użytkownikowi {user}",
+ "Removed share for %1$s" : "Zakończono udostępnianie użytkownikowi %1$s",
+ "Removed share for {user}" : "Zakończono udostępnianie użytkownikowi {user}",
+ "%2$s shared with %1$s" : "%2$s udostępnia użytkownikowi %1$s",
+ "{actor} shared with {user}" : "{actor} udostępnia użytkownikowi {user}",
+ "%2$s removed share for %1$s" : "%2$s usuwa udostępnienie dla użytkownika %1$s",
+ "{actor} removed share for {user}" : "{actor} usuwa udostępnienie dla użytkownika {user}",
+ "Shared by %1$s" : "Udostępnione przez użytkownika %1$s",
+ "Shared by {actor}" : "Udostępnione przez użytkownika {actor}",
+ "%1$s removed share" : "%1$s usunął udostępnienie",
+ "{actor} removed share" : "{actor} usunął udostępnienie",
+ "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
+ "You shared {file} with {user}" : "Współdzielisz {file} z {user}",
+ "You removed %2$s from %1$s" : "Usunąłeś użytkownika %2$s z %1$s",
+ "You removed {user} from {file}" : "Usunąłeś użytkownika {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s udostępnił %1$s użytkownikowi %2$s",
+ "{actor} removed {user} from {file}" : "{actor} usunął użytkownika {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s usunął użytkownika %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
+ "{actor} shared {file} with you" : "{actor} udostępnił ci {file}",
+ "%2$s removed you from %1$s" : "%2$s usunął cię z %1$s",
+ "{actor} removed you from {file}" : "{actor} usunął cie z {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Plik lub folder udostępniony za pomocą maila lub publicznego łącza został <strong>pobrany</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Plik lub folder został udostępniony z <strong>innego serwera</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
+ "Wrong share ID, share doesn't exist" : "Złe ID udziału, udział nie istnieje",
+ "could not delete share" : "nie można usunąć udział",
+ "Could not delete share" : "Nie można usunąć udział",
+ "Please specify a file or folder path" : "Proszę podać pliku lub ścieżkę do folderu",
+ "Wrong path, file/folder doesn't exist" : "Ścieżka nieprawidłowa, plik/folder nie istnieje",
+ "Could not create share" : "Nie można utworzyć udział",
+ "invalid permissions" : "nieprawidłowe uprawnienia",
+ "Please specify a valid user" : "Proszę podać poprawnego użytkownika",
+ "Group sharing is disabled by the administrator" : "Udostępnianie grupy zostało wyłączone przez administratora",
+ "Please specify a valid group" : "Proszę podać prawidłową grupę",
"Public link sharing is disabled by the administrator" : "Udostępnianie linków publicznych zostało zablokowane przez twojego administratora",
"Public upload disabled by the administrator" : "Publiczne wczytywanie zostało zablokowane przez twojego administratora",
"Public upload is only possible for publicly shared folders" : "Publiczne wczytywanie jest możliwe wyłącznie do katalogów publicznych",
- "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
- "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
- "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
- "You shared %1$s via link" : "Udostępniasz %1$s przez link",
- "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
- "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
- "Shares" : "Udziały",
+ "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być YYYY-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Udostępnienie %s nie powiodło się ponieważ backend nie zezwala na udziały typu %s",
+ "Unknown share type" : "Nieznany typ udziału",
+ "Not a directory" : "Nie jest katalogiem",
+ "Could not lock path" : "Nie udało się zablokować ścieżki",
+ "Wrong or no update parameter given" : "Brakujący lub błędny parametr aktualizacji",
+ "Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów",
+ "Cannot increase permissions" : "Nie można zwiększyć uprawnień",
+ "%s is publicly shared" : "%s jest publicznie dostępny",
+ "Share API is disabled" : "API udostępniania jest wyłączone",
"This share is password-protected" : "Udział ten jest chroniony hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
"Password" : "Hasło",
"No entries found in this folder" : "Brak wpisów w tym folderze",
"Name" : "Nazwa",
"Share time" : "Czas współdzielenia",
+ "Expiration date" : "Data wygaśnięcia",
"Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.",
"Reasons might be:" : "Możliwe powody:",
"the item was removed" : "element został usunięty",
"the link expired" : "link wygasł",
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
- "Add to your ownCloud" : "Dodaj do twojego ownCloud",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
"Download %s" : "Pobierz %s",
- "Direct link" : "Bezpośredni link"
+ "Direct link" : "Bezpośredni link",
+ "Upload files to %s" : "Prześlij pliki do %s",
+ "Select or drop files" : "Wybierz i upuść pliki",
+ "Uploading files…" : "Wysyłanie plików...",
+ "Uploaded files:" : "Wysłane pliki:",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Publicznie udostępniony plik lub katalog został <strong>pobrany</strong>",
+ "You received a new remote share %2$s from %1$s" : "Otrzymałeś nowy udział zdalny %2$s z %1$s",
+ "You received a new remote share from %s" : "Otrzymałeś nowy zdalny udział z %s",
+ "%1$s accepted remote share %2$s" : "%1$s zaakceptował zdalny udział %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odrzucił zdalny udział %2$s",
+ "%1$s unshared %2$s from you" : "%1$s zakończył udostępnianie Ci %2$s",
+ "Public shared folder %1$s was downloaded" : "Udostępniony publicznie folder %1$s został pobrany",
+ "Public shared file %1$s was downloaded" : "Udostępniony publicznie plik %1$s został pobrany",
+ "%2$s shared %1$s with %3$s" : "%2$s udostępnił %1$s użytkownikowi %3$s",
+ "You removed the share of %2$s for %1$s" : "Zakończyłeś udostępnianie %2$s użytkownikowi %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s zakończył udostępnianie %3$s użytkownikowi %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s udostępnił %1$s grupie %3$s",
+ "%2$s shared %1$s via link" : "%2$s udostępnił %1$s poprzez łącze",
+ "You shared %1$s via link" : "Udostępniasz %1$s przez link",
+ "Your public link for %1$s expired" : "Twoje publiczne łącze do %1$s wygasło",
+ "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
+ "Shared with %2$s" : "Współdzielone z %2$s",
+ "Shared with %3$s by %2$s" : "Udostępniono użytkownikowi %3$s przez %2$s",
+ "Shared with group %2$s" : "Udostępniono grupie %2$s",
+ "Shared with group %3$s by %2$s" : "Udostępniono grupie %3$s przez użytkownika %2$s",
+ "Shared via link by %2$s" : "Udostępniono za pomocą łącza przez użytkownika %2$s",
+ "Shared via public link" : "Udostępniono przez publiczne łącze",
+ "%2$s removed public link" : "%2$s usunął publiczne łącze",
+ "Public link expired" : "Link publiczny wygasł",
+ "Shared by %2$s" : "Udostępniane przez %2$s",
+ "Shares" : "Udziały"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index fd9ccd7259d..6fe2b4ce50b 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -173,36 +173,6 @@ OC.L10N.register(
"Public link expired" : "O link público expirou",
"Public link of %2$s expired" : "O link público de %2$s expirou",
"Shared by %2$s" : "Compartilhado por %2$s",
- "Shares" : "Compartilhamentos",
- "Server to server sharing is not enabled on this server" : "Servidor de compartilhamento não esta habilitado neste servidor",
- "The mountpoint name contains invalid characters." : "O nome de mountpoint contém caracteres inválidos",
- "Not allowed to create a federated share with the same user server" : "Não é permitido criar um compartilhamento federado com o mesmo nome do servidor",
- "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não-confiável",
- "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar no compartilhamento remoto, a senha pode estar errada",
- "Storage not valid" : "Armazenamento inválido",
- "Couldn't add remote share" : "Não foi possível adicionar o compartilhamento remoto",
- "Federated sharing" : "Compartilhamento federado",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Voce deseja adicionar o compartilhamento remoto {name} de {owner}@{remote}?",
- "Remote share" : "Compartilhamento remoto",
- "Remote share password" : "Senha do compartilhamento remoto",
- "Cancel" : "Cancelar",
- "Add remote share" : "Adicionar compartilhamento remoto",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nenhum instalação (7 ou maior) encontrada em {remote}",
- "Invalid ownCloud url" : "URL invalida",
- "You received \"/%2$s\" as a remote share from %1$s" : "Voce recebeu \"/%2$s\" como um compartilhamento remoto de %1$s",
- "Accept" : "Aceitar",
- "Decline" : "Rejeitar",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo pelo meu #ID federado, veja %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo pelo meu #ID federado",
- "Federated Cloud Sharing" : "Compartilhamento cloud federado",
- "Open documentation" : "Abrir documentação",
- "Allow users on this server to send shares to other servers" : "Permitir que usuários deste servidor enviem compartilhamentos para outros servidores",
- "Allow users on this server to receive shares from other servers" : "Permitir que usuários deste servidor recebem compartilhamentos de outros servidores",
- "Federated Cloud" : "Cloud Federado",
- "Your Federated Cloud ID:" : "Seu ID Federado Cloud",
- "Share it:" : "Compartilhe isso:",
- "Add to your website" : "Adicionar ao seu website",
- "Share with me via Nextcloud" : "Compartilhe comigo via Nextcloud",
- "HTML Code:" : "Código HTML:"
+ "Shares" : "Compartilhamentos"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index 832e12c2356..59536fa6e15 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -171,36 +171,6 @@
"Public link expired" : "O link público expirou",
"Public link of %2$s expired" : "O link público de %2$s expirou",
"Shared by %2$s" : "Compartilhado por %2$s",
- "Shares" : "Compartilhamentos",
- "Server to server sharing is not enabled on this server" : "Servidor de compartilhamento não esta habilitado neste servidor",
- "The mountpoint name contains invalid characters." : "O nome de mountpoint contém caracteres inválidos",
- "Not allowed to create a federated share with the same user server" : "Não é permitido criar um compartilhamento federado com o mesmo nome do servidor",
- "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não-confiável",
- "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar no compartilhamento remoto, a senha pode estar errada",
- "Storage not valid" : "Armazenamento inválido",
- "Couldn't add remote share" : "Não foi possível adicionar o compartilhamento remoto",
- "Federated sharing" : "Compartilhamento federado",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Voce deseja adicionar o compartilhamento remoto {name} de {owner}@{remote}?",
- "Remote share" : "Compartilhamento remoto",
- "Remote share password" : "Senha do compartilhamento remoto",
- "Cancel" : "Cancelar",
- "Add remote share" : "Adicionar compartilhamento remoto",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nenhum instalação (7 ou maior) encontrada em {remote}",
- "Invalid ownCloud url" : "URL invalida",
- "You received \"/%2$s\" as a remote share from %1$s" : "Voce recebeu \"/%2$s\" como um compartilhamento remoto de %1$s",
- "Accept" : "Aceitar",
- "Decline" : "Rejeitar",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo pelo meu #ID federado, veja %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo pelo meu #ID federado",
- "Federated Cloud Sharing" : "Compartilhamento cloud federado",
- "Open documentation" : "Abrir documentação",
- "Allow users on this server to send shares to other servers" : "Permitir que usuários deste servidor enviem compartilhamentos para outros servidores",
- "Allow users on this server to receive shares from other servers" : "Permitir que usuários deste servidor recebem compartilhamentos de outros servidores",
- "Federated Cloud" : "Cloud Federado",
- "Your Federated Cloud ID:" : "Seu ID Federado Cloud",
- "Share it:" : "Compartilhe isso:",
- "Add to your website" : "Adicionar ao seu website",
- "Share with me via Nextcloud" : "Compartilhe comigo via Nextcloud",
- "HTML Code:" : "Código HTML:"
+ "Shares" : "Compartilhamentos"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index 239178f6df6..e12622cd00e 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -10,56 +10,90 @@ OC.L10N.register(
"Files and folders you share will show up here" : "Здесь появятся файлы и каталоги, которыми вы поделитесь",
"No shared links" : "Нет общих ссылок",
"Files and folders you share by link will show up here" : "Здесь появятся файлы и каталоги, ссылкой на которые вы поделитесь",
- "You can upload into this folder" : "Вы можете загружать в эту папку",
+ "You can upload into this folder" : "Вы можете загружать в этот каталог",
"No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}",
"Invalid server URL" : "Неверный URL сервера",
- "Failed to add the public link to your Nextcloud" : "Не получилось добавить публичную ссылку на ваш Nextcloud",
- "Share" : "Открыть доступ",
+ "Failed to add the public link to your Nextcloud" : "Не получилось добавить общедоступную ссылку в ваш Nextcloud",
+ "Share" : "Поделиться",
"No expiration date set" : "Дата истечения не установлена",
"Shared by" : "Поделился",
"Sharing" : "Общий доступ",
- "A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог",
- "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
- "You received a new remote share %2$s from %1$s" : "Вы получили новый удаленный общий ресурс %2$s от %1$s",
- "You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом",
- "%1$s accepted remote share %2$s" : "%1$s принял удаленный общий ресурс %2$s",
- "%1$s declined remote share %2$s" : "%1$s отклонил удаленный общий ресурс %2$s",
- "%1$s unshared %2$s from you" : "%1$s закрыл для вас доступ к %2$s ",
- "Public shared folder %1$s was downloaded" : "Общий каталог %1$s был скачан",
- "Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
- "You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s поделился %1$s с %3$s",
- "You removed the share of %2$s for %1$s" : "Вы удалили общий доступ к %2$s для %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s удалил общий доступ к %3$s для %1$s",
+ "File shares" : "Файловые ресурсы общего доступа",
+ "Downloaded via public link" : "Скачано по открытой ссылке",
+ "Downloaded by %1$s" : "Скачано %1$s",
+ "Downloaded by {email}" : "Скачано {email}",
+ "%1$s downloaded via public link" : "%1$s скачано по общедоступной ссылке",
+ "{file} downloaded via public link" : "{file} скачан по общедоступной ссылке",
+ "%1$s downloaded %2$s" : "%1$s скачан %2$s",
+ "{email} downloaded {file}" : "{email} скачал {file}",
+ "Shared with group %1$s" : "Поделился с группой %1$s",
+ "Shared with group {group}" : "Поделился с группой {group}",
+ "Removed share for group %1$s" : "Закрыт общий доступ для группы %1$s",
+ "Removed share for group {group}" : "Закрыт общий доступ для группы {group}",
+ "%2$s shared with group %1$s" : "%2$s поделился с группой %1$s",
+ "{actor} shared with group {group}" : "{actor} поделился с группой {group}",
+ "%2$s removed share for group %1$s" : "%2$s удалил общий доступ для группы %1$s",
+ "{actor} removed share for group {group}" : "{actor} закрыл общий доступ для группы {group}",
"You shared %1$s with group %2$s" : "Вы поделились %1$s с группой %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s поделился %1$s с группой %3$s",
- "You removed the share of group %2$s for %1$s" : "Вы удалили общий доступ к группе %2$s для %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s удалил общий доступ к группе %3$s для %1$s",
- "%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
- "You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
- "You removed the public link for %1$s" : "Вы удалили публичную ссылку к %1$s",
- "%2$s removed the public link for %1$s" : "%2$s удалил публичную ссылку к %1$s",
- "Your public link for %1$s expired" : "Срок действия Вашей публичной ссылки к %1$s закончился",
- "The public link of %2$s for %1$s expired" : "Срок действия публичной ссылки к %2$s для %1$s закончился",
+ "You shared {file} with group {group}" : "Вы поделились {file} с группой {group}",
+ "You removed group %2$s from %1$s" : "Вы удалили группу %2$s из %1$s",
+ "You removed group {group} from {file}" : "Вы удалили группу {group} из {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s поделился %1$s с группой %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} поделился {file} с группой {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s удалил группу %2$s из %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} удалил группу {group} из {file}",
+ "Shared as public link" : "Поделился общедоступной ссылкой",
+ "Removed public link" : "Удалена общедоступная ссылка",
+ "%1$s shared as public link" : "%1$s поделился общедоступной ссылкой",
+ "{actor} shared as public link" : "{actor} поделился общедоступной ссылкой",
+ "%1$s removed public link" : "%1$s удалил общедоступной сслыку",
+ "{actor} removed public link" : "{actor} удалил общедоступной ссылку",
+ "You shared %1$s as public link" : "Вы поделись %1$s в виде общедоступной ссылки",
+ "You shared {file} as public link" : "Вы поделись {file} в виде общедоступной ссылки",
+ "You removed public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "You removed public link for {file}" : "Вы удалили общедоступную ссылку к {file}",
+ "%2$s shared %1$s as public link" : "%2$s поделился %1$s в виде общедоступной ссылки",
+ "{actor} shared {file} as public link" : "{actor} поделился {file} в виде общедоступной ссылки",
+ "%2$s removed public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "{actor} removed public link for {file}" : "{actor} удалил общедоступную ссылку к {file}",
+ "%1$s accepted the remote share" : "%1$s принял удаленный общий ресурс",
+ "{user} accepted the remote share" : "{user} принял удаленный общий ресурс",
+ "%1$s declined the remote share" : "%1$s отклонил удаленный общий ресурс",
+ "{user} declined the remote share" : "{user} отклонил удаленный общий ресурс",
+ "You received a new remote share %1$s from %2$s" : "Вы получили новый удаленный общий ресурс %1$s от %2$s",
+ "You received a new remote share {file} from {user}" : "Вы получили новый удаленный общий ресурс {file} от {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s принял удаленный общий ресурс %1$s",
+ "{user} accepted the remote share of {file}" : "{user} принял удаленный общий ресурс {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s отклонил удаленный общий ресурс %1$s",
+ "{user} declined the remote share of {file}" : "{user} отклонил удаленный общий ресурс {file}",
+ "%2$s unshared %1$s from you" : "%2$s закрыл для вас доступ к %1$s ",
+ "{user} unshared {file} from you" : "{user} закрыл для вас доступ к {file}",
+ "Shared with %1$s" : "Поделился с %1$s",
+ "Shared with {user}" : "Поделился с {user}",
+ "Removed share for %1$s" : "Закрыт общий доступ для %1$s",
+ "Removed share for {user}" : "Закрыт общий доступ для {user}",
+ "%2$s shared with %1$s" : "%2$s поделился с %1$s",
+ "{actor} shared with {user}" : "{actor} поделился с {user}",
+ "%2$s removed share for %1$s" : "%2$s закрыл общий доступ к %1$s",
+ "{actor} removed share for {user}" : "{actor} закрыл общий доступ для {user}",
+ "Shared by %1$s" : "Поделился через %1$s",
+ "Shared by {actor}" : "Поделился через {actor}",
+ "%1$s removed share" : "%1$s закрыл общий доступ",
+ "{actor} removed share" : "{actor} закрыл общий доступ",
+ "You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s",
+ "You shared {file} with {user}" : "Вы поделились {file} с {user}",
+ "You removed %2$s from %1$s" : "Вы удалили %2$s из %1$s",
+ "You removed {user} from {file}" : "Вы удалили {user} из {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s поделился %1$s с %2$s",
+ "{actor} removed {user} from {file}" : "{actor} удалил {user} из {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s удалил %2$s из %1$s",
"%2$s shared %1$s with you" : "%2$s поделился с вами %1$s",
- "%2$s removed the share for %1$s" : "%2$s удалил общий доступ к %1$s",
- "Downloaded via public link" : "Скачано по открытой ссылке",
- "Shared with %2$s" : "Поделился с %2$s",
- "Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
- "Removed share for %2$s" : "Удалён общий доступ к %2$s",
- "%2$s removed share for %3$s" : "%2$s удалил общий доступ к %3$s",
- "Shared with group %2$s" : "Поделился с группой %2$s",
- "Shared with group %3$s by %2$s" : "Поделился %2$s с группой %3$s",
- "Removed share of group %2$s" : "Удалён общий доступ к группе %2$s",
- "%2$s removed share of group %3$s" : "%2$s удалил общий доступ к группе %3$s",
- "Shared via link by %2$s" : "Поделился ссылкой %2$s",
- "Shared via public link" : "Поделился открытой ссылкой",
- "Removed public link" : "Удалена публичная ссылка",
- "%2$s removed public link" : "%2$s удалил публичную ссылку",
- "Public link expired" : "Срок действия публичной ссылки закончился",
- "Public link of %2$s expired" : "Срок действия публичной ссылки к %2$s закончился",
- "Shared by %2$s" : "Поделился %2$s",
- "Downloaded by %2$s" : "Скачано %2$s",
+ "{actor} shared {file} with you" : "{actor} поделился {file} с вами",
+ "%2$s removed you from %1$s" : "%2$s удалил вас из %1$s",
+ "{actor} removed you from {file}" : "{actor} удалил вас из {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Файл или папка, которыми поделились по электронной почте или общедоступной ссылке, были <strong>скачаны</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
+ "A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог",
"Wrong share ID, share doesn't exist" : "Неверный идентификатор публикации, публикация не существует",
"could not delete share" : "Не удалось удалить общий ресурс",
"Could not delete share" : "Не удалось удалить публикацию",
@@ -81,6 +115,7 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Параметр для изменения неправилен или не задан",
"Can't change permissions for public share links" : "Невозможно изменить права для публикации через ссылку",
"Cannot increase permissions" : "Нельзя увеличить права",
+ "%s is publicly shared" : "%s опубликован",
"Share API is disabled" : "API общего доступа отключён",
"This share is password-protected" : "Общий ресурс защищен паролем",
"The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.",
@@ -104,36 +139,40 @@ OC.L10N.register(
"Uploading files…" : "Загрузка файлов...",
"Uploaded files:" : "Загруженные файлы:",
"A public shared file or folder was <strong>downloaded</strong>" : "<strong>Скачан</strong> общий файл или каталог",
- "Shares" : "События обмена файлами",
- "Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общего доступа",
- "The mountpoint name contains invalid characters." : "Имя точки монтирования содержит недопустимые символы.",
- "Not allowed to create a federated share with the same user server" : "Не допускается создание федеративного общего ресурса с тем же сервером пользователя",
- "Invalid or untrusted SSL certificate" : "Недействительный или недоверенный сертификат SSL",
- "Could not authenticate to remote share, password might be wrong" : "Не удалось произвести аутентификацию для доступа к удалённому хранилищу, возможно неправильно указан пароль",
- "Storage not valid" : "Хранилище недоступно",
- "Couldn't add remote share" : "Невозможно добавить удалённый общий ресурс",
- "Federated sharing" : "Общий доступ из объединенного общего хранилища",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Вы хотите добавить удалённую общую папку {name} из {owner}@{remote}?",
- "Remote share" : "Удаленный общий ресурс",
- "Remote share password" : "Пароль для удаленного общего ресурса",
- "Cancel" : "Отмена",
- "Add remote share" : "Добавить удалённый общий ресурс",
- "No ownCloud installation (7 or higher) found at {remote}" : "На удаленном ресурсе {remote} не установлен ownCloud версии 7 или выше",
- "Invalid ownCloud url" : "Неверный адрес Nextcloud",
- "You received \"/%2$s\" as a remote share from %1$s" : "Вы получили \"/%2$s\" в качестве удалённого ресурса из %1$s",
- "Accept" : "Принять",
- "Decline" : "Отклонить",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #Nextcloud ID в объединении облачных хранилищ, смотрите %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Поделитесь со мной через мой #Nextcloud ID в объединении облачных хранилищ",
- "Federated Cloud Sharing" : "Объединение облачных хранилищ",
- "Open documentation" : "Открыть документацию",
- "Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов",
- "Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов",
- "Federated Cloud" : "Объединение облачных хранилищ",
- "Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:",
- "Share it:" : "Поделиться:",
- "Add to your website" : "Добавить к себе на сайт",
- "Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud",
- "HTML Code:" : "HTML код:"
+ "You received a new remote share %2$s from %1$s" : "Вы получили новый удаленный общий ресурс %2$s от %1$s",
+ "You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом",
+ "%1$s accepted remote share %2$s" : "%1$s принял удаленный общий ресурс %2$s",
+ "%1$s declined remote share %2$s" : "%1$s отклонил удаленный общий ресурс %2$s",
+ "%1$s unshared %2$s from you" : "%1$s закрыл для вас доступ к %2$s ",
+ "Public shared folder %1$s was downloaded" : "Общий каталог %1$s был скачан",
+ "Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
+ "%2$s shared %1$s with %3$s" : "%2$s поделился %1$s с %3$s",
+ "You removed the share of %2$s for %1$s" : "Вы удалили общий доступ к %2$s для %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s удалил общий доступ к %3$s для %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s поделился %1$s с группой %3$s",
+ "You removed the share of group %2$s for %1$s" : "Вы удалили общий доступ к группе %2$s для %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s удалил общий доступ к группе %3$s для %1$s",
+ "%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
+ "You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
+ "You removed the public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "Your public link for %1$s expired" : "Срок действия Вашей общедоступной ссылки к %1$s закончился",
+ "The public link of %2$s for %1$s expired" : "Срок действия общедоступной ссылки к %2$s для %1$s закончился",
+ "%2$s removed the share for %1$s" : "%2$s удалил общий доступ к %1$s",
+ "Shared with %2$s" : "Поделился с %2$s",
+ "Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
+ "Removed share for %2$s" : "Удалён общий доступ к %2$s",
+ "%2$s removed share for %3$s" : "%2$s удалил общий доступ к %3$s",
+ "Shared with group %2$s" : "Поделился с группой %2$s",
+ "Shared with group %3$s by %2$s" : "Поделился %2$s с группой %3$s",
+ "Removed share of group %2$s" : "Удалён общий доступ к группе %2$s",
+ "%2$s removed share of group %3$s" : "%2$s удалил общий доступ к группе %3$s",
+ "Shared via link by %2$s" : "Поделился ссылкой %2$s",
+ "Shared via public link" : "Поделился открытой ссылкой",
+ "%2$s removed public link" : "%2$s удалил общедоступную ссылку",
+ "Public link expired" : "Срок действия общедоступнной ссылки закончился",
+ "Public link of %2$s expired" : "Срок действия общедоступной ссылки к %2$s закончился",
+ "Shared by %2$s" : "Поделился %2$s",
+ "Shares" : "События обмена файлами"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 2548e868c70..fe9b1660292 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -8,56 +8,90 @@
"Files and folders you share will show up here" : "Здесь появятся файлы и каталоги, которыми вы поделитесь",
"No shared links" : "Нет общих ссылок",
"Files and folders you share by link will show up here" : "Здесь появятся файлы и каталоги, ссылкой на которые вы поделитесь",
- "You can upload into this folder" : "Вы можете загружать в эту папку",
+ "You can upload into this folder" : "Вы можете загружать в этот каталог",
"No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}",
"Invalid server URL" : "Неверный URL сервера",
- "Failed to add the public link to your Nextcloud" : "Не получилось добавить публичную ссылку на ваш Nextcloud",
- "Share" : "Открыть доступ",
+ "Failed to add the public link to your Nextcloud" : "Не получилось добавить общедоступную ссылку в ваш Nextcloud",
+ "Share" : "Поделиться",
"No expiration date set" : "Дата истечения не установлена",
"Shared by" : "Поделился",
"Sharing" : "Общий доступ",
- "A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог",
- "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
- "You received a new remote share %2$s from %1$s" : "Вы получили новый удаленный общий ресурс %2$s от %1$s",
- "You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом",
- "%1$s accepted remote share %2$s" : "%1$s принял удаленный общий ресурс %2$s",
- "%1$s declined remote share %2$s" : "%1$s отклонил удаленный общий ресурс %2$s",
- "%1$s unshared %2$s from you" : "%1$s закрыл для вас доступ к %2$s ",
- "Public shared folder %1$s was downloaded" : "Общий каталог %1$s был скачан",
- "Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
- "You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s поделился %1$s с %3$s",
- "You removed the share of %2$s for %1$s" : "Вы удалили общий доступ к %2$s для %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s удалил общий доступ к %3$s для %1$s",
+ "File shares" : "Файловые ресурсы общего доступа",
+ "Downloaded via public link" : "Скачано по открытой ссылке",
+ "Downloaded by %1$s" : "Скачано %1$s",
+ "Downloaded by {email}" : "Скачано {email}",
+ "%1$s downloaded via public link" : "%1$s скачано по общедоступной ссылке",
+ "{file} downloaded via public link" : "{file} скачан по общедоступной ссылке",
+ "%1$s downloaded %2$s" : "%1$s скачан %2$s",
+ "{email} downloaded {file}" : "{email} скачал {file}",
+ "Shared with group %1$s" : "Поделился с группой %1$s",
+ "Shared with group {group}" : "Поделился с группой {group}",
+ "Removed share for group %1$s" : "Закрыт общий доступ для группы %1$s",
+ "Removed share for group {group}" : "Закрыт общий доступ для группы {group}",
+ "%2$s shared with group %1$s" : "%2$s поделился с группой %1$s",
+ "{actor} shared with group {group}" : "{actor} поделился с группой {group}",
+ "%2$s removed share for group %1$s" : "%2$s удалил общий доступ для группы %1$s",
+ "{actor} removed share for group {group}" : "{actor} закрыл общий доступ для группы {group}",
"You shared %1$s with group %2$s" : "Вы поделились %1$s с группой %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s поделился %1$s с группой %3$s",
- "You removed the share of group %2$s for %1$s" : "Вы удалили общий доступ к группе %2$s для %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s удалил общий доступ к группе %3$s для %1$s",
- "%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
- "You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
- "You removed the public link for %1$s" : "Вы удалили публичную ссылку к %1$s",
- "%2$s removed the public link for %1$s" : "%2$s удалил публичную ссылку к %1$s",
- "Your public link for %1$s expired" : "Срок действия Вашей публичной ссылки к %1$s закончился",
- "The public link of %2$s for %1$s expired" : "Срок действия публичной ссылки к %2$s для %1$s закончился",
+ "You shared {file} with group {group}" : "Вы поделились {file} с группой {group}",
+ "You removed group %2$s from %1$s" : "Вы удалили группу %2$s из %1$s",
+ "You removed group {group} from {file}" : "Вы удалили группу {group} из {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s поделился %1$s с группой %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} поделился {file} с группой {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s удалил группу %2$s из %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} удалил группу {group} из {file}",
+ "Shared as public link" : "Поделился общедоступной ссылкой",
+ "Removed public link" : "Удалена общедоступная ссылка",
+ "%1$s shared as public link" : "%1$s поделился общедоступной ссылкой",
+ "{actor} shared as public link" : "{actor} поделился общедоступной ссылкой",
+ "%1$s removed public link" : "%1$s удалил общедоступной сслыку",
+ "{actor} removed public link" : "{actor} удалил общедоступной ссылку",
+ "You shared %1$s as public link" : "Вы поделись %1$s в виде общедоступной ссылки",
+ "You shared {file} as public link" : "Вы поделись {file} в виде общедоступной ссылки",
+ "You removed public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "You removed public link for {file}" : "Вы удалили общедоступную ссылку к {file}",
+ "%2$s shared %1$s as public link" : "%2$s поделился %1$s в виде общедоступной ссылки",
+ "{actor} shared {file} as public link" : "{actor} поделился {file} в виде общедоступной ссылки",
+ "%2$s removed public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "{actor} removed public link for {file}" : "{actor} удалил общедоступную ссылку к {file}",
+ "%1$s accepted the remote share" : "%1$s принял удаленный общий ресурс",
+ "{user} accepted the remote share" : "{user} принял удаленный общий ресурс",
+ "%1$s declined the remote share" : "%1$s отклонил удаленный общий ресурс",
+ "{user} declined the remote share" : "{user} отклонил удаленный общий ресурс",
+ "You received a new remote share %1$s from %2$s" : "Вы получили новый удаленный общий ресурс %1$s от %2$s",
+ "You received a new remote share {file} from {user}" : "Вы получили новый удаленный общий ресурс {file} от {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s принял удаленный общий ресурс %1$s",
+ "{user} accepted the remote share of {file}" : "{user} принял удаленный общий ресурс {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s отклонил удаленный общий ресурс %1$s",
+ "{user} declined the remote share of {file}" : "{user} отклонил удаленный общий ресурс {file}",
+ "%2$s unshared %1$s from you" : "%2$s закрыл для вас доступ к %1$s ",
+ "{user} unshared {file} from you" : "{user} закрыл для вас доступ к {file}",
+ "Shared with %1$s" : "Поделился с %1$s",
+ "Shared with {user}" : "Поделился с {user}",
+ "Removed share for %1$s" : "Закрыт общий доступ для %1$s",
+ "Removed share for {user}" : "Закрыт общий доступ для {user}",
+ "%2$s shared with %1$s" : "%2$s поделился с %1$s",
+ "{actor} shared with {user}" : "{actor} поделился с {user}",
+ "%2$s removed share for %1$s" : "%2$s закрыл общий доступ к %1$s",
+ "{actor} removed share for {user}" : "{actor} закрыл общий доступ для {user}",
+ "Shared by %1$s" : "Поделился через %1$s",
+ "Shared by {actor}" : "Поделился через {actor}",
+ "%1$s removed share" : "%1$s закрыл общий доступ",
+ "{actor} removed share" : "{actor} закрыл общий доступ",
+ "You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s",
+ "You shared {file} with {user}" : "Вы поделились {file} с {user}",
+ "You removed %2$s from %1$s" : "Вы удалили %2$s из %1$s",
+ "You removed {user} from {file}" : "Вы удалили {user} из {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s поделился %1$s с %2$s",
+ "{actor} removed {user} from {file}" : "{actor} удалил {user} из {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s удалил %2$s из %1$s",
"%2$s shared %1$s with you" : "%2$s поделился с вами %1$s",
- "%2$s removed the share for %1$s" : "%2$s удалил общий доступ к %1$s",
- "Downloaded via public link" : "Скачано по открытой ссылке",
- "Shared with %2$s" : "Поделился с %2$s",
- "Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
- "Removed share for %2$s" : "Удалён общий доступ к %2$s",
- "%2$s removed share for %3$s" : "%2$s удалил общий доступ к %3$s",
- "Shared with group %2$s" : "Поделился с группой %2$s",
- "Shared with group %3$s by %2$s" : "Поделился %2$s с группой %3$s",
- "Removed share of group %2$s" : "Удалён общий доступ к группе %2$s",
- "%2$s removed share of group %3$s" : "%2$s удалил общий доступ к группе %3$s",
- "Shared via link by %2$s" : "Поделился ссылкой %2$s",
- "Shared via public link" : "Поделился открытой ссылкой",
- "Removed public link" : "Удалена публичная ссылка",
- "%2$s removed public link" : "%2$s удалил публичную ссылку",
- "Public link expired" : "Срок действия публичной ссылки закончился",
- "Public link of %2$s expired" : "Срок действия публичной ссылки к %2$s закончился",
- "Shared by %2$s" : "Поделился %2$s",
- "Downloaded by %2$s" : "Скачано %2$s",
+ "{actor} shared {file} with you" : "{actor} поделился {file} с вами",
+ "%2$s removed you from %1$s" : "%2$s удалил вас из %1$s",
+ "{actor} removed you from {file}" : "{actor} удалил вас из {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Файл или папка, которыми поделились по электронной почте или общедоступной ссылке, были <strong>скачаны</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
+ "A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог",
"Wrong share ID, share doesn't exist" : "Неверный идентификатор публикации, публикация не существует",
"could not delete share" : "Не удалось удалить общий ресурс",
"Could not delete share" : "Не удалось удалить публикацию",
@@ -79,6 +113,7 @@
"Wrong or no update parameter given" : "Параметр для изменения неправилен или не задан",
"Can't change permissions for public share links" : "Невозможно изменить права для публикации через ссылку",
"Cannot increase permissions" : "Нельзя увеличить права",
+ "%s is publicly shared" : "%s опубликован",
"Share API is disabled" : "API общего доступа отключён",
"This share is password-protected" : "Общий ресурс защищен паролем",
"The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.",
@@ -102,36 +137,40 @@
"Uploading files…" : "Загрузка файлов...",
"Uploaded files:" : "Загруженные файлы:",
"A public shared file or folder was <strong>downloaded</strong>" : "<strong>Скачан</strong> общий файл или каталог",
- "Shares" : "События обмена файлами",
- "Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общего доступа",
- "The mountpoint name contains invalid characters." : "Имя точки монтирования содержит недопустимые символы.",
- "Not allowed to create a federated share with the same user server" : "Не допускается создание федеративного общего ресурса с тем же сервером пользователя",
- "Invalid or untrusted SSL certificate" : "Недействительный или недоверенный сертификат SSL",
- "Could not authenticate to remote share, password might be wrong" : "Не удалось произвести аутентификацию для доступа к удалённому хранилищу, возможно неправильно указан пароль",
- "Storage not valid" : "Хранилище недоступно",
- "Couldn't add remote share" : "Невозможно добавить удалённый общий ресурс",
- "Federated sharing" : "Общий доступ из объединенного общего хранилища",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Вы хотите добавить удалённую общую папку {name} из {owner}@{remote}?",
- "Remote share" : "Удаленный общий ресурс",
- "Remote share password" : "Пароль для удаленного общего ресурса",
- "Cancel" : "Отмена",
- "Add remote share" : "Добавить удалённый общий ресурс",
- "No ownCloud installation (7 or higher) found at {remote}" : "На удаленном ресурсе {remote} не установлен ownCloud версии 7 или выше",
- "Invalid ownCloud url" : "Неверный адрес Nextcloud",
- "You received \"/%2$s\" as a remote share from %1$s" : "Вы получили \"/%2$s\" в качестве удалённого ресурса из %1$s",
- "Accept" : "Принять",
- "Decline" : "Отклонить",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #Nextcloud ID в объединении облачных хранилищ, смотрите %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Поделитесь со мной через мой #Nextcloud ID в объединении облачных хранилищ",
- "Federated Cloud Sharing" : "Объединение облачных хранилищ",
- "Open documentation" : "Открыть документацию",
- "Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов",
- "Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов",
- "Federated Cloud" : "Объединение облачных хранилищ",
- "Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:",
- "Share it:" : "Поделиться:",
- "Add to your website" : "Добавить к себе на сайт",
- "Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud",
- "HTML Code:" : "HTML код:"
+ "You received a new remote share %2$s from %1$s" : "Вы получили новый удаленный общий ресурс %2$s от %1$s",
+ "You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом",
+ "%1$s accepted remote share %2$s" : "%1$s принял удаленный общий ресурс %2$s",
+ "%1$s declined remote share %2$s" : "%1$s отклонил удаленный общий ресурс %2$s",
+ "%1$s unshared %2$s from you" : "%1$s закрыл для вас доступ к %2$s ",
+ "Public shared folder %1$s was downloaded" : "Общий каталог %1$s был скачан",
+ "Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
+ "%2$s shared %1$s with %3$s" : "%2$s поделился %1$s с %3$s",
+ "You removed the share of %2$s for %1$s" : "Вы удалили общий доступ к %2$s для %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s удалил общий доступ к %3$s для %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s поделился %1$s с группой %3$s",
+ "You removed the share of group %2$s for %1$s" : "Вы удалили общий доступ к группе %2$s для %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s удалил общий доступ к группе %3$s для %1$s",
+ "%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
+ "You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
+ "You removed the public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "Your public link for %1$s expired" : "Срок действия Вашей общедоступной ссылки к %1$s закончился",
+ "The public link of %2$s for %1$s expired" : "Срок действия общедоступной ссылки к %2$s для %1$s закончился",
+ "%2$s removed the share for %1$s" : "%2$s удалил общий доступ к %1$s",
+ "Shared with %2$s" : "Поделился с %2$s",
+ "Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
+ "Removed share for %2$s" : "Удалён общий доступ к %2$s",
+ "%2$s removed share for %3$s" : "%2$s удалил общий доступ к %3$s",
+ "Shared with group %2$s" : "Поделился с группой %2$s",
+ "Shared with group %3$s by %2$s" : "Поделился %2$s с группой %3$s",
+ "Removed share of group %2$s" : "Удалён общий доступ к группе %2$s",
+ "%2$s removed share of group %3$s" : "%2$s удалил общий доступ к группе %3$s",
+ "Shared via link by %2$s" : "Поделился ссылкой %2$s",
+ "Shared via public link" : "Поделился открытой ссылкой",
+ "%2$s removed public link" : "%2$s удалил общедоступную ссылку",
+ "Public link expired" : "Срок действия общедоступнной ссылки закончился",
+ "Public link of %2$s expired" : "Срок действия общедоступной ссылки к %2$s закончился",
+ "Shared by %2$s" : "Поделился %2$s",
+ "Shares" : "События обмена файлами"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js
index 54544b2a68e..b4872abb55b 100644
--- a/apps/files_sharing/l10n/sq.js
+++ b/apps/files_sharing/l10n/sq.js
@@ -11,12 +11,96 @@ OC.L10N.register(
"No shared links" : "Pa lidhje ndarjesh",
"Files and folders you share by link will show up here" : "Këtu do të shfaqen kartelat dhe dosjet që ndani përmes lidhjesh",
"You can upload into this folder" : "Mund të ngarkoni te kjo dosje",
+ "No compatible server found at {remote}" : "Asnjë server i pajtueshëm nuk është gjetur tek { }",
+ "Invalid server URL" : "Server i pavlefshëm URL",
+ "Failed to add the public link to your Nextcloud" : "Nuk arritët të shtoni ndërlidhjen publike tek Nextcloud juaj",
+ "Share" : "shpërndaj",
+ "No expiration date set" : "Nuk është vendosur data e përfundimit",
"Shared by" : "Ndarë nga",
"Sharing" : "Ndarje",
+ "File shares" : "Ndarja e skedarëve",
+ "Downloaded via public link" : "Shkarkuar përmes një lidhjeje publike",
+ "Downloaded by %1$s" : "Shkarkuar nga %1$s",
+ "Downloaded by {email}" : "Shkarkuar nga {email}",
+ "%1$s downloaded via public link" : "%1$s shkarkuar nga një lidhje publike",
+ "{file} downloaded via public link" : "{file} shkarkuar përmes një lidhjeje publike",
+ "%1$s downloaded %2$s" : "%1$s shkarkuar nga %2$s",
+ "{email} downloaded {file}" : "{email} shkarkuar {file}",
+ "Shared with group %1$s" : "U nda me grupin %1$s",
+ "Shared with group {group}" : "U nda me grupin {group}",
+ "Removed share for group %1$s" : "Hoqi ndarjen për grupin %1$s",
+ "Removed share for group {group}" : "Hoqi ndarjen për grupin {group}",
+ "%2$s shared with group %1$s" : "%2$s u nda e grupin %1$s",
+ "{actor} shared with group {group}" : "{actor} u nda me grupin {group}",
+ "%2$s removed share for group %1$s" : "%2$s hoqi ndarjen për grupin %1$s",
+ "{actor} removed share for group {group}" : "{actor} hoqi ndarjen për grupin {group}",
+ "You shared %1$s with group %2$s" : "Ndatë %1$s me grupin %2$s",
+ "You shared {file} with group {group}" : "Ndatë {file} me grupin {group}",
+ "You removed group %2$s from %1$s" : "Hoqët grupin %2$s nga %1$s",
+ "You removed group {group} from {file}" : "Hoqët grupin {group} nga {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s ndau %1$s me grupin %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} ndau {file} me grupin {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s hoqi grupin %2$s nga %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} hoqi grupin {group} nga {file}",
+ "Shared as public link" : "U nda si një lidhje publike",
+ "Removed public link" : "Hoqi lidhje publike",
+ "%1$s shared as public link" : "%1$s u nda si një lidhje publike",
+ "{actor} shared as public link" : "{actor} u nda si një lidhje publike",
+ "%1$s removed public link" : "%1$s hoqi lidhje publike",
+ "{actor} removed public link" : "{actor} hoqi lidhje publike",
+ "You shared %1$s as public link" : "Ndatë %1$s si një lidhje publike",
+ "You shared {file} as public link" : "Ndatë {file} si një lidhje publike",
+ "You removed public link for %1$s" : "Hoqët lidhje publike për %1$s",
+ "You removed public link for {file}" : "Hoqët lidhje publike për {file}",
+ "%2$s shared %1$s as public link" : "%2$s u nda %1$s si një lidhje publike",
+ "{actor} shared {file} as public link" : "{actor} u nda {file} si një lidhje publike",
+ "%2$s removed public link for %1$s" : "%2$s hoqi lidhje publike për %1$s",
+ "{actor} removed public link for {file}" : "{actor} hoqi lidhje publike për {file}",
+ "%1$s accepted the remote share" : "%1$s pranoi ndarjen e largët",
+ "{user} accepted the remote share" : "{user} pranoi ndarjen e largët",
+ "%1$s declined the remote share" : "%1$s hodhi tej ndarjen e largët",
+ "{user} declined the remote share" : "{user} hodhi tej ndarjen e largët",
+ "You received a new remote share %1$s from %2$s" : "Morët një ndarje të largët %1$s nga %2$s",
+ "You received a new remote share {file} from {user}" : "Morët një ndarje të largët {file} nga {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s pranoi ndarjen e largët e %1$s",
+ "{user} accepted the remote share of {file}" : "{user} pranoi ndarjen e largët të {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s hodhi tej ndarjen e largët të %1$s",
+ "{user} declined the remote share of {file}" : "{user} hodhi tej ndarjen e largët të {file}",
+ "%2$s unshared %1$s from you" : "%2$s nuk ndau %1$s nga ju",
+ "{user} unshared {file} from you" : "{user} nuk ndau {file} nga ju",
+ "Shared with %1$s" : "Ndarë me %1$s",
+ "Shared with {user}" : "Ndarë me {user}",
+ "Removed share for %1$s" : "Hoqi ndarjen për %1$s",
+ "Removed share for {user}" : "Hoqi ndarjen për {user}",
+ "%2$s shared with %1$s" : "%2$s ndau me %1$s",
+ "{actor} shared with {user}" : "{actor} ndau me {user}",
+ "%2$s removed share for %1$s" : "%2$s hoqi ndarjen për %1$s",
+ "{actor} removed share for {user}" : "{actor} hoqi ndarjen për {user}",
+ "Shared by %1$s" : "U nda nga %1$s",
+ "Shared by {actor}" : "U nda nga {actor}",
+ "%1$s removed share" : "%1$s hoqi ndarjen",
+ "{actor} removed share" : "{actor} hoqi ndarjen",
+ "You shared %1$s with %2$s" : "Ndatë %1$s me %2$s",
+ "You shared {file} with {user}" : "Ndatë {file} me {user}",
+ "You removed %2$s from %1$s" : "Hoqët %2$s nga %1$s ",
+ "You removed {user} from {file}" : "Hoqët {user} nga {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s ndau %1$s me %2$s",
+ "{actor} removed {user} from {file}" : "{actor} hoqi {user} nga {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s hoqi %2$s nga %1$s",
+ "%2$s shared %1$s with you" : "%2$s ndau %1$s me ju",
+ "{actor} shared {file} with you" : "{actor} ndau {file} me ju",
+ "%2$s removed you from %1$s" : "%2$s iu hoqi nga %1$s",
+ "{actor} removed you from {file}" : "{actor} iu hoqi nga {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Një skedar ose dosje e ndarë nga posta ose lidhja publike ishte <strong> shkarkuar</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Një kartelë ose dosje u nda prej një <strong>shërbyesi tjetër</strong>",
+ "A file or folder has been <strong>shared</strong>" : "U <strong>nda me të tjerë</strong> një kartelë ose dosje",
"Wrong share ID, share doesn't exist" : "ID e gabuar ndarjeje, ndarja s’ekziston",
+ "could not delete share" : "Ndarja s’u fshi dot",
"Could not delete share" : "Ndarja s’u fshi dot",
"Please specify a file or folder path" : "Ju lutemi, tregoni një shteg kartele ose dosjeje",
"Wrong path, file/folder doesn't exist" : "Shteg i gabuar, kratela/dosja s’ekziston",
+ "Could not create share" : "Ndarja nuk u krijua dot",
+ "invalid permissions" : "leje e pavlefshme",
"Please specify a valid user" : "Ju lutemi, tregoni një përdorues të vlefshëm",
"Group sharing is disabled by the administrator" : "Ndarja në grup është çaktivizuar nga përgjegjësi",
"Please specify a valid group" : "Ju lutemi, tregoni një grup të vlefshëm",
@@ -31,8 +115,29 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Ose u dha parametër i gabuar përditësimesh, pse s’u dha fare ",
"Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike",
"Cannot increase permissions" : "S’mund të fuqizohen lejet",
- "A file or folder has been <strong>shared</strong>" : "U <strong>nda me të tjerë</strong> një kartelë ose dosje",
- "A file or folder was shared from <strong>another server</strong>" : "Një kartelë ose dosje u nda prej një <strong>shërbyesi tjetër</strong>",
+ "%s is publicly shared" : "%s është ndarë publikisht",
+ "Share API is disabled" : "API i ndarjeve është çaktivizuar",
+ "This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim",
+ "The password is wrong. Try again." : "Fjalëkalimi është i gabuar. Riprovoni.",
+ "Password" : "Fjalëkalim",
+ "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
+ "Name" : "Emër",
+ "Share time" : "Kohë ndarjeje",
+ "Expiration date" : "Datë skadimi",
+ "Sorry, this link doesn’t seem to work anymore." : "Na ndjeni, kjo lidhje duket se nuk funksionon më.",
+ "Reasons might be:" : "Arsyet mund të jenë:",
+ "the item was removed" : "objekti është hequr",
+ "the link expired" : "lidhja ka skaduar",
+ "sharing is disabled" : "ndarjet janë çaktivizuar",
+ "For more info, please ask the person who sent this link." : "Për më shumë të dhëna, ju lutemi, pyetni personin që ju dërgoi këtë lidhje.",
+ "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
+ "Download" : "Shkarko",
+ "Download %s" : "Shkarko %s",
+ "Direct link" : "Lidhje e drejtpërdrejtë",
+ "Upload files to %s" : "Ngrako skedarët tek %s",
+ "Select or drop files" : "Përzgjidh ose hiq skedarët",
+ "Uploading files…" : "Skedarët po ngarkohen...",
+ "Uploaded files:" : "Skedarët e ngarkuar:",
"A public shared file or folder was <strong>downloaded</strong>" : "<strong>U shkarkua</strong> një kartelë ose dosje e ndarë me të tjerët publikisht",
"You received a new remote share %2$s from %1$s" : "Morët një ndarje të largët %2$s nga %1$s",
"You received a new remote share from %s" : "Morët një ndarje të largët nga %s",
@@ -41,11 +146,9 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s shndau me ju %2$s",
"Public shared folder %1$s was downloaded" : "U shkarkua dosja e ndarë publikisht %1$s",
"Public shared file %1$s was downloaded" : "U shkarkua kartela e ndarë publikisht %1$s",
- "You shared %1$s with %2$s" : "Ndatë %1$s me %2$s",
"%2$s shared %1$s with %3$s" : "%2$s ndau %1$s me %3$s",
"You removed the share of %2$s for %1$s" : "Hoqët ndarjen e %2$s për %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s hoqi ndarjen e %3$s për %1$s",
- "You shared %1$s with group %2$s" : "Ndatë %1$s me grupin %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s ndau %1$s me grupin %3$s",
"You removed the share of group %2$s for %1$s" : "Hoqët ndarjen e grupit %2$s për %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s hoqi ndarjen e grupit %3$s për %1$s",
@@ -55,9 +158,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s hoqi lidhjen publike për %1$s",
"Your public link for %1$s expired" : "Lidhja juaj publike për %1$s skadoi",
"The public link of %2$s for %1$s expired" : "Lidhja publike e %2$s për %1$s skadoi",
- "%2$s shared %1$s with you" : "%2$s ndau %1$s me ju",
"%2$s removed the share for %1$s" : "%2$s hoqi ndarjen për %1$s",
- "Downloaded via public link" : "Shkarkuar përmes një lidhjeje publike",
"Shared with %2$s" : "U nda me %2$s",
"Shared with %3$s by %2$s" : "U nda me %3$s nga %2$s",
"Removed share for %2$s" : "Hoqi ndarjen për %2$s",
@@ -68,27 +169,10 @@ OC.L10N.register(
"%2$s removed share of group %3$s" : "%2$s hoqi ndarjen e grupit %3$s",
"Shared via link by %2$s" : "U nda përmes një lidhje nga %2$s",
"Shared via public link" : "U nda përmes një lidhje publike",
- "Removed public link" : "Hoqi lidhje publike",
"%2$s removed public link" : "%2$s hoqi lidhje publike",
"Public link expired" : "Lidhja publike skadoi",
"Public link of %2$s expired" : "Lidhja publike e %2$s skadoi",
"Shared by %2$s" : "U nda nga %2$s",
- "Shares" : "Ndarje",
- "Share API is disabled" : "API i ndarjeve është çaktivizuar",
- "This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim",
- "The password is wrong. Try again." : "Fjalëkalimi është i gabuar. Riprovoni.",
- "Password" : "Fjalëkalim",
- "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
- "Name" : "Emër",
- "Share time" : "Kohë ndarjeje",
- "Sorry, this link doesn’t seem to work anymore." : "Na ndjeni, kjo lidhje duket se nuk funksionon më.",
- "Reasons might be:" : "Arsyet mund të jenë:",
- "the item was removed" : "objekti është hequr",
- "the link expired" : "lidhja ka skaduar",
- "sharing is disabled" : "ndarjet janë çaktivizuar",
- "For more info, please ask the person who sent this link." : "Për më shumë të dhëna, ju lutemi, pyetni personin që ju dërgoi këtë lidhje.",
- "Download" : "Shkarko",
- "Download %s" : "Shkarko %s",
- "Direct link" : "Lidhje e drejtpërdrejtë"
+ "Shares" : "Ndarje"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json
index 3e8fa7b00f0..c1323784cf1 100644
--- a/apps/files_sharing/l10n/sq.json
+++ b/apps/files_sharing/l10n/sq.json
@@ -9,12 +9,96 @@
"No shared links" : "Pa lidhje ndarjesh",
"Files and folders you share by link will show up here" : "Këtu do të shfaqen kartelat dhe dosjet që ndani përmes lidhjesh",
"You can upload into this folder" : "Mund të ngarkoni te kjo dosje",
+ "No compatible server found at {remote}" : "Asnjë server i pajtueshëm nuk është gjetur tek { }",
+ "Invalid server URL" : "Server i pavlefshëm URL",
+ "Failed to add the public link to your Nextcloud" : "Nuk arritët të shtoni ndërlidhjen publike tek Nextcloud juaj",
+ "Share" : "shpërndaj",
+ "No expiration date set" : "Nuk është vendosur data e përfundimit",
"Shared by" : "Ndarë nga",
"Sharing" : "Ndarje",
+ "File shares" : "Ndarja e skedarëve",
+ "Downloaded via public link" : "Shkarkuar përmes një lidhjeje publike",
+ "Downloaded by %1$s" : "Shkarkuar nga %1$s",
+ "Downloaded by {email}" : "Shkarkuar nga {email}",
+ "%1$s downloaded via public link" : "%1$s shkarkuar nga një lidhje publike",
+ "{file} downloaded via public link" : "{file} shkarkuar përmes një lidhjeje publike",
+ "%1$s downloaded %2$s" : "%1$s shkarkuar nga %2$s",
+ "{email} downloaded {file}" : "{email} shkarkuar {file}",
+ "Shared with group %1$s" : "U nda me grupin %1$s",
+ "Shared with group {group}" : "U nda me grupin {group}",
+ "Removed share for group %1$s" : "Hoqi ndarjen për grupin %1$s",
+ "Removed share for group {group}" : "Hoqi ndarjen për grupin {group}",
+ "%2$s shared with group %1$s" : "%2$s u nda e grupin %1$s",
+ "{actor} shared with group {group}" : "{actor} u nda me grupin {group}",
+ "%2$s removed share for group %1$s" : "%2$s hoqi ndarjen për grupin %1$s",
+ "{actor} removed share for group {group}" : "{actor} hoqi ndarjen për grupin {group}",
+ "You shared %1$s with group %2$s" : "Ndatë %1$s me grupin %2$s",
+ "You shared {file} with group {group}" : "Ndatë {file} me grupin {group}",
+ "You removed group %2$s from %1$s" : "Hoqët grupin %2$s nga %1$s",
+ "You removed group {group} from {file}" : "Hoqët grupin {group} nga {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s ndau %1$s me grupin %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} ndau {file} me grupin {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s hoqi grupin %2$s nga %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} hoqi grupin {group} nga {file}",
+ "Shared as public link" : "U nda si një lidhje publike",
+ "Removed public link" : "Hoqi lidhje publike",
+ "%1$s shared as public link" : "%1$s u nda si një lidhje publike",
+ "{actor} shared as public link" : "{actor} u nda si një lidhje publike",
+ "%1$s removed public link" : "%1$s hoqi lidhje publike",
+ "{actor} removed public link" : "{actor} hoqi lidhje publike",
+ "You shared %1$s as public link" : "Ndatë %1$s si një lidhje publike",
+ "You shared {file} as public link" : "Ndatë {file} si një lidhje publike",
+ "You removed public link for %1$s" : "Hoqët lidhje publike për %1$s",
+ "You removed public link for {file}" : "Hoqët lidhje publike për {file}",
+ "%2$s shared %1$s as public link" : "%2$s u nda %1$s si një lidhje publike",
+ "{actor} shared {file} as public link" : "{actor} u nda {file} si një lidhje publike",
+ "%2$s removed public link for %1$s" : "%2$s hoqi lidhje publike për %1$s",
+ "{actor} removed public link for {file}" : "{actor} hoqi lidhje publike për {file}",
+ "%1$s accepted the remote share" : "%1$s pranoi ndarjen e largët",
+ "{user} accepted the remote share" : "{user} pranoi ndarjen e largët",
+ "%1$s declined the remote share" : "%1$s hodhi tej ndarjen e largët",
+ "{user} declined the remote share" : "{user} hodhi tej ndarjen e largët",
+ "You received a new remote share %1$s from %2$s" : "Morët një ndarje të largët %1$s nga %2$s",
+ "You received a new remote share {file} from {user}" : "Morët një ndarje të largët {file} nga {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s pranoi ndarjen e largët e %1$s",
+ "{user} accepted the remote share of {file}" : "{user} pranoi ndarjen e largët të {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s hodhi tej ndarjen e largët të %1$s",
+ "{user} declined the remote share of {file}" : "{user} hodhi tej ndarjen e largët të {file}",
+ "%2$s unshared %1$s from you" : "%2$s nuk ndau %1$s nga ju",
+ "{user} unshared {file} from you" : "{user} nuk ndau {file} nga ju",
+ "Shared with %1$s" : "Ndarë me %1$s",
+ "Shared with {user}" : "Ndarë me {user}",
+ "Removed share for %1$s" : "Hoqi ndarjen për %1$s",
+ "Removed share for {user}" : "Hoqi ndarjen për {user}",
+ "%2$s shared with %1$s" : "%2$s ndau me %1$s",
+ "{actor} shared with {user}" : "{actor} ndau me {user}",
+ "%2$s removed share for %1$s" : "%2$s hoqi ndarjen për %1$s",
+ "{actor} removed share for {user}" : "{actor} hoqi ndarjen për {user}",
+ "Shared by %1$s" : "U nda nga %1$s",
+ "Shared by {actor}" : "U nda nga {actor}",
+ "%1$s removed share" : "%1$s hoqi ndarjen",
+ "{actor} removed share" : "{actor} hoqi ndarjen",
+ "You shared %1$s with %2$s" : "Ndatë %1$s me %2$s",
+ "You shared {file} with {user}" : "Ndatë {file} me {user}",
+ "You removed %2$s from %1$s" : "Hoqët %2$s nga %1$s ",
+ "You removed {user} from {file}" : "Hoqët {user} nga {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s ndau %1$s me %2$s",
+ "{actor} removed {user} from {file}" : "{actor} hoqi {user} nga {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s hoqi %2$s nga %1$s",
+ "%2$s shared %1$s with you" : "%2$s ndau %1$s me ju",
+ "{actor} shared {file} with you" : "{actor} ndau {file} me ju",
+ "%2$s removed you from %1$s" : "%2$s iu hoqi nga %1$s",
+ "{actor} removed you from {file}" : "{actor} iu hoqi nga {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Një skedar ose dosje e ndarë nga posta ose lidhja publike ishte <strong> shkarkuar</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Një kartelë ose dosje u nda prej një <strong>shërbyesi tjetër</strong>",
+ "A file or folder has been <strong>shared</strong>" : "U <strong>nda me të tjerë</strong> një kartelë ose dosje",
"Wrong share ID, share doesn't exist" : "ID e gabuar ndarjeje, ndarja s’ekziston",
+ "could not delete share" : "Ndarja s’u fshi dot",
"Could not delete share" : "Ndarja s’u fshi dot",
"Please specify a file or folder path" : "Ju lutemi, tregoni një shteg kartele ose dosjeje",
"Wrong path, file/folder doesn't exist" : "Shteg i gabuar, kratela/dosja s’ekziston",
+ "Could not create share" : "Ndarja nuk u krijua dot",
+ "invalid permissions" : "leje e pavlefshme",
"Please specify a valid user" : "Ju lutemi, tregoni një përdorues të vlefshëm",
"Group sharing is disabled by the administrator" : "Ndarja në grup është çaktivizuar nga përgjegjësi",
"Please specify a valid group" : "Ju lutemi, tregoni një grup të vlefshëm",
@@ -29,8 +113,29 @@
"Wrong or no update parameter given" : "Ose u dha parametër i gabuar përditësimesh, pse s’u dha fare ",
"Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike",
"Cannot increase permissions" : "S’mund të fuqizohen lejet",
- "A file or folder has been <strong>shared</strong>" : "U <strong>nda me të tjerë</strong> një kartelë ose dosje",
- "A file or folder was shared from <strong>another server</strong>" : "Një kartelë ose dosje u nda prej një <strong>shërbyesi tjetër</strong>",
+ "%s is publicly shared" : "%s është ndarë publikisht",
+ "Share API is disabled" : "API i ndarjeve është çaktivizuar",
+ "This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim",
+ "The password is wrong. Try again." : "Fjalëkalimi është i gabuar. Riprovoni.",
+ "Password" : "Fjalëkalim",
+ "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
+ "Name" : "Emër",
+ "Share time" : "Kohë ndarjeje",
+ "Expiration date" : "Datë skadimi",
+ "Sorry, this link doesn’t seem to work anymore." : "Na ndjeni, kjo lidhje duket se nuk funksionon më.",
+ "Reasons might be:" : "Arsyet mund të jenë:",
+ "the item was removed" : "objekti është hequr",
+ "the link expired" : "lidhja ka skaduar",
+ "sharing is disabled" : "ndarjet janë çaktivizuar",
+ "For more info, please ask the person who sent this link." : "Për më shumë të dhëna, ju lutemi, pyetni personin që ju dërgoi këtë lidhje.",
+ "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
+ "Download" : "Shkarko",
+ "Download %s" : "Shkarko %s",
+ "Direct link" : "Lidhje e drejtpërdrejtë",
+ "Upload files to %s" : "Ngrako skedarët tek %s",
+ "Select or drop files" : "Përzgjidh ose hiq skedarët",
+ "Uploading files…" : "Skedarët po ngarkohen...",
+ "Uploaded files:" : "Skedarët e ngarkuar:",
"A public shared file or folder was <strong>downloaded</strong>" : "<strong>U shkarkua</strong> një kartelë ose dosje e ndarë me të tjerët publikisht",
"You received a new remote share %2$s from %1$s" : "Morët një ndarje të largët %2$s nga %1$s",
"You received a new remote share from %s" : "Morët një ndarje të largët nga %s",
@@ -39,11 +144,9 @@
"%1$s unshared %2$s from you" : "%1$s shndau me ju %2$s",
"Public shared folder %1$s was downloaded" : "U shkarkua dosja e ndarë publikisht %1$s",
"Public shared file %1$s was downloaded" : "U shkarkua kartela e ndarë publikisht %1$s",
- "You shared %1$s with %2$s" : "Ndatë %1$s me %2$s",
"%2$s shared %1$s with %3$s" : "%2$s ndau %1$s me %3$s",
"You removed the share of %2$s for %1$s" : "Hoqët ndarjen e %2$s për %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s hoqi ndarjen e %3$s për %1$s",
- "You shared %1$s with group %2$s" : "Ndatë %1$s me grupin %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s ndau %1$s me grupin %3$s",
"You removed the share of group %2$s for %1$s" : "Hoqët ndarjen e grupit %2$s për %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s hoqi ndarjen e grupit %3$s për %1$s",
@@ -53,9 +156,7 @@
"%2$s removed the public link for %1$s" : "%2$s hoqi lidhjen publike për %1$s",
"Your public link for %1$s expired" : "Lidhja juaj publike për %1$s skadoi",
"The public link of %2$s for %1$s expired" : "Lidhja publike e %2$s për %1$s skadoi",
- "%2$s shared %1$s with you" : "%2$s ndau %1$s me ju",
"%2$s removed the share for %1$s" : "%2$s hoqi ndarjen për %1$s",
- "Downloaded via public link" : "Shkarkuar përmes një lidhjeje publike",
"Shared with %2$s" : "U nda me %2$s",
"Shared with %3$s by %2$s" : "U nda me %3$s nga %2$s",
"Removed share for %2$s" : "Hoqi ndarjen për %2$s",
@@ -66,27 +167,10 @@
"%2$s removed share of group %3$s" : "%2$s hoqi ndarjen e grupit %3$s",
"Shared via link by %2$s" : "U nda përmes një lidhje nga %2$s",
"Shared via public link" : "U nda përmes një lidhje publike",
- "Removed public link" : "Hoqi lidhje publike",
"%2$s removed public link" : "%2$s hoqi lidhje publike",
"Public link expired" : "Lidhja publike skadoi",
"Public link of %2$s expired" : "Lidhja publike e %2$s skadoi",
"Shared by %2$s" : "U nda nga %2$s",
- "Shares" : "Ndarje",
- "Share API is disabled" : "API i ndarjeve është çaktivizuar",
- "This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim",
- "The password is wrong. Try again." : "Fjalëkalimi është i gabuar. Riprovoni.",
- "Password" : "Fjalëkalim",
- "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
- "Name" : "Emër",
- "Share time" : "Kohë ndarjeje",
- "Sorry, this link doesn’t seem to work anymore." : "Na ndjeni, kjo lidhje duket se nuk funksionon më.",
- "Reasons might be:" : "Arsyet mund të jenë:",
- "the item was removed" : "objekti është hequr",
- "the link expired" : "lidhja ka skaduar",
- "sharing is disabled" : "ndarjet janë çaktivizuar",
- "For more info, please ask the person who sent this link." : "Për më shumë të dhëna, ju lutemi, pyetni personin që ju dërgoi këtë lidhje.",
- "Download" : "Shkarko",
- "Download %s" : "Shkarko %s",
- "Direct link" : "Lidhje e drejtpërdrejtë"
+ "Shares" : "Ndarje"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js
index 79b85b90711..fb6d04c52c2 100644
--- a/apps/files_sharing/l10n/sv.js
+++ b/apps/files_sharing/l10n/sv.js
@@ -1,57 +1,164 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "Server-till-server-delning är inte aktiverat på denna server",
- "The mountpoint name contains invalid characters." : "Monteringspunktens namn innehåller ogiltiga tecken.",
- "Not allowed to create a federated share with the same user server" : "Ej tillåten att skapa en federerad delning med samma användarserver.",
- "Invalid or untrusted SSL certificate" : "Ogiltigt eller ej betrott SSL-certifikat",
- "Could not authenticate to remote share, password might be wrong" : "Kunde ej autensiera fjärrdelningen, lösenordet kan vara fel",
- "Storage not valid" : "Lagring ej giltig",
- "Couldn't add remote share" : "Kunde inte lägga till fjärrutdelning",
"Shared with you" : "Delat med dig",
"Shared with others" : "Delat med andra",
- "Shared by link" : "Delad som länk",
+ "Shared by link" : "Delat som länk",
"Nothing shared with you yet" : "Inget delat med dig ännu",
- "Files and folders others share with you will show up here" : "Filer och mappar andra delar med dig kommer visas här",
+ "Files and folders others share with you will show up here" : "Filer och mappar som andra delar med dig kommer visas här",
"Nothing shared yet" : "Inget delat ännu",
- "Files and folders you share will show up here" : "Filer och mappar du delar kommer visas här",
+ "Files and folders you share will show up here" : "Filer och mappar som du delar kommer visas här",
"No shared links" : "Inga delade länkar",
- "Files and folders you share by link will show up here" : "Filer och mappar du delar som länkar kommer visas här",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vill du lägga till fjärrdelning {name} från {owner}@{remote}?",
- "Remote share" : "Fjärrdelning",
- "Remote share password" : "Lösenord för fjärrdelning",
- "Cancel" : "Avbryt",
- "Add remote share" : "Lägg till fjärrdelning",
+ "Files and folders you share by link will show up here" : "Filer och mappar som du delar som länkar kommer visas här",
"You can upload into this folder" : "Du kan ladda upp i denna map",
+ "No compatible server found at {remote}" : "Ingen kompatibel server hittad på {remote}",
+ "Invalid server URL" : "Ogiltig server URL",
+ "Failed to add the public link to your Nextcloud" : "Misslyckades skapa den offentliga delningslänken till ditt moln",
+ "Share" : "Dela",
+ "No expiration date set" : "Inget utgångsdatum satt",
"Shared by" : "Delad av",
- "Sharing" : "Dela",
- "A file or folder has been <strong>shared</strong>" : "En fil eller mapp har <strong>delats</strong>",
+ "Sharing" : "Delning",
+ "File shares" : "Fildelningar",
+ "Downloaded via public link" : "Nedladdad via offentlig länk",
+ "Downloaded by %1$s" : "Nedladdad av %1$s",
+ "Downloaded by {email}" : "Nedladdad av {email}",
+ "%1$s downloaded via public link" : "%1$s nedladdad via offentlig länk",
+ "{file} downloaded via public link" : "{file} nedladdad via offentlig länk",
+ "%1$s downloaded %2$s" : "%1$s laddade ned %2$s",
+ "{email} downloaded {file}" : "{email} laddade ned {file}",
+ "Shared with group %1$s" : "Delad med grupp %1$s",
+ "Shared with group {group}" : "Delad med grupp {group}",
+ "Removed share for group %1$s" : "Tog bort delning för grupp %1$s",
+ "Removed share for group {group}" : "Tog bort delning för grupp {group}",
+ "%2$s shared with group %1$s" : "%2$s delad med grupp %1$s",
+ "{actor} shared with group {group}" : "{actor} delade med gruppen {group}",
+ "%2$s removed share for group %1$s" : "%2$s tog bort delningen för gruppen %1$s",
+ "{actor} removed share for group {group}" : "{actor} tog bort delningen för gruppen {group}",
+ "You shared %1$s with group %2$s" : "Du delade %1$s med grupp %2$s",
+ "You shared {file} with group {group}" : "Du delade {file} med gruppen {group}",
+ "You removed group %2$s from %1$s" : "Du tog bort gruppen %2$s från %1$s",
+ "You removed group {group} from {file}" : "Du tog bort gruppen {group} från {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s delade %1$s med gruppen %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} delade {file} med gruppen {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s tog bort gruppen %2$s från %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} tog bort gruppen {group} från {file}",
+ "Shared as public link" : "Delades offentligt",
+ "Removed public link" : "Tog bort offentlig länk",
+ "%1$s shared as public link" : "%1$s delade offentligt",
+ "{actor} shared as public link" : "{actor} delade offentligt",
+ "%1$s removed public link" : "%1$s tog bort offentlig länk",
+ "{actor} removed public link" : "{actor} tog bort offentlig länk",
+ "You shared %1$s as public link" : "Du delade %1$s offentligt",
+ "You shared {file} as public link" : "Du delade {file} offentligt",
+ "You removed public link for %1$s" : "Du tog bort den offentliga länken för %1$s",
+ "You removed public link for {file}" : "Du tog bort den offentliga länken för {file}",
+ "%2$s shared %1$s as public link" : "%2$s delade %1$s offentligt",
+ "{actor} shared {file} as public link" : "{actor} delade {file} offentligt",
+ "%2$s removed public link for %1$s" : "%2$s tog bort den offentliga länken för %1$s",
+ "{actor} removed public link for {file}" : "{actor} tog bort den offentliga länken för {file}",
+ "%1$s accepted the remote share" : "%1$s accepterade extern delning",
+ "{user} accepted the remote share" : "{user} accepterade extern delning",
+ "%1$s declined the remote share" : "%1$s nekade extern delning",
+ "{user} declined the remote share" : "{user} nekade extern delning",
+ "You received a new remote share %1$s from %2$s" : "Du har fått en ny extern delning %1$s från %2$s",
+ "You received a new remote share {file} from {user}" : "Du har fått en ny extern delning {file} från {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s accepterade extern delning av %1$s",
+ "{user} accepted the remote share of {file}" : "{user} accepterade extern delning av {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s nekade extern delning av %1$s",
+ "{user} declined the remote share of {file}" : "{user} nekade extern delning av {file}",
+ "%2$s unshared %1$s from you" : "%2$s slutade dela %1$s med dig",
+ "{user} unshared {file} from you" : "{user} slutade dela {file} med dig",
+ "Shared with %1$s" : "Delade med %1$s",
+ "Shared with {user}" : "Delade med {user}",
+ "Removed share for %1$s" : "Tog bort delningen för %1$s",
+ "Removed share for {user}" : "Tog bort delningen för {user}",
+ "%2$s shared with %1$s" : "%2$s delade med %1$s",
+ "{actor} shared with {user}" : "{actor} delade med {user}",
+ "%2$s removed share for %1$s" : "%2$s tog bort delningen för %1$s",
+ "{actor} removed share for {user}" : "{actor} tog bort delningen för {user}",
+ "Shared by %1$s" : "Delad av %1$s",
+ "Shared by {actor}" : "Delad av {actor}",
+ "%1$s removed share" : "%1$s tog bort delning",
+ "{actor} removed share" : "{actor} tog bort delning",
+ "You shared %1$s with %2$s" : "Du delade %1$s med %2$s",
+ "You shared {file} with {user}" : "Du delade {file} med {user}",
+ "You removed %2$s from %1$s" : "Du tog bort %2$s från %1$s",
+ "You removed {user} from {file}" : "Du tog bort {user} från {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s delade %1$s med %2$s",
+ "{actor} removed {user} from {file}" : "{actor} tog bort {user} från {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s tog bort %2$s från %1$s",
+ "%2$s shared %1$s with you" : "%2$s delade %1$s med dig",
+ "{actor} shared {file} with you" : "{actor} delade {file} med dig",
+ "%2$s removed you from %1$s" : "%2$s tog bort dig från %1$s",
+ "{actor} removed you from {file}" : "{actor} tog bort dig från {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "En fil eller mapp som delats via mejl eller offentlig länk har blivit <strong>nedladdad</strong>",
"A file or folder was shared from <strong>another server</strong>" : "En fil eller mapp delades från <strong>en annan server</strong>",
- "A public shared file or folder was <strong>downloaded</strong>" : "En publikt delad fil eller mapp blev <strong>nerladdad</strong>",
- "You received a new remote share %2$s from %1$s" : "Du har mottagit en fjärrdelning %2$s från %1$s",
- "You received a new remote share from %s" : "Du mottog en ny fjärrdelning från %s",
- "%1$s accepted remote share %2$s" : "%1$s accepterade fjärrdelning %2$s",
- "%1$s declined remote share %2$s" : "%1$s nekade fjärrdelning %2$s",
+ "A file or folder has been <strong>shared</strong>" : "En fil eller mapp har <strong>delats</strong>",
+ "Wrong share ID, share doesn't exist" : "Fel delnings-ID, delningen finns inte",
+ "could not delete share" : "kunde inte ta bort delningen",
+ "Could not delete share" : "Kunde inte ta bort delningen",
+ "Please specify a file or folder path" : "Ange sökväg till filen eller mappen",
+ "Wrong path, file/folder doesn't exist" : "Fel sökväg, fil/mapp finns inte",
+ "Could not create share" : "Kunde inte skapa delning",
+ "invalid permissions" : "ogiltiga behörigheter",
+ "Please specify a valid user" : "Ange en giltig användare",
+ "Group sharing is disabled by the administrator" : "Gruppdelning är avstängt",
+ "Please specify a valid group" : "Ange en giltig grupp",
+ "Public link sharing is disabled by the administrator" : "Offentlig delningslänk är avstängt",
+ "Public upload disabled by the administrator" : "Offentlig uppladdning är avstängt",
+ "Public upload is only possible for publicly shared folders" : "Offentlig uppladdning fungerar endast i offentligt delade mappar",
+ "Invalid date, date format must be YYYY-MM-DD" : "Ogiltigt datum, måste anges: ÅÅÅÅ-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Delningen av %s misslyckades. Ej tillåtet med delning av %s",
+ "Unknown share type" : "Ogiltig delningstyp",
+ "Not a directory" : "Inte en mapp",
+ "Could not lock path" : "Kunde inte låsa sökvägen",
+ "Wrong or no update parameter given" : "Fel eller ingen uppdateringsparameter angiven",
+ "Can't change permissions for public share links" : "Det går inte att ändra behörigheterna för offentliga länkar",
+ "Cannot increase permissions" : "Kan inte utöka behörigheter",
+ "%s is publicly shared" : "%s är offentligt delad",
+ "Share API is disabled" : "Delning av API är inaktiverad",
+ "This share is password-protected" : "Den här delningen är lösenordsskyddad",
+ "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.",
+ "Password" : "Lösenord",
+ "No entries found in this folder" : "Inga filer hittades i denna mapp",
+ "Name" : "Namn",
+ "Share time" : "Delningstid",
+ "Expiration date" : "Utgångsdatum",
+ "Sorry, this link doesn’t seem to work anymore." : "Tyvärr, denna länk verkar inte fungera längre.",
+ "Reasons might be:" : "Orsaker kan vara:",
+ "the item was removed" : "objektet togs bort",
+ "the link expired" : "giltighet för länken har gått ut",
+ "sharing is disabled" : "delning är inaktiverat",
+ "For more info, please ask the person who sent this link." : "För mer information, kontakta den person som skickade den här länken.",
+ "Add to your Nextcloud" : "Lägg till i molnet",
+ "Download" : "Ladda ned",
+ "Download %s" : "Ladda ned %s",
+ "Direct link" : "Direktlänk",
+ "Upload files to %s" : "Ladda upp filer till %s",
+ "Select or drop files" : "Välj eller dra filer hit",
+ "Uploading files…" : "Laddar upp filer...",
+ "Uploaded files:" : "Uppladdade filer:",
+ "A public shared file or folder was <strong>downloaded</strong>" : "En offentligt delad fil eller mapp blev <strong>nedladdad</strong>",
+ "You received a new remote share %2$s from %1$s" : "Du har mottagit en ny extern delning %2$s från %1$s",
+ "You received a new remote share from %s" : "Du har mottagit en ny extern delning från %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepterade extern delning %2$s",
+ "%1$s declined remote share %2$s" : "%1$s nekade extern delning av %2$s",
"%1$s unshared %2$s from you" : "%1$s tog bort delningen %2$s från dig",
- "Public shared folder %1$s was downloaded" : "Publikt delad mapp %1$s blev nerladdad",
- "Public shared file %1$s was downloaded" : "Publikt delad fil %1$s blev nerladdad",
- "You shared %1$s with %2$s" : "Du delade %1$s med %2$s",
+ "Public shared folder %1$s was downloaded" : "Offentligt delad mapp %1$s blev nedladdad",
+ "Public shared file %1$s was downloaded" : "Offentligt delad fil %1$s blev nedladdad",
"%2$s shared %1$s with %3$s" : "%2$s delade %1$s med %3$s",
"You removed the share of %2$s for %1$s" : "Du tog bort delning av %2$s för %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s tog bort delningen av %3$s för %1$s",
- "You shared %1$s with group %2$s" : "Du delade %1$s med grupp %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s delade %1$s med gruppen %3$s",
"You removed the share of group %2$s for %1$s" : "Du tog bort delningen av gruppen %2$s för %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s tog bort delningen av grupp %3$s för %1$s",
"%2$s shared %1$s via link" : "%2$s delade %1$s via länk",
"You shared %1$s via link" : "Du delade %1$s via länk",
- "You removed the public link for %1$s" : "Du tog bort den publika länken för %1$s",
- "%2$s removed the public link for %1$s" : "%2$s tog bort den publika länken för %1$s",
- "Your public link for %1$s expired" : "Din publika länk för %1$s har löpt ut",
- "The public link of %2$s for %1$s expired" : "Den publika länken för %2$s av %1$s har löpt ut",
- "%2$s shared %1$s with you" : "%2$s delade %1$s med dig",
+ "You removed the public link for %1$s" : "Du tog bort den offentliga länken för %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s tog bort den offentliga länken för %1$s",
+ "Your public link for %1$s expired" : "Din offentliga länk för %1$s har löpt ut",
+ "The public link of %2$s for %1$s expired" : "Den offentliga länken för %2$s av %1$s har löpt ut",
"%2$s removed the share for %1$s" : "%2$s tog bort delningen av %1$s",
- "Downloaded via public link" : "Nerladdad via publik länk",
"Shared with %2$s" : "Delad med %2$s",
"Shared with %3$s by %2$s" : "Delad med %3$s av %2$s",
"Removed share for %2$s" : "Tog bort delningen för %2$s",
@@ -61,28 +168,11 @@ OC.L10N.register(
"Removed share of group %2$s" : "Tog bort delning av grupp %2$s",
"%2$s removed share of group %3$s" : "%2$s tog bort delningen av grupp %3$s",
"Shared via link by %2$s" : "Delad via länk av %2$s",
- "Shared via public link" : "Delad via publik länk",
- "Removed public link" : "Tog bort publik länk",
- "%2$s removed public link" : "%2$s tog bort publik länk",
- "Public link expired" : "Tidsgräns för publik länk har löpt ut",
- "Public link of %2$s expired" : "Tidsgräns för publik länk för %2$s har löpt ut",
+ "Shared via public link" : "Delad via offentlig länk",
+ "%2$s removed public link" : "%2$s tog bort offentlig länk",
+ "Public link expired" : "Tidsgräns för offentlig länk har löpt ut",
+ "Public link of %2$s expired" : "Tidsgräns för offentlig länk för %2$s har löpt ut",
"Shared by %2$s" : "Delad av %2$s",
- "Shares" : "Delningar",
- "This share is password-protected" : "Den här delningen är lösenordsskyddad",
- "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.",
- "Password" : "Lösenord",
- "No entries found in this folder" : "nga Filer hittades i denna mapp",
- "Name" : "Namn",
- "Share time" : "Delningstid",
- "Sorry, this link doesn’t seem to work anymore." : "Tyvärr, denna länk verkar inte fungera längre.",
- "Reasons might be:" : "Orsaker kan vara:",
- "the item was removed" : "objektet togs bort",
- "the link expired" : "giltighet för länken har gått ut",
- "sharing is disabled" : "delning är inaktiverat",
- "For more info, please ask the person who sent this link." : "För mer information, kontakta den person som skickade den här länken.",
- "Add to your ownCloud" : "Lägg till i din ownCloud",
- "Download" : "Ladda ner",
- "Download %s" : "Ladda ner %s",
- "Direct link" : "Direkt länk"
+ "Shares" : "Delningar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json
index 870d7c1c3a4..84a1e4a83bf 100644
--- a/apps/files_sharing/l10n/sv.json
+++ b/apps/files_sharing/l10n/sv.json
@@ -1,55 +1,162 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "Server-till-server-delning är inte aktiverat på denna server",
- "The mountpoint name contains invalid characters." : "Monteringspunktens namn innehåller ogiltiga tecken.",
- "Not allowed to create a federated share with the same user server" : "Ej tillåten att skapa en federerad delning med samma användarserver.",
- "Invalid or untrusted SSL certificate" : "Ogiltigt eller ej betrott SSL-certifikat",
- "Could not authenticate to remote share, password might be wrong" : "Kunde ej autensiera fjärrdelningen, lösenordet kan vara fel",
- "Storage not valid" : "Lagring ej giltig",
- "Couldn't add remote share" : "Kunde inte lägga till fjärrutdelning",
"Shared with you" : "Delat med dig",
"Shared with others" : "Delat med andra",
- "Shared by link" : "Delad som länk",
+ "Shared by link" : "Delat som länk",
"Nothing shared with you yet" : "Inget delat med dig ännu",
- "Files and folders others share with you will show up here" : "Filer och mappar andra delar med dig kommer visas här",
+ "Files and folders others share with you will show up here" : "Filer och mappar som andra delar med dig kommer visas här",
"Nothing shared yet" : "Inget delat ännu",
- "Files and folders you share will show up here" : "Filer och mappar du delar kommer visas här",
+ "Files and folders you share will show up here" : "Filer och mappar som du delar kommer visas här",
"No shared links" : "Inga delade länkar",
- "Files and folders you share by link will show up here" : "Filer och mappar du delar som länkar kommer visas här",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vill du lägga till fjärrdelning {name} från {owner}@{remote}?",
- "Remote share" : "Fjärrdelning",
- "Remote share password" : "Lösenord för fjärrdelning",
- "Cancel" : "Avbryt",
- "Add remote share" : "Lägg till fjärrdelning",
+ "Files and folders you share by link will show up here" : "Filer och mappar som du delar som länkar kommer visas här",
"You can upload into this folder" : "Du kan ladda upp i denna map",
+ "No compatible server found at {remote}" : "Ingen kompatibel server hittad på {remote}",
+ "Invalid server URL" : "Ogiltig server URL",
+ "Failed to add the public link to your Nextcloud" : "Misslyckades skapa den offentliga delningslänken till ditt moln",
+ "Share" : "Dela",
+ "No expiration date set" : "Inget utgångsdatum satt",
"Shared by" : "Delad av",
- "Sharing" : "Dela",
- "A file or folder has been <strong>shared</strong>" : "En fil eller mapp har <strong>delats</strong>",
+ "Sharing" : "Delning",
+ "File shares" : "Fildelningar",
+ "Downloaded via public link" : "Nedladdad via offentlig länk",
+ "Downloaded by %1$s" : "Nedladdad av %1$s",
+ "Downloaded by {email}" : "Nedladdad av {email}",
+ "%1$s downloaded via public link" : "%1$s nedladdad via offentlig länk",
+ "{file} downloaded via public link" : "{file} nedladdad via offentlig länk",
+ "%1$s downloaded %2$s" : "%1$s laddade ned %2$s",
+ "{email} downloaded {file}" : "{email} laddade ned {file}",
+ "Shared with group %1$s" : "Delad med grupp %1$s",
+ "Shared with group {group}" : "Delad med grupp {group}",
+ "Removed share for group %1$s" : "Tog bort delning för grupp %1$s",
+ "Removed share for group {group}" : "Tog bort delning för grupp {group}",
+ "%2$s shared with group %1$s" : "%2$s delad med grupp %1$s",
+ "{actor} shared with group {group}" : "{actor} delade med gruppen {group}",
+ "%2$s removed share for group %1$s" : "%2$s tog bort delningen för gruppen %1$s",
+ "{actor} removed share for group {group}" : "{actor} tog bort delningen för gruppen {group}",
+ "You shared %1$s with group %2$s" : "Du delade %1$s med grupp %2$s",
+ "You shared {file} with group {group}" : "Du delade {file} med gruppen {group}",
+ "You removed group %2$s from %1$s" : "Du tog bort gruppen %2$s från %1$s",
+ "You removed group {group} from {file}" : "Du tog bort gruppen {group} från {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s delade %1$s med gruppen %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} delade {file} med gruppen {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s tog bort gruppen %2$s från %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} tog bort gruppen {group} från {file}",
+ "Shared as public link" : "Delades offentligt",
+ "Removed public link" : "Tog bort offentlig länk",
+ "%1$s shared as public link" : "%1$s delade offentligt",
+ "{actor} shared as public link" : "{actor} delade offentligt",
+ "%1$s removed public link" : "%1$s tog bort offentlig länk",
+ "{actor} removed public link" : "{actor} tog bort offentlig länk",
+ "You shared %1$s as public link" : "Du delade %1$s offentligt",
+ "You shared {file} as public link" : "Du delade {file} offentligt",
+ "You removed public link for %1$s" : "Du tog bort den offentliga länken för %1$s",
+ "You removed public link for {file}" : "Du tog bort den offentliga länken för {file}",
+ "%2$s shared %1$s as public link" : "%2$s delade %1$s offentligt",
+ "{actor} shared {file} as public link" : "{actor} delade {file} offentligt",
+ "%2$s removed public link for %1$s" : "%2$s tog bort den offentliga länken för %1$s",
+ "{actor} removed public link for {file}" : "{actor} tog bort den offentliga länken för {file}",
+ "%1$s accepted the remote share" : "%1$s accepterade extern delning",
+ "{user} accepted the remote share" : "{user} accepterade extern delning",
+ "%1$s declined the remote share" : "%1$s nekade extern delning",
+ "{user} declined the remote share" : "{user} nekade extern delning",
+ "You received a new remote share %1$s from %2$s" : "Du har fått en ny extern delning %1$s från %2$s",
+ "You received a new remote share {file} from {user}" : "Du har fått en ny extern delning {file} från {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s accepterade extern delning av %1$s",
+ "{user} accepted the remote share of {file}" : "{user} accepterade extern delning av {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s nekade extern delning av %1$s",
+ "{user} declined the remote share of {file}" : "{user} nekade extern delning av {file}",
+ "%2$s unshared %1$s from you" : "%2$s slutade dela %1$s med dig",
+ "{user} unshared {file} from you" : "{user} slutade dela {file} med dig",
+ "Shared with %1$s" : "Delade med %1$s",
+ "Shared with {user}" : "Delade med {user}",
+ "Removed share for %1$s" : "Tog bort delningen för %1$s",
+ "Removed share for {user}" : "Tog bort delningen för {user}",
+ "%2$s shared with %1$s" : "%2$s delade med %1$s",
+ "{actor} shared with {user}" : "{actor} delade med {user}",
+ "%2$s removed share for %1$s" : "%2$s tog bort delningen för %1$s",
+ "{actor} removed share for {user}" : "{actor} tog bort delningen för {user}",
+ "Shared by %1$s" : "Delad av %1$s",
+ "Shared by {actor}" : "Delad av {actor}",
+ "%1$s removed share" : "%1$s tog bort delning",
+ "{actor} removed share" : "{actor} tog bort delning",
+ "You shared %1$s with %2$s" : "Du delade %1$s med %2$s",
+ "You shared {file} with {user}" : "Du delade {file} med {user}",
+ "You removed %2$s from %1$s" : "Du tog bort %2$s från %1$s",
+ "You removed {user} from {file}" : "Du tog bort {user} från {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s delade %1$s med %2$s",
+ "{actor} removed {user} from {file}" : "{actor} tog bort {user} från {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s tog bort %2$s från %1$s",
+ "%2$s shared %1$s with you" : "%2$s delade %1$s med dig",
+ "{actor} shared {file} with you" : "{actor} delade {file} med dig",
+ "%2$s removed you from %1$s" : "%2$s tog bort dig från %1$s",
+ "{actor} removed you from {file}" : "{actor} tog bort dig från {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "En fil eller mapp som delats via mejl eller offentlig länk har blivit <strong>nedladdad</strong>",
"A file or folder was shared from <strong>another server</strong>" : "En fil eller mapp delades från <strong>en annan server</strong>",
- "A public shared file or folder was <strong>downloaded</strong>" : "En publikt delad fil eller mapp blev <strong>nerladdad</strong>",
- "You received a new remote share %2$s from %1$s" : "Du har mottagit en fjärrdelning %2$s från %1$s",
- "You received a new remote share from %s" : "Du mottog en ny fjärrdelning från %s",
- "%1$s accepted remote share %2$s" : "%1$s accepterade fjärrdelning %2$s",
- "%1$s declined remote share %2$s" : "%1$s nekade fjärrdelning %2$s",
+ "A file or folder has been <strong>shared</strong>" : "En fil eller mapp har <strong>delats</strong>",
+ "Wrong share ID, share doesn't exist" : "Fel delnings-ID, delningen finns inte",
+ "could not delete share" : "kunde inte ta bort delningen",
+ "Could not delete share" : "Kunde inte ta bort delningen",
+ "Please specify a file or folder path" : "Ange sökväg till filen eller mappen",
+ "Wrong path, file/folder doesn't exist" : "Fel sökväg, fil/mapp finns inte",
+ "Could not create share" : "Kunde inte skapa delning",
+ "invalid permissions" : "ogiltiga behörigheter",
+ "Please specify a valid user" : "Ange en giltig användare",
+ "Group sharing is disabled by the administrator" : "Gruppdelning är avstängt",
+ "Please specify a valid group" : "Ange en giltig grupp",
+ "Public link sharing is disabled by the administrator" : "Offentlig delningslänk är avstängt",
+ "Public upload disabled by the administrator" : "Offentlig uppladdning är avstängt",
+ "Public upload is only possible for publicly shared folders" : "Offentlig uppladdning fungerar endast i offentligt delade mappar",
+ "Invalid date, date format must be YYYY-MM-DD" : "Ogiltigt datum, måste anges: ÅÅÅÅ-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Delningen av %s misslyckades. Ej tillåtet med delning av %s",
+ "Unknown share type" : "Ogiltig delningstyp",
+ "Not a directory" : "Inte en mapp",
+ "Could not lock path" : "Kunde inte låsa sökvägen",
+ "Wrong or no update parameter given" : "Fel eller ingen uppdateringsparameter angiven",
+ "Can't change permissions for public share links" : "Det går inte att ändra behörigheterna för offentliga länkar",
+ "Cannot increase permissions" : "Kan inte utöka behörigheter",
+ "%s is publicly shared" : "%s är offentligt delad",
+ "Share API is disabled" : "Delning av API är inaktiverad",
+ "This share is password-protected" : "Den här delningen är lösenordsskyddad",
+ "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.",
+ "Password" : "Lösenord",
+ "No entries found in this folder" : "Inga filer hittades i denna mapp",
+ "Name" : "Namn",
+ "Share time" : "Delningstid",
+ "Expiration date" : "Utgångsdatum",
+ "Sorry, this link doesn’t seem to work anymore." : "Tyvärr, denna länk verkar inte fungera längre.",
+ "Reasons might be:" : "Orsaker kan vara:",
+ "the item was removed" : "objektet togs bort",
+ "the link expired" : "giltighet för länken har gått ut",
+ "sharing is disabled" : "delning är inaktiverat",
+ "For more info, please ask the person who sent this link." : "För mer information, kontakta den person som skickade den här länken.",
+ "Add to your Nextcloud" : "Lägg till i molnet",
+ "Download" : "Ladda ned",
+ "Download %s" : "Ladda ned %s",
+ "Direct link" : "Direktlänk",
+ "Upload files to %s" : "Ladda upp filer till %s",
+ "Select or drop files" : "Välj eller dra filer hit",
+ "Uploading files…" : "Laddar upp filer...",
+ "Uploaded files:" : "Uppladdade filer:",
+ "A public shared file or folder was <strong>downloaded</strong>" : "En offentligt delad fil eller mapp blev <strong>nedladdad</strong>",
+ "You received a new remote share %2$s from %1$s" : "Du har mottagit en ny extern delning %2$s från %1$s",
+ "You received a new remote share from %s" : "Du har mottagit en ny extern delning från %s",
+ "%1$s accepted remote share %2$s" : "%1$s accepterade extern delning %2$s",
+ "%1$s declined remote share %2$s" : "%1$s nekade extern delning av %2$s",
"%1$s unshared %2$s from you" : "%1$s tog bort delningen %2$s från dig",
- "Public shared folder %1$s was downloaded" : "Publikt delad mapp %1$s blev nerladdad",
- "Public shared file %1$s was downloaded" : "Publikt delad fil %1$s blev nerladdad",
- "You shared %1$s with %2$s" : "Du delade %1$s med %2$s",
+ "Public shared folder %1$s was downloaded" : "Offentligt delad mapp %1$s blev nedladdad",
+ "Public shared file %1$s was downloaded" : "Offentligt delad fil %1$s blev nedladdad",
"%2$s shared %1$s with %3$s" : "%2$s delade %1$s med %3$s",
"You removed the share of %2$s for %1$s" : "Du tog bort delning av %2$s för %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s tog bort delningen av %3$s för %1$s",
- "You shared %1$s with group %2$s" : "Du delade %1$s med grupp %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s delade %1$s med gruppen %3$s",
"You removed the share of group %2$s for %1$s" : "Du tog bort delningen av gruppen %2$s för %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s tog bort delningen av grupp %3$s för %1$s",
"%2$s shared %1$s via link" : "%2$s delade %1$s via länk",
"You shared %1$s via link" : "Du delade %1$s via länk",
- "You removed the public link for %1$s" : "Du tog bort den publika länken för %1$s",
- "%2$s removed the public link for %1$s" : "%2$s tog bort den publika länken för %1$s",
- "Your public link for %1$s expired" : "Din publika länk för %1$s har löpt ut",
- "The public link of %2$s for %1$s expired" : "Den publika länken för %2$s av %1$s har löpt ut",
- "%2$s shared %1$s with you" : "%2$s delade %1$s med dig",
+ "You removed the public link for %1$s" : "Du tog bort den offentliga länken för %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s tog bort den offentliga länken för %1$s",
+ "Your public link for %1$s expired" : "Din offentliga länk för %1$s har löpt ut",
+ "The public link of %2$s for %1$s expired" : "Den offentliga länken för %2$s av %1$s har löpt ut",
"%2$s removed the share for %1$s" : "%2$s tog bort delningen av %1$s",
- "Downloaded via public link" : "Nerladdad via publik länk",
"Shared with %2$s" : "Delad med %2$s",
"Shared with %3$s by %2$s" : "Delad med %3$s av %2$s",
"Removed share for %2$s" : "Tog bort delningen för %2$s",
@@ -59,28 +166,11 @@
"Removed share of group %2$s" : "Tog bort delning av grupp %2$s",
"%2$s removed share of group %3$s" : "%2$s tog bort delningen av grupp %3$s",
"Shared via link by %2$s" : "Delad via länk av %2$s",
- "Shared via public link" : "Delad via publik länk",
- "Removed public link" : "Tog bort publik länk",
- "%2$s removed public link" : "%2$s tog bort publik länk",
- "Public link expired" : "Tidsgräns för publik länk har löpt ut",
- "Public link of %2$s expired" : "Tidsgräns för publik länk för %2$s har löpt ut",
+ "Shared via public link" : "Delad via offentlig länk",
+ "%2$s removed public link" : "%2$s tog bort offentlig länk",
+ "Public link expired" : "Tidsgräns för offentlig länk har löpt ut",
+ "Public link of %2$s expired" : "Tidsgräns för offentlig länk för %2$s har löpt ut",
"Shared by %2$s" : "Delad av %2$s",
- "Shares" : "Delningar",
- "This share is password-protected" : "Den här delningen är lösenordsskyddad",
- "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.",
- "Password" : "Lösenord",
- "No entries found in this folder" : "nga Filer hittades i denna mapp",
- "Name" : "Namn",
- "Share time" : "Delningstid",
- "Sorry, this link doesn’t seem to work anymore." : "Tyvärr, denna länk verkar inte fungera längre.",
- "Reasons might be:" : "Orsaker kan vara:",
- "the item was removed" : "objektet togs bort",
- "the link expired" : "giltighet för länken har gått ut",
- "sharing is disabled" : "delning är inaktiverat",
- "For more info, please ask the person who sent this link." : "För mer information, kontakta den person som skickade den här länken.",
- "Add to your ownCloud" : "Lägg till i din ownCloud",
- "Download" : "Ladda ner",
- "Download %s" : "Ladda ner %s",
- "Direct link" : "Direkt länk"
+ "Shares" : "Delningar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js
index 80addb4fe86..93bed366572 100644
--- a/apps/files_sharing/l10n/zh_CN.js
+++ b/apps/files_sharing/l10n/zh_CN.js
@@ -4,19 +4,65 @@ OC.L10N.register(
"Shared with you" : "分享给您的文件",
"Shared with others" : "您分享的文件",
"Shared by link" : "分享链接的文件",
- "Nothing shared with you yet" : "你还没有收到任何共享的文件",
+ "Nothing shared with you yet" : "您还没有收到任何共享的文件",
"Files and folders others share with you will show up here" : "其它人共享给您的文件和文件夹将显示在这里",
"Nothing shared yet" : "还没有共享过文件",
"Files and folders you share will show up here" : "您共享的文件和文件夹将显示在这里",
"No shared links" : "无分享链接",
"Files and folders you share by link will show up here" : "您通过链接共享的文件和文件夹将显示在这里",
"You can upload into this folder" : "您可以上传文件至此文件夹",
+ "No compatible server found at {remote}" : " {remote} 未发现匹配的服务器",
+ "Invalid server URL" : "无效的服务器地址",
+ "Failed to add the public link to your Nextcloud" : "添加公开链接到您的 Nextcloud 失败",
+ "Share" : "分享",
+ "No expiration date set" : "未设置失效时间",
"Shared by" : "共享人",
"Sharing" : "共享",
+ "File shares" : "文件共享",
+ "Downloaded via public link" : "通过公开链接下载",
+ "Downloaded by %1$s" : "已被 %1$s 下载",
+ "Downloaded by {email}" : "已被 {email} 下载",
+ "%1$s downloaded via public link" : "已被 %1$s 通过公开链接下载",
+ "{file} downloaded via public link" : "{file} 被通过公开链接下载",
+ "%1$s downloaded %2$s" : "%1$s 已下载 %2$s",
+ "{email} downloaded {file}" : "{email} 已下载 {file}",
+ "Shared with group %1$s" : "分享到群组 %1$s",
+ "Shared with group {group}" : "分享到群组 {group}",
+ "Removed share for group %1$s" : "到群组 %1$s 的分享已被移除",
+ "Removed share for group {group}" : "到群组 {group} 的分享已被移除 ",
+ "%2$s shared with group %1$s" : "%2$s 被分享到群组 %1$s",
+ "{actor} shared with group {group}" : "{actor} 被分享到群组 {group}",
+ "You shared %1$s with group %2$s" : "您把 %1$s 分享给了 %2$s 组",
+ "You removed group %2$s from %1$s" : "你移除了群组 %2$s 在 %1$s",
+ "Shared as public link" : "共享为公开链接",
+ "Removed public link" : "移除公开链接",
+ "%1$s shared as public link" : "%1$s 公共链接分享",
+ "{actor} shared as public link" : "{actor} 公共链接分享",
+ "%1$s removed public link" : "%1$s 删除公共链接",
+ "{actor} removed public link" : "{actor} 删除公共链接",
+ "You shared %1$s as public link" : "你共享了 %1$s 为公开链接",
+ "You shared {file} as public link" : "你共享了 {file} 为公开链接",
+ "You removed public link for %1$s" : "你移除了 %1$s 的公开链接",
+ "You removed public link for {file}" : "你移除了 {file} 的公开链接",
+ "{user} accepted the remote share" : "{user} 接受了远程共享",
+ "Shared with %1$s" : "与 %1$s 分享",
+ "Shared with {user}" : "与 {user} 分享",
+ "Removed share for {user}" : "移除给 {user} 的共享",
+ "Shared by %1$s" : "由 %1$s 共享",
+ "Shared by {actor}" : "由 {actor} 共享",
+ "%1$s removed share" : "%1$s 移除共享",
+ "You shared %1$s with %2$s" : "您把 %1$s分享给了 %2$s",
+ "{actor} removed {user} from {file}" : "{actor} 移除 {user} 从 {file}",
+ "%2$s shared %1$s with you" : "%2$s 把 %1$s 分享给了您",
+ "A file or folder was shared from <strong>another server</strong>" : "<strong>其它服务器</strong> 中一个文件或者文件夹被共享 ",
+ "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。",
"Wrong share ID, share doesn't exist" : "错误的共享 ID,共享不存在",
+ "could not delete share" : "无法删除共享",
"Could not delete share" : "不能删除共享",
"Please specify a file or folder path" : "请指定一个文件或文件夹路径",
"Wrong path, file/folder doesn't exist" : "路径错误,文件/文件夹不存在",
+ "Could not create share" : "无法创建共享",
+ "invalid permissions" : "无效的权限",
"Please specify a valid user" : "请指定一个有效的用户",
"Group sharing is disabled by the administrator" : "群组共享已被管理员禁用",
"Please specify a valid group" : "请指定一个有效的组",
@@ -31,8 +77,29 @@ OC.L10N.register(
"Wrong or no update parameter given" : "错误或没有更新参数给出",
"Can't change permissions for public share links" : "不能改变公共分享链接权限",
"Cannot increase permissions" : "不能增加权限",
- "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。",
- "A file or folder was shared from <strong>another server</strong>" : "<strong>其它服务器</strong> 中一个文件或者文件夹被共享 ",
+ "%s is publicly shared" : "%s 是公开共享",
+ "Share API is disabled" : "共享 API 已被禁用",
+ "This share is password-protected" : "这是一个密码保护的共享",
+ "The password is wrong. Try again." : "用户名或密码错误!请重试",
+ "Password" : "密码",
+ "No entries found in this folder" : "此文件夹中无项目",
+ "Name" : "名称",
+ "Share time" : "分享时间",
+ "Expiration date" : "到期日期 ",
+ "Sorry, this link doesn’t seem to work anymore." : "抱歉,此链接已失效",
+ "Reasons might be:" : "可能原因是:",
+ "the item was removed" : "此项已移除",
+ "the link expired" : "链接过期",
+ "sharing is disabled" : "分享已禁用",
+ "For more info, please ask the person who sent this link." : "欲知详情,请联系发给你链接的人。",
+ "Add to your Nextcloud" : "添加到你的 Nextcloud",
+ "Download" : "下载",
+ "Download %s" : "下载 %s",
+ "Direct link" : "直接链接",
+ "Upload files to %s" : "上传文件到 %s",
+ "Select or drop files" : "选择或删除文件",
+ "Uploading files…" : "上传文件 … ",
+ "Uploaded files:" : "上传的文件: ",
"A public shared file or folder was <strong>downloaded</strong>" : "一个公共共享的文件或文件夹<strong>已下载</strong>",
"You received a new remote share %2$s from %1$s" : "您收到一个新的远程共享 %2$s 来自于 %1$s",
"You received a new remote share from %s" : "您从%s收到了新的远程分享",
@@ -41,11 +108,9 @@ OC.L10N.register(
"%1$s unshared %2$s from you" : "%1$s 未共享你的 %2$s ",
"Public shared folder %1$s was downloaded" : "公共共享文件夹 %1$s 已被下载",
"Public shared file %1$s was downloaded" : "公共共享文件 %1$s 已被下载",
- "You shared %1$s with %2$s" : "您把 %1$s分享给了 %2$s",
"%2$s shared %1$s with %3$s" : "%2$s 共享 %1$s 给 %3$s",
"You removed the share of %2$s for %1$s" : "你移除了 %2$s 的共享 %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s 移除了 %3$s 的共享 %1$s",
- "You shared %1$s with group %2$s" : "你把 %1$s 分享给了 %2$s 组",
"%2$s shared %1$s with group %3$s" : "%2$s 共享 %1$s 给群组 %3$s",
"You removed the share of group %2$s for %1$s" : "你移除了组 %2$s 的共享 %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s 移除了组 %3$s 的共享 %1$s",
@@ -55,9 +120,7 @@ OC.L10N.register(
"%2$s removed the public link for %1$s" : "%2$s 移除了公共链接 %1$s",
"Your public link for %1$s expired" : "你的公开链接 %1$s 已过期",
"The public link of %2$s for %1$s expired" : "%2$s 的公开链接 %1$s 已过期",
- "%2$s shared %1$s with you" : "%2$s 把 %1$s 分享给了您",
"%2$s removed the share for %1$s" : "%2$s 移除了共享 %1$s",
- "Downloaded via public link" : "通过公开链接下载",
"Shared with %2$s" : "共享给 %2$s",
"Shared with %3$s by %2$s" : "由 %2$s 共享给 %3$s",
"Removed share for %2$s" : "移除共享 %2$s",
@@ -68,27 +131,10 @@ OC.L10N.register(
"%2$s removed share of group %3$s" : "%2$s 移除了群 %3$s 的共享",
"Shared via link by %2$s" : "%2$s 以链接方式共享",
"Shared via public link" : "通过公开链接共享",
- "Removed public link" : "移除公开链接",
"%2$s removed public link" : "%2$s 移除了公共链接",
"Public link expired" : "公开链接已过期",
"Public link of %2$s expired" : "%2$s 的公开链接已过期",
"Shared by %2$s" : "由 %2$s 共享",
- "Shares" : "共享",
- "Share API is disabled" : "共享 API 已被禁用",
- "This share is password-protected" : "这是一个密码保护的共享",
- "The password is wrong. Try again." : "用户名或密码错误!请重试",
- "Password" : "密码",
- "No entries found in this folder" : "此文件夹中无项目",
- "Name" : "名称",
- "Share time" : "分享时间",
- "Sorry, this link doesn’t seem to work anymore." : "抱歉,此链接已失效",
- "Reasons might be:" : "可能原因是:",
- "the item was removed" : "此项已移除",
- "the link expired" : "链接过期",
- "sharing is disabled" : "分享已禁用",
- "For more info, please ask the person who sent this link." : "欲知详情,请联系发给你链接的人。",
- "Download" : "下载",
- "Download %s" : "下载 %s",
- "Direct link" : "直接链接"
+ "Shares" : "共享"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json
index 6110036a466..38e3b36040e 100644
--- a/apps/files_sharing/l10n/zh_CN.json
+++ b/apps/files_sharing/l10n/zh_CN.json
@@ -2,19 +2,65 @@
"Shared with you" : "分享给您的文件",
"Shared with others" : "您分享的文件",
"Shared by link" : "分享链接的文件",
- "Nothing shared with you yet" : "你还没有收到任何共享的文件",
+ "Nothing shared with you yet" : "您还没有收到任何共享的文件",
"Files and folders others share with you will show up here" : "其它人共享给您的文件和文件夹将显示在这里",
"Nothing shared yet" : "还没有共享过文件",
"Files and folders you share will show up here" : "您共享的文件和文件夹将显示在这里",
"No shared links" : "无分享链接",
"Files and folders you share by link will show up here" : "您通过链接共享的文件和文件夹将显示在这里",
"You can upload into this folder" : "您可以上传文件至此文件夹",
+ "No compatible server found at {remote}" : " {remote} 未发现匹配的服务器",
+ "Invalid server URL" : "无效的服务器地址",
+ "Failed to add the public link to your Nextcloud" : "添加公开链接到您的 Nextcloud 失败",
+ "Share" : "分享",
+ "No expiration date set" : "未设置失效时间",
"Shared by" : "共享人",
"Sharing" : "共享",
+ "File shares" : "文件共享",
+ "Downloaded via public link" : "通过公开链接下载",
+ "Downloaded by %1$s" : "已被 %1$s 下载",
+ "Downloaded by {email}" : "已被 {email} 下载",
+ "%1$s downloaded via public link" : "已被 %1$s 通过公开链接下载",
+ "{file} downloaded via public link" : "{file} 被通过公开链接下载",
+ "%1$s downloaded %2$s" : "%1$s 已下载 %2$s",
+ "{email} downloaded {file}" : "{email} 已下载 {file}",
+ "Shared with group %1$s" : "分享到群组 %1$s",
+ "Shared with group {group}" : "分享到群组 {group}",
+ "Removed share for group %1$s" : "到群组 %1$s 的分享已被移除",
+ "Removed share for group {group}" : "到群组 {group} 的分享已被移除 ",
+ "%2$s shared with group %1$s" : "%2$s 被分享到群组 %1$s",
+ "{actor} shared with group {group}" : "{actor} 被分享到群组 {group}",
+ "You shared %1$s with group %2$s" : "您把 %1$s 分享给了 %2$s 组",
+ "You removed group %2$s from %1$s" : "你移除了群组 %2$s 在 %1$s",
+ "Shared as public link" : "共享为公开链接",
+ "Removed public link" : "移除公开链接",
+ "%1$s shared as public link" : "%1$s 公共链接分享",
+ "{actor} shared as public link" : "{actor} 公共链接分享",
+ "%1$s removed public link" : "%1$s 删除公共链接",
+ "{actor} removed public link" : "{actor} 删除公共链接",
+ "You shared %1$s as public link" : "你共享了 %1$s 为公开链接",
+ "You shared {file} as public link" : "你共享了 {file} 为公开链接",
+ "You removed public link for %1$s" : "你移除了 %1$s 的公开链接",
+ "You removed public link for {file}" : "你移除了 {file} 的公开链接",
+ "{user} accepted the remote share" : "{user} 接受了远程共享",
+ "Shared with %1$s" : "与 %1$s 分享",
+ "Shared with {user}" : "与 {user} 分享",
+ "Removed share for {user}" : "移除给 {user} 的共享",
+ "Shared by %1$s" : "由 %1$s 共享",
+ "Shared by {actor}" : "由 {actor} 共享",
+ "%1$s removed share" : "%1$s 移除共享",
+ "You shared %1$s with %2$s" : "您把 %1$s分享给了 %2$s",
+ "{actor} removed {user} from {file}" : "{actor} 移除 {user} 从 {file}",
+ "%2$s shared %1$s with you" : "%2$s 把 %1$s 分享给了您",
+ "A file or folder was shared from <strong>another server</strong>" : "<strong>其它服务器</strong> 中一个文件或者文件夹被共享 ",
+ "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。",
"Wrong share ID, share doesn't exist" : "错误的共享 ID,共享不存在",
+ "could not delete share" : "无法删除共享",
"Could not delete share" : "不能删除共享",
"Please specify a file or folder path" : "请指定一个文件或文件夹路径",
"Wrong path, file/folder doesn't exist" : "路径错误,文件/文件夹不存在",
+ "Could not create share" : "无法创建共享",
+ "invalid permissions" : "无效的权限",
"Please specify a valid user" : "请指定一个有效的用户",
"Group sharing is disabled by the administrator" : "群组共享已被管理员禁用",
"Please specify a valid group" : "请指定一个有效的组",
@@ -29,8 +75,29 @@
"Wrong or no update parameter given" : "错误或没有更新参数给出",
"Can't change permissions for public share links" : "不能改变公共分享链接权限",
"Cannot increase permissions" : "不能增加权限",
- "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。",
- "A file or folder was shared from <strong>another server</strong>" : "<strong>其它服务器</strong> 中一个文件或者文件夹被共享 ",
+ "%s is publicly shared" : "%s 是公开共享",
+ "Share API is disabled" : "共享 API 已被禁用",
+ "This share is password-protected" : "这是一个密码保护的共享",
+ "The password is wrong. Try again." : "用户名或密码错误!请重试",
+ "Password" : "密码",
+ "No entries found in this folder" : "此文件夹中无项目",
+ "Name" : "名称",
+ "Share time" : "分享时间",
+ "Expiration date" : "到期日期 ",
+ "Sorry, this link doesn’t seem to work anymore." : "抱歉,此链接已失效",
+ "Reasons might be:" : "可能原因是:",
+ "the item was removed" : "此项已移除",
+ "the link expired" : "链接过期",
+ "sharing is disabled" : "分享已禁用",
+ "For more info, please ask the person who sent this link." : "欲知详情,请联系发给你链接的人。",
+ "Add to your Nextcloud" : "添加到你的 Nextcloud",
+ "Download" : "下载",
+ "Download %s" : "下载 %s",
+ "Direct link" : "直接链接",
+ "Upload files to %s" : "上传文件到 %s",
+ "Select or drop files" : "选择或删除文件",
+ "Uploading files…" : "上传文件 … ",
+ "Uploaded files:" : "上传的文件: ",
"A public shared file or folder was <strong>downloaded</strong>" : "一个公共共享的文件或文件夹<strong>已下载</strong>",
"You received a new remote share %2$s from %1$s" : "您收到一个新的远程共享 %2$s 来自于 %1$s",
"You received a new remote share from %s" : "您从%s收到了新的远程分享",
@@ -39,11 +106,9 @@
"%1$s unshared %2$s from you" : "%1$s 未共享你的 %2$s ",
"Public shared folder %1$s was downloaded" : "公共共享文件夹 %1$s 已被下载",
"Public shared file %1$s was downloaded" : "公共共享文件 %1$s 已被下载",
- "You shared %1$s with %2$s" : "您把 %1$s分享给了 %2$s",
"%2$s shared %1$s with %3$s" : "%2$s 共享 %1$s 给 %3$s",
"You removed the share of %2$s for %1$s" : "你移除了 %2$s 的共享 %1$s",
"%2$s removed the share of %3$s for %1$s" : "%2$s 移除了 %3$s 的共享 %1$s",
- "You shared %1$s with group %2$s" : "你把 %1$s 分享给了 %2$s 组",
"%2$s shared %1$s with group %3$s" : "%2$s 共享 %1$s 给群组 %3$s",
"You removed the share of group %2$s for %1$s" : "你移除了组 %2$s 的共享 %1$s",
"%2$s removed the share of group %3$s for %1$s" : "%2$s 移除了组 %3$s 的共享 %1$s",
@@ -53,9 +118,7 @@
"%2$s removed the public link for %1$s" : "%2$s 移除了公共链接 %1$s",
"Your public link for %1$s expired" : "你的公开链接 %1$s 已过期",
"The public link of %2$s for %1$s expired" : "%2$s 的公开链接 %1$s 已过期",
- "%2$s shared %1$s with you" : "%2$s 把 %1$s 分享给了您",
"%2$s removed the share for %1$s" : "%2$s 移除了共享 %1$s",
- "Downloaded via public link" : "通过公开链接下载",
"Shared with %2$s" : "共享给 %2$s",
"Shared with %3$s by %2$s" : "由 %2$s 共享给 %3$s",
"Removed share for %2$s" : "移除共享 %2$s",
@@ -66,27 +129,10 @@
"%2$s removed share of group %3$s" : "%2$s 移除了群 %3$s 的共享",
"Shared via link by %2$s" : "%2$s 以链接方式共享",
"Shared via public link" : "通过公开链接共享",
- "Removed public link" : "移除公开链接",
"%2$s removed public link" : "%2$s 移除了公共链接",
"Public link expired" : "公开链接已过期",
"Public link of %2$s expired" : "%2$s 的公开链接已过期",
"Shared by %2$s" : "由 %2$s 共享",
- "Shares" : "共享",
- "Share API is disabled" : "共享 API 已被禁用",
- "This share is password-protected" : "这是一个密码保护的共享",
- "The password is wrong. Try again." : "用户名或密码错误!请重试",
- "Password" : "密码",
- "No entries found in this folder" : "此文件夹中无项目",
- "Name" : "名称",
- "Share time" : "分享时间",
- "Sorry, this link doesn’t seem to work anymore." : "抱歉,此链接已失效",
- "Reasons might be:" : "可能原因是:",
- "the item was removed" : "此项已移除",
- "the link expired" : "链接过期",
- "sharing is disabled" : "分享已禁用",
- "For more info, please ask the person who sent this link." : "欲知详情,请联系发给你链接的人。",
- "Download" : "下载",
- "Download %s" : "下载 %s",
- "Direct link" : "直接链接"
+ "Shares" : "共享"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/Activity/Providers/Downloads.php b/apps/files_sharing/lib/Activity/Providers/Downloads.php
index e1a25156441..01012e4785b 100644
--- a/apps/files_sharing/lib/Activity/Providers/Downloads.php
+++ b/apps/files_sharing/lib/Activity/Providers/Downloads.php
@@ -187,7 +187,7 @@ class Downloads implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_sharing/lib/Activity/Providers/Groups.php b/apps/files_sharing/lib/Activity/Providers/Groups.php
index 326ebba9ef7..6c25572d0d4 100644
--- a/apps/files_sharing/lib/Activity/Providers/Groups.php
+++ b/apps/files_sharing/lib/Activity/Providers/Groups.php
@@ -232,7 +232,7 @@ class Groups implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
index ec8152c5a32..20070970bca 100644
--- a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
+++ b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
@@ -239,7 +239,7 @@ class PublicLinks implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php
index d85eeadc315..4db72136a85 100644
--- a/apps/files_sharing/lib/Activity/Providers/Users.php
+++ b/apps/files_sharing/lib/Activity/Providers/Users.php
@@ -260,7 +260,7 @@ class Users implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php
index 922db7dac75..403d30ae2e6 100644
--- a/apps/files_sharing/lib/AppInfo/Application.php
+++ b/apps/files_sharing/lib/AppInfo/Application.php
@@ -111,7 +111,9 @@ class Application extends App {
$c->query('AppName'),
$server->getConfig(),
$server->getAppManager(),
- $c['ControllerMethodReflector']
+ $c['ControllerMethodReflector'],
+ $server->getShareManager(),
+ $server->getRequest()
);
});
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index 90274beba49..6181cde6fe6 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -168,8 +168,9 @@ class ShareAPIController extends OCSController {
$result['share_with'] = $share->getSharedWith();
$result['share_with_displayname'] = $sharedWith !== null ? $sharedWith->getDisplayName() : $share->getSharedWith();
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) {
+ $group = $this->groupManager->get($share->getSharedWith());
$result['share_with'] = $share->getSharedWith();
- $result['share_with_displayname'] = $share->getSharedWith();
+ $result['share_with_displayname'] = $group !== null ? $group->getDisplayName() : $share->getSharedWith();
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK) {
$result['share_with'] = $share->getPassword();
@@ -667,6 +668,7 @@ class ShareAPIController extends OCSController {
\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE, // legacy
\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE, // correct
\OCP\Constants::PERMISSION_CREATE, // hidden file list
+ \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, // allow to edit single files
])
) {
throw new OCSBadRequestException($this->l->t('Can\'t change permissions for public share links'));
diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php
index 3b86f7dc23b..6f9d4ca032a 100644
--- a/apps/files_sharing/lib/Controller/ShareController.php
+++ b/apps/files_sharing/lib/Controller/ShareController.php
@@ -160,6 +160,7 @@ class ShareController extends Controller {
/**
* @PublicPage
* @UseSession
+ * @BruteForceProtection publicLinkAuth
*
* Authenticates against password-protected shares
* @param string $token
@@ -487,7 +488,7 @@ class ShareController extends Controller {
// Single file download
$this->singleFileDownloaded($share, $share->getNode());
} else if (!empty($files_list)) {
- $this->fileListDownloaded($share, $files_list);
+ $this->fileListDownloaded($share, $files_list, $node);
} else {
// The folder is downloaded
$this->singleFileDownloaded($share, $share->getNode());
@@ -541,10 +542,11 @@ class ShareController extends Controller {
*
* @param Share\IShare $share
* @param array $files_list
+ * @param \OCP\Files\Folder $node
*/
- protected function fileListDownloaded(Share\IShare $share, array $files_list) {
+ protected function fileListDownloaded(Share\IShare $share, array $files_list, \OCP\Files\Folder $node) {
foreach ($files_list as $file) {
- $subNode = $share->getNode()->get($file);
+ $subNode = $node->get($file);
$this->singleFileDownloaded($share, $subNode);
}
diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php
index 6b3208dc289..cd5139693cf 100644
--- a/apps/files_sharing/lib/Controller/ShareesAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php
@@ -165,9 +165,10 @@ class ShareesAPIController extends OCSController {
}
$foundUserById = false;
+ $lowerSearch = strtolower($search);
foreach ($users as $uid => $userDisplayName) {
- if (strtolower($uid) === strtolower($search) || strtolower($userDisplayName) === strtolower($search)) {
- if (strtolower($uid) === strtolower($search)) {
+ if (strtolower($uid) === $lowerSearch || strtolower($userDisplayName) === $lowerSearch) {
+ if (strtolower($uid) === $lowerSearch) {
$foundUserById = true;
}
$this->result['exact']['users'][] = [
@@ -225,7 +226,7 @@ class ShareesAPIController extends OCSController {
$this->result['groups'] = $this->result['exact']['groups'] = [];
$groups = $this->groupManager->search($search, $this->limit, $this->offset);
- $groups = array_map(function (IGroup $group) { return $group->getGID(); }, $groups);
+ $groupIds = array_map(function (IGroup $group) { return $group->getGID(); }, $groups);
if (!$this->shareeEnumeration || sizeof($groups) < $this->limit) {
$this->reachedEndFor[] = 'groups';
@@ -236,13 +237,19 @@ class ShareesAPIController extends OCSController {
// Intersect all the groups that match with the groups this user is a member of
$userGroups = $this->groupManager->getUserGroups($this->userSession->getUser());
$userGroups = array_map(function (IGroup $group) { return $group->getGID(); }, $userGroups);
- $groups = array_intersect($groups, $userGroups);
+ $groupIds = array_intersect($groupIds, $userGroups);
}
- foreach ($groups as $gid) {
- if (strtolower($gid) === strtolower($search)) {
+ $lowerSearch = strtolower($search);
+ foreach ($groups as $group) {
+ // FIXME: use a more efficient approach
+ $gid = $group->getGID();
+ if (!in_array($gid, $groupIds)) {
+ continue;
+ }
+ if (strtolower($gid) === $lowerSearch || strtolower($group->getDisplayName()) === $lowerSearch) {
$this->result['exact']['groups'][] = [
- 'label' => $gid,
+ 'label' => $group->getDisplayName(),
'value' => [
'shareType' => Share::SHARE_TYPE_GROUP,
'shareWith' => $gid,
@@ -250,7 +257,7 @@ class ShareesAPIController extends OCSController {
];
} else {
$this->result['groups'][] = [
- 'label' => $gid,
+ 'label' => $group->getDisplayName(),
'value' => [
'shareType' => Share::SHARE_TYPE_GROUP,
'shareWith' => $gid,
@@ -265,7 +272,7 @@ class ShareesAPIController extends OCSController {
$group = $this->groupManager->get($search);
if ($group instanceof IGroup && (!$this->shareWithGroupOnly || in_array($group->getGID(), $userGroups))) {
array_push($this->result['exact']['groups'], [
- 'label' => $group->getGID(),
+ 'label' => $group->getDisplayName(),
'value' => [
'shareType' => Share::SHARE_TYPE_GROUP,
'shareWith' => $group->getGID(),
@@ -299,10 +306,11 @@ class ShareesAPIController extends OCSController {
if (!is_array($cloudIds)) {
$cloudIds = [$cloudIds];
}
+ $lowerSearch = strtolower($search);
foreach ($cloudIds as $cloudId) {
list(, $serverUrl) = $this->splitUserRemote($cloudId);
- if (strtolower($contact['FN']) === strtolower($search) || strtolower($cloudId) === strtolower($search)) {
- if (strtolower($cloudId) === strtolower($search)) {
+ if (strtolower($contact['FN']) === $lowerSearch || strtolower($cloudId) === $lowerSearch) {
+ if (strtolower($cloudId) === $lowerSearch) {
$result['exactIdMatch'] = true;
}
$result['exact'][] = [
diff --git a/apps/files_sharing/lib/Helper.php b/apps/files_sharing/lib/Helper.php
index 5ba65ea1317..a659da9292f 100644
--- a/apps/files_sharing/lib/Helper.php
+++ b/apps/files_sharing/lib/Helper.php
@@ -39,7 +39,6 @@ class Helper {
public static function registerHooks() {
\OCP\Util::connectHook('OC_Filesystem', 'post_rename', '\OCA\Files_Sharing\Updater', 'renameHook');
\OCP\Util::connectHook('OC_Filesystem', 'post_delete', '\OCA\Files_Sharing\Hooks', 'unshareChildren');
- \OCP\Util::connectHook('OC_Appconfig', 'post_set_value', '\OCA\Files_Sharing\Maintainer', 'configChangeHook');
\OCP\Util::connectHook('OC_User', 'post_deleteUser', '\OCA\Files_Sharing\Hooks', 'deleteUser');
}
diff --git a/apps/files_sharing/lib/Maintainer.php b/apps/files_sharing/lib/Maintainer.php
deleted file mode 100644
index db8f4aae0aa..00000000000
--- a/apps/files_sharing/lib/Maintainer.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @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/>
- *
- */
-
-namespace OCA\Files_Sharing;
-
-/**
- * Maintains stuff around the sharing functionality
- *
- * for example: on disable of "allow links" it removes all link shares
- */
-
-class Maintainer {
-
- /**
- * Keeps track of the "allow links" config setting
- * and removes all link shares if the config option is set to "no"
- *
- * @param array $params array with app, key, value as named values
- */
- static public function configChangeHook($params) {
- if($params['app'] === 'core' && $params['key'] === 'shareapi_allow_links' && $params['value'] === 'no') {
- \OCP\Share::removeAllLinkShares();
- }
- }
-
-}
diff --git a/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php b/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
index 7e9109bf2d1..5712b96b97d 100644
--- a/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
+++ b/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
@@ -25,6 +25,8 @@
namespace OCA\Files_Sharing\Middleware;
+use OCA\Files_Sharing\Controller\ExternalSharesController;
+use OCA\Files_Sharing\Controller\ShareController;
use OCP\App\IAppManager;
use OCP\AppFramework\Http\NotFoundResponse;
use OCP\AppFramework\Middleware;
@@ -33,6 +35,8 @@ use OCP\IConfig;
use OCP\AppFramework\Utility\IControllerMethodReflector;
use OCA\Files_Sharing\Exceptions\S2SException;
use OCP\AppFramework\Http\JSONResponse;
+use OCP\IRequest;
+use OCP\Share\IManager;
/**
* Checks whether the "sharing check" is enabled
@@ -49,21 +53,32 @@ class SharingCheckMiddleware extends Middleware {
protected $appManager;
/** @var IControllerMethodReflector */
protected $reflector;
+ /** @var IManager */
+ protected $shareManager;
+ /** @var IRequest */
+ protected $request;
/***
* @param string $appName
* @param IConfig $config
* @param IAppManager $appManager
+ * @param IControllerMethodReflector $reflector
+ * @param IManager $shareManager
+ * @param IRequest $request
*/
public function __construct($appName,
IConfig $config,
IAppManager $appManager,
- IControllerMethodReflector $reflector
+ IControllerMethodReflector $reflector,
+ IManager $shareManager,
+ IRequest $request
) {
$this->appName = $appName;
$this->config = $config;
$this->appManager = $appManager;
$this->reflector = $reflector;
+ $this->shareManager = $shareManager;
+ $this->request = $request;
}
/**
@@ -72,18 +87,23 @@ class SharingCheckMiddleware extends Middleware {
* @param \OCP\AppFramework\Controller $controller
* @param string $methodName
* @throws NotFoundException
+ * @throws S2SException
*/
public function beforeController($controller, $methodName) {
if(!$this->isSharingEnabled()) {
throw new NotFoundException('Sharing is disabled.');
}
- if ($controller instanceof \OCA\Files_Sharing\Controller\ExternalSharesController &&
+ if ($controller instanceof ExternalSharesController &&
!$this->externalSharesChecks()) {
throw new S2SException('Federated sharing not allowed');
- } else if ($controller instanceof \OCA\Files_Sharing\Controller\ShareController &&
- !$this->isLinkSharingEnabled()) {
- throw new NotFoundException('Link sharing is disabled');
+ } else if ($controller instanceof ShareController) {
+ $token = $this->request->getParam('token');
+ $share = $this->shareManager->getShareByToken($token);
+ if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK
+ && !$this->isLinkSharingEnabled()) {
+ throw new NotFoundException('Link sharing is disabled');
+ }
}
}
diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php
index 40d2fb27535..5c5d57057b2 100644
--- a/apps/files_sharing/lib/MountProvider.php
+++ b/apps/files_sharing/lib/MountProvider.php
@@ -123,7 +123,7 @@ class MountProvider implements IMountProvider {
// sort by stime, the super share will be based on the least recent share
foreach ($tmp as &$tmp2) {
@usort($tmp2, function($a, $b) {
- if ($a->getShareTime() < $b->getShareTime()) {
+ if ($a->getShareTime() <= $b->getShareTime()) {
return -1;
}
return 1;
diff --git a/apps/files_sharing/lib/Scanner.php b/apps/files_sharing/lib/Scanner.php
index 86c6b58f439..cab04fa9309 100644
--- a/apps/files_sharing/lib/Scanner.php
+++ b/apps/files_sharing/lib/Scanner.php
@@ -31,6 +31,11 @@ use OC\Files\ObjectStore\NoopScanner;
* Scanner for SharedStorage
*/
class Scanner extends \OC\Files\Cache\Scanner {
+ /**
+ * @var \OCA\Files_Sharing\SharedStorage $storage
+ */
+ protected $storage;
+
private $sourceScanner;
/**
@@ -46,8 +51,8 @@ class Scanner extends \OC\Files\Cache\Scanner {
if ($data === null) {
return null;
}
- list($sourceStorage, $internalPath) = $this->storage->resolvePath($path);
- $data['permissions'] = $sourceStorage->getPermissions($internalPath);
+ $internalPath = $this->storage->getSourcePath($path);
+ $data['permissions'] = $this->storage->getSourceStorage()->getPermissions($internalPath);
return $data;
}
diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php
index 5436f476f1a..2ef5e15b778 100644
--- a/apps/files_sharing/lib/SharedMount.php
+++ b/apps/files_sharing/lib/SharedMount.php
@@ -115,9 +115,9 @@ class SharedMount extends MountPoint implements MoveableMount {
private function updateFileTarget($newPath, &$share) {
$share->setTarget($newPath);
- foreach ($this->groupedShares as $share) {
- $share->setTarget($newPath);
- \OC::$server->getShareManager()->moveShare($share, $this->user);
+ foreach ($this->groupedShares as $tmpShare) {
+ $tmpShare->setTarget($newPath);
+ \OC::$server->getShareManager()->moveShare($tmpShare, $this->user);
}
}
@@ -130,12 +130,12 @@ class SharedMount extends MountPoint implements MoveableMount {
*/
private function generateUniqueTarget($path, $view, array $mountpoints) {
$pathinfo = pathinfo($path);
- $ext = (isset($pathinfo['extension'])) ? '.'.$pathinfo['extension'] : '';
+ $ext = (isset($pathinfo['extension'])) ? '.' . $pathinfo['extension'] : '';
$name = $pathinfo['filename'];
$dir = $pathinfo['dirname'];
// Helper function to find existing mount points
- $mountpointExists = function($path) use ($mountpoints) {
+ $mountpointExists = function ($path) use ($mountpoints) {
foreach ($mountpoints as $mountpoint) {
if ($mountpoint->getShare()->getTarget() === $path) {
return true;
@@ -146,7 +146,7 @@ class SharedMount extends MountPoint implements MoveableMount {
$i = 2;
while ($view->file_exists($path) || $mountpointExists($path)) {
- $path = Filesystem::normalizePath($dir . '/' . $name . ' ('.$i.')' . $ext);
+ $path = Filesystem::normalizePath($dir . '/' . $name . ' (' . $i . ')' . $ext);
$i++;
}
@@ -240,18 +240,22 @@ class SharedMount extends MountPoint implements MoveableMount {
* @return int
*/
public function getNumericStorageId() {
- $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
-
- $query = $builder->select('storage')
- ->from('filecache')
- ->where($builder->expr()->eq('fileid', $builder->createNamedParameter($this->getStorageRootId())));
-
- $result = $query->execute();
- $row = $result->fetch();
- $result->closeCursor();
- if ($row) {
- return $row['storage'];
+ if (!is_null($this->getShare()->getNodeCacheEntry())) {
+ return $this->getShare()->getNodeCacheEntry()->getStorageId();
+ } else {
+ $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+
+ $query = $builder->select('storage')
+ ->from('filecache')
+ ->where($builder->expr()->eq('fileid', $builder->createNamedParameter($this->getStorageRootId())));
+
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+ if ($row) {
+ return $row['storage'];
+ }
+ return -1;
}
- return -1;
}
}
diff --git a/apps/files_sharing/lib/SharedStorage.php b/apps/files_sharing/lib/SharedStorage.php
index ad250a790fa..888cbfda143 100644
--- a/apps/files_sharing/lib/SharedStorage.php
+++ b/apps/files_sharing/lib/SharedStorage.php
@@ -446,7 +446,8 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
}
public function getSourceStorage() {
- return $this->getWrapperStorage();
+ $this->init();
+ return $this->nonMaskedStorage;
}
public function getWrapperStorage() {
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 32e4f3d3dd6..dd2ea855b0b 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -35,40 +35,35 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
<header><div id="header" class="<?php p((isset($_['folder']) ? 'share-folder' : 'share-file')) ?>">
- <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
- title="" id="nextcloud">
- <div class="logo-icon svg">
- </div>
- </a>
-
- <div class="header-appname-container">
- <h1 class="header-appname">
- <?php p($theme->getName()); ?>
- </h1>
+ <div id="header-left">
+ <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
+ title="" id="nextcloud">
+ <div class="logo-icon svg"></div>
+ <h1 class="header-appname">
+ <?php p($theme->getName()); ?>
+ </h1>
+ </a>
</div>
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
- <div class="header-right">
- <span id="details">
- <?php
- if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) {
- if ($_['server2serversharing']) {
- ?>
- <span id="save" data-protected="<?php p($_['protected']) ?>"
- data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
- <button id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></button>
- <form class="save-form hidden" action="#">
- <input type="text" id="remote_address" placeholder="user@yourNextcloud.org"/>
- <button id="save-button-confirm" class="icon-confirm svg" disabled></button>
- </form>
- </span>
- <?php } ?>
- <a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
- <img class="svg" alt="" src="<?php print_unescaped(image_path("core", "actions/download.svg")); ?>"/>
- <span id="download-text"><?php p($l->t('Download'))?></span>
- </a>
+ <div id="header-right">
+ <?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) {
+ if ($_['server2serversharing']) {
+ ?>
+ <span id="save" data-protected="<?php p($_['protected']) ?>"
+ data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
+ <button id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></button>
+ <form class="save-form hidden" action="#">
+ <input type="email" id="remote_address" placeholder="user@yourNextcloud.org"/>
+ <button id="save-button-confirm" class="icon-confirm svg" disabled></button>
+ </form>
+ </span>
<?php } ?>
- </span>
+ <a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
+ <span class="icon icon-download"></span>
+ <span id="download-text"><?php p($l->t('Download'))?></span>
+ </a>
+ <?php } ?>
</div>
</div></header>
<div id="content-wrapper">
@@ -89,8 +84,8 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
<div id="imgframe"></div>
<?php endif; ?>
<div class="directDownload">
- <a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button">
- <img class="svg" alt="" src="<?php print_unescaped(image_path("core", "actions/download.svg")); ?>"/>
+ <a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button primary">
+ <span class="icon icon-download"></span>
<?php p($l->t('Download %s', array($_['filename'])))?> (<?php p($_['fileSize']) ?>)
</a>
</div>
diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
index ed4aa1dba9e..97774081b6a 100644
--- a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
@@ -23,10 +23,8 @@
*/
namespace OCA\Files_Sharing\Tests\Controller;
-use OC\ContactsManager;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSNotFoundException;
-use OCP\Contacts;
use OCP\Files\Folder;
use OCP\IL10N;
use OCA\Files_Sharing\Controller\ShareAPIController;
@@ -39,6 +37,7 @@ use OCP\IUser;
use OCP\Files\IRootFolder;
use OCP\Lock\LockedException;
use OCP\Share\IManager;
+use OCP\Share;
/**
* Class ShareAPIControllerTest
@@ -1882,9 +1881,10 @@ class ShareAPIControllerTest extends \Test\TestCase {
], $share, [], false
];
+ // with existing group
$share = \OC::$server->getShareManager()->newShare();
$share->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
- ->setSharedWith('recipient')
+ ->setSharedWith('recipientGroup')
->setSharedBy('initiator')
->setShareOwner('owner')
->setPermissions(\OCP\Constants::PERMISSION_READ)
@@ -1914,8 +1914,47 @@ class ShareAPIControllerTest extends \Test\TestCase {
'file_source' => 3,
'file_parent' => 1,
'file_target' => 'myTarget',
- 'share_with' => 'recipient',
- 'share_with_displayname' => 'recipient',
+ 'share_with' => 'recipientGroup',
+ 'share_with_displayname' => 'recipientGroupDisplayName',
+ 'mail_send' => 0,
+ 'mimetype' => 'myMimeType',
+ ], $share, [], false
+ ];
+
+ // with unknown group / no group backend
+ $share = \OC::$server->getShareManager()->newShare();
+ $share->setShareType(Share::SHARE_TYPE_GROUP)
+ ->setSharedWith('recipientGroup2')
+ ->setSharedBy('initiator')
+ ->setShareOwner('owner')
+ ->setPermissions(\OCP\Constants::PERMISSION_READ)
+ ->setNode($file)
+ ->setShareTime(new \DateTime('2000-01-01T00:01:02'))
+ ->setTarget('myTarget')
+ ->setId(42);
+ $result[] = [
+ [
+ 'id' => 42,
+ 'share_type' => Share::SHARE_TYPE_GROUP,
+ 'uid_owner' => 'initiator',
+ 'displayname_owner' => 'initiator',
+ 'permissions' => 1,
+ 'stime' => 946684862,
+ 'parent' => null,
+ 'expiration' => null,
+ 'token' => null,
+ 'uid_file_owner' => 'owner',
+ 'displayname_file_owner' => 'owner',
+ 'path' => 'file',
+ 'item_type' => 'file',
+ 'storage_id' => 'storageId',
+ 'storage' => 100,
+ 'item_source' => 3,
+ 'file_source' => 3,
+ 'file_parent' => 1,
+ 'file_target' => 'myTarget',
+ 'share_with' => 'recipientGroup2',
+ 'share_with_displayname' => 'recipientGroup2',
'mail_send' => 0,
'mimetype' => 'myMimeType',
], $share, [], false
@@ -2029,6 +2068,13 @@ class ShareAPIControllerTest extends \Test\TestCase {
*/
public function testFormatShare(array $expects, \OCP\Share\IShare $share, array $users, $exception) {
$this->userManager->method('get')->will($this->returnValueMap($users));
+
+ $recipientGroup = $this->createMock('\OCP\IGroup');
+ $recipientGroup->method('getDisplayName')->willReturn('recipientGroupDisplayName');
+ $this->groupManager->method('get')->will($this->returnValueMap([
+ ['recipientGroup', $recipientGroup],
+ ]));
+
$this->urlGenerator->method('linkToRouteAbsolute')
->with('files_sharing.sharecontroller.showShare', ['token' => 'myToken'])
->willReturn('myLink');
diff --git a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
index c570cb16980..c68e2304743 100644
--- a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
@@ -133,7 +133,7 @@ class ShareesAPIControllerTest extends TestCase {
* @param string $gid
* @return \OCP\IGroup|\PHPUnit_Framework_MockObject_MockObject
*/
- protected function getGroupMock($gid) {
+ protected function getGroupMock($gid, $displayName = null) {
$group = $this->getMockBuilder('OCP\IGroup')
->disableOriginalConstructor()
->getMock();
@@ -142,6 +142,15 @@ class ShareesAPIControllerTest extends TestCase {
->method('getGID')
->willReturn($gid);
+ if (is_null($displayName)) {
+ // note: this is how the Group class behaves
+ $displayName = $gid;
+ }
+
+ $group->expects($this->any())
+ ->method('getDisplayName')
+ ->willReturn($displayName);
+
return $group;
}
@@ -467,6 +476,7 @@ class ShareesAPIControllerTest extends TestCase {
return [
['test', false, true, [], [], [], [], true, false],
['test', false, false, [], [], [], [], true, false],
+ // group without display name
[
'test', false, true,
[$this->getGroupMock('test1')],
@@ -476,6 +486,36 @@ class ShareesAPIControllerTest extends TestCase {
true,
false,
],
+ // group with display name, search by id
+ [
+ 'test', false, true,
+ [$this->getGroupMock('test1', 'Test One')],
+ [],
+ [],
+ [['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]],
+ true,
+ false,
+ ],
+ // group with display name, search by display name
+ [
+ 'one', false, true,
+ [$this->getGroupMock('test1', 'Test One')],
+ [],
+ [],
+ [['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]],
+ true,
+ false,
+ ],
+ // group with display name, search by display name, exact expected
+ [
+ 'Test One', false, true,
+ [$this->getGroupMock('test1', 'Test One')],
+ [],
+ [['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]],
+ [],
+ true,
+ false,
+ ],
[
'test', false, false,
[$this->getGroupMock('test1')],
diff --git a/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php b/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
index c2965d04b6b..8d7d42722b9 100644
--- a/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
+++ b/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
@@ -34,6 +34,9 @@ use OCP\AppFramework\Utility\IControllerMethodReflector;
use OCA\Files_Sharing\Exceptions\S2SException;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IConfig;
+use OCP\IRequest;
+use OCP\Share\IManager;
+use OCP\Share\IShare;
/**
* @package OCA\Files_Sharing\Middleware\SharingCheckMiddleware
@@ -50,6 +53,10 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
private $controllerMock;
/** @var IControllerMethodReflector|\PHPUnit_Framework_MockObject_MockObject */
private $reflector;
+ /** @var IManager | \PHPUnit_Framework_MockObject_MockObject */
+ private $shareManager;
+ /** @var IRequest | \PHPUnit_Framework_MockObject_MockObject */
+ private $request;
protected function setUp() {
parent::setUp();
@@ -58,12 +65,16 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
$this->appManager = $this->createMock(IAppManager::class);
$this->controllerMock = $this->createMock(Controller::class);
$this->reflector = $this->createMock(IControllerMethodReflector::class);
+ $this->shareManager = $this->createMock(IManager::class);
+ $this->request = $this->createMock(IRequest::class);
$this->sharingCheckMiddleware = new SharingCheckMiddleware(
'files_sharing',
$this->config,
$this->appManager,
- $this->reflector);
+ $this->reflector,
+ $this->shareManager,
+ $this->request);
}
public function testIsSharingEnabledWithAppEnabled() {
@@ -215,6 +226,9 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
}
public function testBeforeControllerWithShareControllerWithSharingEnabled() {
+
+ $share = $this->createMock(IShare::class);
+
$this->appManager
->expects($this->once())
->method('isEnabledForUser')
@@ -233,6 +247,13 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
->with('core', 'shareapi_allow_links', 'yes')
->will($this->returnValue('yes'));
+ $this->request->expects($this->once())->method('getParam')->with('token')
+ ->willReturn('token');
+ $this->shareManager->expects($this->once())->method('getShareByToken')
+ ->with('token')->willReturn($share);
+
+ $share->expects($this->once())->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_LINK);
+
$controller = $this->createMock(ShareController::class);
$this->sharingCheckMiddleware->beforeController($controller, 'myMethod');
@@ -243,6 +264,9 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
* @expectedExceptionMessage Link sharing is disabled
*/
public function testBeforeControllerWithShareControllerWithSharingEnabledAPIDisabled() {
+
+ $share = $this->createMock(IShare::class);
+
$this->appManager
->expects($this->once())
->method('isEnabledForUser')
@@ -251,6 +275,14 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
$controller = $this->createMock(ShareController::class);
+ $this->request->expects($this->once())->method('getParam')->with('token')
+ ->willReturn('token');
+ $this->shareManager->expects($this->once())->method('getShareByToken')
+ ->with('token')->willReturn($share);
+
+ $share->expects($this->once())->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_LINK);
+
+
$this->sharingCheckMiddleware->beforeController($controller, 'myMethod');
}
diff --git a/apps/files_sharing/tests/SharedStorageTest.php b/apps/files_sharing/tests/SharedStorageTest.php
index f1b0cbb8fbb..eaa138b0f70 100644
--- a/apps/files_sharing/tests/SharedStorageTest.php
+++ b/apps/files_sharing/tests/SharedStorageTest.php
@@ -531,4 +531,32 @@ class SharedStorageTest extends TestCase {
$this->shareManager->deleteShare($share1);
$this->shareManager->deleteShare($share2);
}
+
+ public function testOwnerPermissions() {
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ $share = $this->share(
+ \OCP\Share::SHARE_TYPE_USER,
+ $this->folder,
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_USER2,
+ \OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_DELETE
+ );
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
+ $this->assertTrue($view->file_exists($this->folder));
+
+ $view->file_put_contents($this->folder . '/newfile.txt', 'asd');
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ $this->assertTrue($this->view->file_exists($this->folder . '/newfile.txt'));
+ $this->assertEquals(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE,
+ $this->view->getFileInfo($this->folder . '/newfile.txt')->getPermissions());
+
+ $this->view->unlink($this->folder);
+ $this->shareManager->deleteShare($share);
+
+ }
}
diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml
index 04b8a7293cb..a756013568d 100644
--- a/apps/files_trashbin/appinfo/info.xml
+++ b/apps/files_trashbin/appinfo/info.xml
@@ -10,13 +10,13 @@ To prevent a user from running out of disk space, the Deleted files app will not
<licence>AGPL</licence>
<author>Bjoern Schiessle</author>
<default_enable/>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<types>
<filesystem/>
</types>
<namespace>Files_Trashbin</namespace>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<documentation>
<user>user-trashbin</user>
diff --git a/apps/files_trashbin/l10n/ca.js b/apps/files_trashbin/l10n/ca.js
index d5f19e466c1..149611cd8d2 100644
--- a/apps/files_trashbin/l10n/ca.js
+++ b/apps/files_trashbin/l10n/ca.js
@@ -8,9 +8,11 @@ OC.L10N.register(
"Delete" : "Esborra",
"Delete permanently" : "Esborra permanentment",
"Error" : "Error",
+ "This operation is forbidden" : "Aquesta operació està prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Aquesta carpeta no està disponible. Comproveu els registres o contacteu amb l'administrador.",
"restored" : "restaurat",
- "No deleted files" : "No hi ha cap arxiu eliminat",
- "You will be able to recover deleted files from here" : "Des d'aquí es podran recuperar arxius eliminats",
+ "No deleted files" : "No hi ha cap fitxer eliminat",
+ "You will be able to recover deleted files from here" : "Des d'aquí es podran recuperar fitxers eliminats",
"No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
"Select all" : "Seleccionar tot",
"Name" : "Nom",
diff --git a/apps/files_trashbin/l10n/ca.json b/apps/files_trashbin/l10n/ca.json
index 520ef5f2f74..2bd36c79241 100644
--- a/apps/files_trashbin/l10n/ca.json
+++ b/apps/files_trashbin/l10n/ca.json
@@ -6,9 +6,11 @@
"Delete" : "Esborra",
"Delete permanently" : "Esborra permanentment",
"Error" : "Error",
+ "This operation is forbidden" : "Aquesta operació està prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Aquesta carpeta no està disponible. Comproveu els registres o contacteu amb l'administrador.",
"restored" : "restaurat",
- "No deleted files" : "No hi ha cap arxiu eliminat",
- "You will be able to recover deleted files from here" : "Des d'aquí es podran recuperar arxius eliminats",
+ "No deleted files" : "No hi ha cap fitxer eliminat",
+ "You will be able to recover deleted files from here" : "Des d'aquí es podran recuperar fitxers eliminats",
"No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
"Select all" : "Seleccionar tot",
"Name" : "Nom",
diff --git a/apps/files_trashbin/l10n/eo.js b/apps/files_trashbin/l10n/eo.js
index 9fd798d8df9..7a4dd0a5e65 100644
--- a/apps/files_trashbin/l10n/eo.js
+++ b/apps/files_trashbin/l10n/eo.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"This directory is unavailable, please check the logs or contact the administrator" : "Ĉi tiu dosierujo maldisponeblas, bonvolu kontroli la protokolojn aŭ kontakti la administranton",
"restored" : "restaŭrita",
"No deleted files" : "Neniu dosiero foriĝis",
+ "You will be able to recover deleted files from here" : "Vi eblos restaŭrigi forigitaj dosieroj el tie",
"No entries found in this folder" : "Neniu enigo troviĝis en ĉi tiu dosierujo",
"Select all" : "Elekti ĉion",
"Name" : "Nomo",
diff --git a/apps/files_trashbin/l10n/eo.json b/apps/files_trashbin/l10n/eo.json
index 92577367e08..2b491222622 100644
--- a/apps/files_trashbin/l10n/eo.json
+++ b/apps/files_trashbin/l10n/eo.json
@@ -10,6 +10,7 @@
"This directory is unavailable, please check the logs or contact the administrator" : "Ĉi tiu dosierujo maldisponeblas, bonvolu kontroli la protokolojn aŭ kontakti la administranton",
"restored" : "restaŭrita",
"No deleted files" : "Neniu dosiero foriĝis",
+ "You will be able to recover deleted files from here" : "Vi eblos restaŭrigi forigitaj dosieroj el tie",
"No entries found in this folder" : "Neniu enigo troviĝis en ĉi tiu dosierujo",
"Select all" : "Elekti ĉion",
"Name" : "Nomo",
diff --git a/apps/files_trashbin/l10n/sv.js b/apps/files_trashbin/l10n/sv.js
index a022dde5dcb..34e2b2a2f04 100644
--- a/apps/files_trashbin/l10n/sv.js
+++ b/apps/files_trashbin/l10n/sv.js
@@ -11,7 +11,7 @@ OC.L10N.register(
"This operation is forbidden" : "Denna åtgärd är förbjuden",
"This directory is unavailable, please check the logs or contact the administrator" : "Denna katalog är inte tillgänglig, kontrollera loggarna eller kontakta administratören",
"restored" : "återställd",
- "No deleted files" : "Inga borttagna filer",
+ "No deleted files" : "Inga raderade filer",
"You will be able to recover deleted files from here" : "Du kommer kunna återskapa raderade filer härifrån",
"No entries found in this folder" : "Inga filer hittades i denna mapp",
"Select all" : "Välj allt",
diff --git a/apps/files_trashbin/l10n/sv.json b/apps/files_trashbin/l10n/sv.json
index 31898a41f5a..1abc0bfba34 100644
--- a/apps/files_trashbin/l10n/sv.json
+++ b/apps/files_trashbin/l10n/sv.json
@@ -9,7 +9,7 @@
"This operation is forbidden" : "Denna åtgärd är förbjuden",
"This directory is unavailable, please check the logs or contact the administrator" : "Denna katalog är inte tillgänglig, kontrollera loggarna eller kontakta administratören",
"restored" : "återställd",
- "No deleted files" : "Inga borttagna filer",
+ "No deleted files" : "Inga raderade filer",
"You will be able to recover deleted files from here" : "Du kommer kunna återskapa raderade filer härifrån",
"No entries found in this folder" : "Inga filer hittades i denna mapp",
"Select all" : "Välj allt",
diff --git a/apps/files_trashbin/l10n/zh_CN.js b/apps/files_trashbin/l10n/zh_CN.js
index be1eeab9348..8e1d4317ca4 100644
--- a/apps/files_trashbin/l10n/zh_CN.js
+++ b/apps/files_trashbin/l10n/zh_CN.js
@@ -1,15 +1,15 @@
OC.L10N.register(
"files_trashbin",
{
- "Couldn't delete %s permanently" : "无法彻底删除文件%s",
- "Couldn't restore %s" : "无法恢复%s",
+ "Couldn't delete %s permanently" : "无法彻底删除文件 %s",
+ "Couldn't restore %s" : "无法恢复 %s",
"Deleted files" : "已删除文件",
"Restore" : "恢复",
"Delete" : "删除",
"Delete permanently" : "永久删除",
"Error" : "错误",
"This operation is forbidden" : "操作被禁止",
- "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用, 请检查日志或联系管理员",
"restored" : "已恢复",
"No deleted files" : "无已删除文件",
"You will be able to recover deleted files from here" : "你可以在此处恢复已删除的文件",
diff --git a/apps/files_trashbin/l10n/zh_CN.json b/apps/files_trashbin/l10n/zh_CN.json
index 5d458254b87..b7d27ce5168 100644
--- a/apps/files_trashbin/l10n/zh_CN.json
+++ b/apps/files_trashbin/l10n/zh_CN.json
@@ -1,13 +1,13 @@
{ "translations": {
- "Couldn't delete %s permanently" : "无法彻底删除文件%s",
- "Couldn't restore %s" : "无法恢复%s",
+ "Couldn't delete %s permanently" : "无法彻底删除文件 %s",
+ "Couldn't restore %s" : "无法恢复 %s",
"Deleted files" : "已删除文件",
"Restore" : "恢复",
"Delete" : "删除",
"Delete permanently" : "永久删除",
"Error" : "错误",
"This operation is forbidden" : "操作被禁止",
- "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用, 请检查日志或联系管理员",
"restored" : "已恢复",
"No deleted files" : "无已删除文件",
"You will be able to recover deleted files from here" : "你可以在此处恢复已删除的文件",
diff --git a/apps/files_trashbin/lib/Storage.php b/apps/files_trashbin/lib/Storage.php
index a6672dbf63a..b8f154ea051 100644
--- a/apps/files_trashbin/lib/Storage.php
+++ b/apps/files_trashbin/lib/Storage.php
@@ -44,10 +44,24 @@ class Storage extends Wrapper {
*/
private static $disableTrash = false;
+ /**
+ * remember which file/folder was moved out of s shared folder
+ * in this case we want to add a copy to the owners trash bin
+ *
+ * @var array
+ */
+ private static $moveOutOfSharedFolder = [];
+
/** @var IUserManager */
private $userManager;
- function __construct($parameters, IUserManager $userManager = null) {
+ /**
+ * Storage constructor.
+ *
+ * @param array $parameters
+ * @param IUserManager|null $userManager
+ */
+ public function __construct($parameters, IUserManager $userManager = null) {
$this->mountPoint = $parameters['mountPoint'];
$this->userManager = $userManager;
parent::__construct($parameters);
@@ -58,8 +72,47 @@ class Storage extends Wrapper {
*/
public static function preRenameHook($params) {
// in cross-storage cases, a rename is a copy + unlink,
- // that last unlink must not go to trash
- self::$disableTrash = true;
+ // that last unlink must not go to trash, only exception:
+ // if the file was moved from a shared storage to a local folder,
+ // in this case the owner should get a copy in his trash bin so that
+ // they can restore the files again
+
+ $oldPath = $params['oldpath'];
+ $newPath = dirname($params['newpath']);
+ $currentUser = \OC::$server->getUserSession()->getUser();
+
+ $fileMovedOutOfSharedFolder = false;
+
+ try {
+ if ($currentUser) {
+ $currentUserId = $currentUser->getUID();
+
+ $view = new View($currentUserId . '/files');
+ $fileInfo = $view->getFileInfo($oldPath);
+ if ($fileInfo) {
+ $sourceStorage = $fileInfo->getStorage();
+ $sourceOwner = $view->getOwner($oldPath);
+ $targetOwner = $view->getOwner($newPath);
+
+ if ($sourceOwner !== $targetOwner
+ && $sourceStorage->instanceOfStorage('OCA\Files_Sharing\SharedStorage')
+ ) {
+ $fileMovedOutOfSharedFolder = true;
+ }
+ }
+ }
+ } catch (\Exception $e) {
+ // do nothing, in this case we just disable the trashbin and continue
+ $logger = \OC::$server->getLogger();
+ $logger->debug('Trashbin storage could not check if a file was moved out of a shared folder: ' . $e->getMessage());
+ }
+
+ if($fileMovedOutOfSharedFolder) {
+ self::$moveOutOfSharedFolder['/' . $currentUserId . '/files' . $oldPath] = true;
+ } else {
+ self::$disableTrash = true;
+ }
+
}
/**
@@ -74,6 +127,7 @@ class Storage extends Wrapper {
*
* @param string $path1 first path
* @param string $path2 second path
+ * @return bool
*/
public function rename($path1, $path2) {
$result = $this->storage->rename($path1, $path2);
@@ -93,7 +147,14 @@ class Storage extends Wrapper {
* @return bool true if the operation succeeded, false otherwise
*/
public function unlink($path) {
- return $this->doDelete($path, 'unlink');
+ if (isset(self::$moveOutOfSharedFolder[$this->mountPoint . $path])) {
+ $result = $this->doDelete($path, 'unlink', true);
+ unset(self::$moveOutOfSharedFolder[$this->mountPoint . $path]);
+ } else {
+ $result = $this->doDelete($path, 'unlink');
+ }
+
+ return $result;
}
/**
@@ -104,7 +165,14 @@ class Storage extends Wrapper {
* @return bool true if the operation succeeded, false otherwise
*/
public function rmdir($path) {
- return $this->doDelete($path, 'rmdir');
+ if (isset(self::$moveOutOfSharedFolder[$this->mountPoint . $path])) {
+ $result = $this->doDelete($path, 'rmdir', true);
+ unset(self::$moveOutOfSharedFolder[$this->mountPoint . $path]);
+ } else {
+ $result = $this->doDelete($path, 'rmdir');
+ }
+
+ return $result;
}
/**
@@ -133,10 +201,11 @@ class Storage extends Wrapper {
*
* @param string $path path of file or folder to delete
* @param string $method either "unlink" or "rmdir"
+ * @param bool $ownerOnly delete for owner only (if file gets moved out of a shared folder)
*
* @return bool true if the operation succeeded, false otherwise
*/
- private function doDelete($path, $method) {
+ private function doDelete($path, $method, $ownerOnly = false) {
if (self::$disableTrash
|| !\OC_App::isEnabled('files_trashbin')
|| (pathinfo($path, PATHINFO_EXTENSION) === 'part')
@@ -158,7 +227,7 @@ class Storage extends Wrapper {
$this->deletedFiles[$normalized] = $normalized;
if ($filesPath = $view->getRelativePath($normalized)) {
$filesPath = trim($filesPath, '/');
- $result = \OCA\Files_Trashbin\Trashbin::move2trash($filesPath);
+ $result = \OCA\Files_Trashbin\Trashbin::move2trash($filesPath, $ownerOnly);
// in cross-storage cases the file will be copied
// but not deleted, so we delete it here
if ($result) {
diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php
index bf2fa57453f..2e66a6b96e1 100644
--- a/apps/files_trashbin/lib/Trashbin.php
+++ b/apps/files_trashbin/lib/Trashbin.php
@@ -88,6 +88,10 @@ class Trashbin {
if (!$userManager->userExists($uid)) {
$uid = User::getUser();
}
+ if (!$uid) {
+ // no owner, usually because of share link from ext storage
+ return [null, null];
+ }
Filesystem::initMountPoints($uid);
if ($uid != User::getUser()) {
$info = Filesystem::getFileInfo($filename);
@@ -196,14 +200,22 @@ class Trashbin {
* move file to the trash bin
*
* @param string $file_path path to the deleted file/directory relative to the files root directory
+ * @param bool $ownerOnly delete for owner only (if file gets moved out of a shared folder)
+ *
* @return bool
*/
- public static function move2trash($file_path) {
+ public static function move2trash($file_path, $ownerOnly = false) {
// get the user for which the filesystem is setup
$root = Filesystem::getRoot();
list(, $user) = explode('/', $root);
list($owner, $ownerPath) = self::getUidAndFilename($file_path);
+ // if no owner found (ex: ext storage + share link), will use the current user's trashbin then
+ if (is_null($owner)) {
+ $owner = $user;
+ $ownerPath = $file_path;
+ }
+
$ownerView = new View('/' . $owner);
// file has been deleted in between
if (is_null($ownerPath) || $ownerPath === '' || !$ownerView->file_exists('/files/' . $ownerPath)) {
@@ -261,8 +273,8 @@ class Trashbin {
self::retainVersions($filename, $owner, $ownerPath, $timestamp);
- // if owner !== user we need to also add a copy to the owners trash
- if ($user !== $owner) {
+ // if owner !== user we need to also add a copy to the users trash
+ if ($user !== $owner && $ownerOnly === false) {
self::copyFilesToUser($ownerPath, $owner, $file_path, $user, $timestamp);
}
}
@@ -890,7 +902,7 @@ class Trashbin {
* @return integer size of the folder
*/
private static function calculateSize($view) {
- $root = \OC::$server->getConfig()->getSystemValue('datadirectory') . $view->getAbsolutePath('');
+ $root = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . $view->getAbsolutePath('');
if (!file_exists($root)) {
return 0;
}
diff --git a/apps/files_versions/appinfo/info.xml b/apps/files_versions/appinfo/info.xml
index 5eb0df91d8d..5304051d751 100644
--- a/apps/files_versions/appinfo/info.xml
+++ b/apps/files_versions/appinfo/info.xml
@@ -8,13 +8,13 @@
This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user’s directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user doesn’t run out of Quota because of versions.
In addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user’s currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation.
</description>
- <version>1.4.0</version>
+ <version>1.5.0</version>
<types>
<filesystem/>
</types>
<namespace>Files_Versions</namespace>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<documentation>
<user>user-versions</user>
diff --git a/apps/files_versions/l10n/ca.js b/apps/files_versions/l10n/ca.js
index fb4357d5c8e..ca89eacf464 100644
--- a/apps/files_versions/l10n/ca.js
+++ b/apps/files_versions/l10n/ca.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "No s'ha pogut revertir: %s",
"Versions" : "Versions",
"Failed to revert {file} to revision {timestamp}." : "Ha fallat en retornar {file} a la revisió {timestamp}",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Recupera",
+ "No versions available" : "No hi ha versions disponibles",
"More versions..." : "Més versions...",
"No other versions available" : "No hi ha altres versions disponibles"
},
diff --git a/apps/files_versions/l10n/ca.json b/apps/files_versions/l10n/ca.json
index 064e8beb25d..70462746321 100644
--- a/apps/files_versions/l10n/ca.json
+++ b/apps/files_versions/l10n/ca.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "No s'ha pogut revertir: %s",
"Versions" : "Versions",
"Failed to revert {file} to revision {timestamp}." : "Ha fallat en retornar {file} a la revisió {timestamp}",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Recupera",
+ "No versions available" : "No hi ha versions disponibles",
"More versions..." : "Més versions...",
"No other versions available" : "No hi ha altres versions disponibles"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/cs_CZ.js b/apps/files_versions/l10n/cs_CZ.js
index e833455da0b..bb1700c74fb 100644
--- a/apps/files_versions/l10n/cs_CZ.js
+++ b/apps/files_versions/l10n/cs_CZ.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Selhalo vrácení souboru {file} na verzi {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"],
"Restore" : "Obnovit",
+ "No versions available" : "Nejsou dostupné žádné verze",
"More versions..." : "Více verzí...",
"No other versions available" : "Žádné další verze nejsou dostupné"
},
diff --git a/apps/files_versions/l10n/cs_CZ.json b/apps/files_versions/l10n/cs_CZ.json
index 5e79397e24f..47cc35a03fc 100644
--- a/apps/files_versions/l10n/cs_CZ.json
+++ b/apps/files_versions/l10n/cs_CZ.json
@@ -4,6 +4,7 @@
"Failed to revert {file} to revision {timestamp}." : "Selhalo vrácení souboru {file} na verzi {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"],
"Restore" : "Obnovit",
+ "No versions available" : "Nejsou dostupné žádné verze",
"More versions..." : "Více verzí...",
"No other versions available" : "Žádné další verze nejsou dostupné"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
diff --git a/apps/files_versions/l10n/de_DE.js b/apps/files_versions/l10n/de_DE.js
index 22a2fb3034c..4b3c9135857 100644
--- a/apps/files_versions/l10n/de_DE.js
+++ b/apps/files_versions/l10n/de_DE.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Konnte {file} nicht auf Revision {timestamp} zurücksetzen.",
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Restore" : "Wiederherstellen",
- "No versions available" : "Neue Versionen verfügbar",
+ "No versions available" : "Keine Versionen verfügbar",
"More versions..." : "Weitere Versionen…",
"No other versions available" : "Keine anderen Versionen verfügbar"
},
diff --git a/apps/files_versions/l10n/de_DE.json b/apps/files_versions/l10n/de_DE.json
index 9351b4d829c..caedef871c7 100644
--- a/apps/files_versions/l10n/de_DE.json
+++ b/apps/files_versions/l10n/de_DE.json
@@ -4,7 +4,7 @@
"Failed to revert {file} to revision {timestamp}." : "Konnte {file} nicht auf Revision {timestamp} zurücksetzen.",
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Restore" : "Wiederherstellen",
- "No versions available" : "Neue Versionen verfügbar",
+ "No versions available" : "Keine Versionen verfügbar",
"More versions..." : "Weitere Versionen…",
"No other versions available" : "Keine anderen Versionen verfügbar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/el.js b/apps/files_versions/l10n/el.js
index de1b09a6d00..336c017b123 100644
--- a/apps/files_versions/l10n/el.js
+++ b/apps/files_versions/l10n/el.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "Αδυναμία επαναφοράς: %s",
"Versions" : "Εκδόσεις",
"Failed to revert {file} to revision {timestamp}." : "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"],
"Restore" : "Επαναφορά",
+ "No versions available" : "Δεν υπάρχουν εκδόσεις διαθέσιμες",
"More versions..." : "Περισσότερες εκδόσεις...",
"No other versions available" : "Δεν υπάρχουν άλλες εκδόσεις διαθέσιμες"
},
diff --git a/apps/files_versions/l10n/el.json b/apps/files_versions/l10n/el.json
index 5df89260d3c..f6da1dc4539 100644
--- a/apps/files_versions/l10n/el.json
+++ b/apps/files_versions/l10n/el.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "Αδυναμία επαναφοράς: %s",
"Versions" : "Εκδόσεις",
"Failed to revert {file} to revision {timestamp}." : "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"],
"Restore" : "Επαναφορά",
+ "No versions available" : "Δεν υπάρχουν εκδόσεις διαθέσιμες",
"More versions..." : "Περισσότερες εκδόσεις...",
"No other versions available" : "Δεν υπάρχουν άλλες εκδόσεις διαθέσιμες"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/eo.js b/apps/files_versions/l10n/eo.js
index 831e984a885..3ef246ace2a 100644
--- a/apps/files_versions/l10n/eo.js
+++ b/apps/files_versions/l10n/eo.js
@@ -5,6 +5,7 @@ OC.L10N.register(
"Versions" : "Versioj",
"Failed to revert {file} to revision {timestamp}." : "Malsukcesis returnigo de {file} al la revizio {timestamp}.",
"Restore" : "Restaŭri",
+ "No versions available" : "Neniu versio disponebla",
"More versions..." : "Pli da versioj...",
"No other versions available" : "Ne disponeblas aliaj versioj"
},
diff --git a/apps/files_versions/l10n/eo.json b/apps/files_versions/l10n/eo.json
index 751a6e02bf5..f91aafe4d84 100644
--- a/apps/files_versions/l10n/eo.json
+++ b/apps/files_versions/l10n/eo.json
@@ -3,6 +3,7 @@
"Versions" : "Versioj",
"Failed to revert {file} to revision {timestamp}." : "Malsukcesis returnigo de {file} al la revizio {timestamp}.",
"Restore" : "Restaŭri",
+ "No versions available" : "Neniu versio disponebla",
"More versions..." : "Pli da versioj...",
"No other versions available" : "Ne disponeblas aliaj versioj"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/fr.js b/apps/files_versions/l10n/fr.js
index 23cc8be44f3..0e28369303d 100644
--- a/apps/files_versions/l10n/fr.js
+++ b/apps/files_versions/l10n/fr.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Could not revert: %s" : "Impossible de restaurer %s",
"Versions" : "Versions",
- "Failed to revert {file} to revision {timestamp}." : "Échec du retour du fichier {file} à la révision {timestamp}.",
+ "Failed to revert {file} to revision {timestamp}." : "Échec de la restauration du fichier {file} à la révision {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Restore" : "Restaurer",
"No versions available" : "Aucune version n'est disponible",
diff --git a/apps/files_versions/l10n/fr.json b/apps/files_versions/l10n/fr.json
index ed563578a6d..10798a0aa20 100644
--- a/apps/files_versions/l10n/fr.json
+++ b/apps/files_versions/l10n/fr.json
@@ -1,7 +1,7 @@
{ "translations": {
"Could not revert: %s" : "Impossible de restaurer %s",
"Versions" : "Versions",
- "Failed to revert {file} to revision {timestamp}." : "Échec du retour du fichier {file} à la révision {timestamp}.",
+ "Failed to revert {file} to revision {timestamp}." : "Échec de la restauration du fichier {file} à la révision {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Restore" : "Restaurer",
"No versions available" : "Aucune version n'est disponible",
diff --git a/apps/files_versions/l10n/id.js b/apps/files_versions/l10n/id.js
index aba6fb7f64d..243100d1477 100644
--- a/apps/files_versions/l10n/id.js
+++ b/apps/files_versions/l10n/id.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "Tidak dapat mengembalikan: %s",
"Versions" : "Versi",
"Failed to revert {file} to revision {timestamp}." : "Gagal mengembalikan {file} ke revisi {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bytes"],
"Restore" : "Pulihkan",
+ "No versions available" : "Tidak ada versi yang tersedia",
"More versions..." : "Versi lainnya...",
"No other versions available" : "Tidak ada versi lain yang tersedia"
},
diff --git a/apps/files_versions/l10n/id.json b/apps/files_versions/l10n/id.json
index 1df16f621f9..d2cd5919722 100644
--- a/apps/files_versions/l10n/id.json
+++ b/apps/files_versions/l10n/id.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "Tidak dapat mengembalikan: %s",
"Versions" : "Versi",
"Failed to revert {file} to revision {timestamp}." : "Gagal mengembalikan {file} ke revisi {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bytes"],
"Restore" : "Pulihkan",
+ "No versions available" : "Tidak ada versi yang tersedia",
"More versions..." : "Versi lainnya...",
"No other versions available" : "Tidak ada versi lain yang tersedia"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/apps/files_versions/l10n/ja.js b/apps/files_versions/l10n/ja.js
index 4601312a680..9b8cf55e4dd 100644
--- a/apps/files_versions/l10n/ja.js
+++ b/apps/files_versions/l10n/ja.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "{file} を {timestamp} のリビジョンに戻すことができません。",
"_%n byte_::_%n bytes_" : ["%n バイト"],
"Restore" : "復元",
+ "No versions available" : "履歴はありません",
"More versions..." : "他のバージョン...",
"No other versions available" : "利用可能なバージョンはありません"
},
diff --git a/apps/files_versions/l10n/ja.json b/apps/files_versions/l10n/ja.json
index 56c81e17ac6..4e5b8164fef 100644
--- a/apps/files_versions/l10n/ja.json
+++ b/apps/files_versions/l10n/ja.json
@@ -4,6 +4,7 @@
"Failed to revert {file} to revision {timestamp}." : "{file} を {timestamp} のリビジョンに戻すことができません。",
"_%n byte_::_%n bytes_" : ["%n バイト"],
"Restore" : "復元",
+ "No versions available" : "履歴はありません",
"More versions..." : "他のバージョン...",
"No other versions available" : "利用可能なバージョンはありません"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/apps/files_versions/l10n/lv.js b/apps/files_versions/l10n/lv.js
index e2f19658d5b..932e457cb41 100644
--- a/apps/files_versions/l10n/lv.js
+++ b/apps/files_versions/l10n/lv.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "Nevarēja atgriezt — %s",
"Versions" : "Versijas",
"Failed to revert {file} to revision {timestamp}." : "Neizdevās atjaunot {file} no rediģējuma {timestamp} ",
+ "_%n byte_::_%n bytes_" : ["%n baiti","%n baiti","%n baiti"],
"Restore" : "Atjaunot",
+ "No versions available" : "Nav versijas",
"More versions..." : "Vairāk versiju...",
"No other versions available" : "Citas versijas nav pieejamas"
},
diff --git a/apps/files_versions/l10n/lv.json b/apps/files_versions/l10n/lv.json
index 7c2f786034a..fcf03c1f9f5 100644
--- a/apps/files_versions/l10n/lv.json
+++ b/apps/files_versions/l10n/lv.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "Nevarēja atgriezt — %s",
"Versions" : "Versijas",
"Failed to revert {file} to revision {timestamp}." : "Neizdevās atjaunot {file} no rediģējuma {timestamp} ",
+ "_%n byte_::_%n bytes_" : ["%n baiti","%n baiti","%n baiti"],
"Restore" : "Atjaunot",
+ "No versions available" : "Nav versijas",
"More versions..." : "Vairāk versiju...",
"No other versions available" : "Citas versijas nav pieejamas"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
diff --git a/apps/files_versions/l10n/nb_NO.js b/apps/files_versions/l10n/nb_NO.js
index 1d990031c39..251555e587c 100644
--- a/apps/files_versions/l10n/nb_NO.js
+++ b/apps/files_versions/l10n/nb_NO.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "Klarte ikke å tilbakeføre: %s",
"Versions" : "Versjoner",
"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 versions available" : "Ingen versjoner tilgjengelig",
"More versions..." : "Flere versjoner",
"No other versions available" : "Det finnes ingen andre versjoner"
},
diff --git a/apps/files_versions/l10n/nb_NO.json b/apps/files_versions/l10n/nb_NO.json
index 8324482bf38..e4a1b1b5853 100644
--- a/apps/files_versions/l10n/nb_NO.json
+++ b/apps/files_versions/l10n/nb_NO.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "Klarte ikke å tilbakeføre: %s",
"Versions" : "Versjoner",
"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 versions available" : "Ingen versjoner tilgjengelig",
"More versions..." : "Flere versjoner",
"No other versions available" : "Det finnes ingen andre versjoner"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/pl.js b/apps/files_versions/l10n/pl.js
index 7039d97b2d6..e330499d8ef 100644
--- a/apps/files_versions/l10n/pl.js
+++ b/apps/files_versions/l10n/pl.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "Nie można było przywrócić: %s",
"Versions" : "Wersje",
"Failed to revert {file} to revision {timestamp}." : "Nie udało się przywrócić {file} do wersji z {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajtów","%n bajtów","%n bajtów"],
"Restore" : "Przywróć",
+ "No versions available" : "Brak wersji",
"More versions..." : "Więcej wersji...",
"No other versions available" : "Nie są dostępne żadne inne wersje"
},
diff --git a/apps/files_versions/l10n/pl.json b/apps/files_versions/l10n/pl.json
index 5718a223672..7d241cc4254 100644
--- a/apps/files_versions/l10n/pl.json
+++ b/apps/files_versions/l10n/pl.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "Nie można było przywrócić: %s",
"Versions" : "Wersje",
"Failed to revert {file} to revision {timestamp}." : "Nie udało się przywrócić {file} do wersji z {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajtów","%n bajtów","%n bajtów"],
"Restore" : "Przywróć",
+ "No versions available" : "Brak wersji",
"More versions..." : "Więcej wersji...",
"No other versions available" : "Nie są dostępne żadne inne wersje"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/apps/files_versions/l10n/ru.js b/apps/files_versions/l10n/ru.js
index 63fb321cd2a..476587a470b 100644
--- a/apps/files_versions/l10n/ru.js
+++ b/apps/files_versions/l10n/ru.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"Could not revert: %s" : "Невозможно откатить: %s",
"Versions" : "Версии",
"Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байт","%n байт"],
"Restore" : "Откатить",
"No versions available" : "Нет доступных версий",
"More versions..." : "Ещё версии...",
diff --git a/apps/files_versions/l10n/ru.json b/apps/files_versions/l10n/ru.json
index 8f6c2b7d932..871796814fb 100644
--- a/apps/files_versions/l10n/ru.json
+++ b/apps/files_versions/l10n/ru.json
@@ -2,6 +2,7 @@
"Could not revert: %s" : "Невозможно откатить: %s",
"Versions" : "Версии",
"Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байт","%n байт"],
"Restore" : "Откатить",
"No versions available" : "Нет доступных версий",
"More versions..." : "Ещё версии...",
diff --git a/apps/files_versions/l10n/sk_SK.js b/apps/files_versions/l10n/sk_SK.js
index 1c085558c6c..feee7b611a3 100644
--- a/apps/files_versions/l10n/sk_SK.js
+++ b/apps/files_versions/l10n/sk_SK.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "Nemožno obnoviť: %s",
"Versions" : "Verzie",
"Failed to revert {file} to revision {timestamp}." : "Zlyhalo obnovenie súboru {file} na verziu {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajtov","%n bajtov"],
"Restore" : "Obnoviť",
+ "No versions available" : "Žiadne verzie nie sú dostupné",
"More versions..." : "Viac verzií...",
"No other versions available" : "Žiadne ďalšie verzie nie sú dostupné"
},
diff --git a/apps/files_versions/l10n/sk_SK.json b/apps/files_versions/l10n/sk_SK.json
index a0620921b61..93a6575cccd 100644
--- a/apps/files_versions/l10n/sk_SK.json
+++ b/apps/files_versions/l10n/sk_SK.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "Nemožno obnoviť: %s",
"Versions" : "Verzie",
"Failed to revert {file} to revision {timestamp}." : "Zlyhalo obnovenie súboru {file} na verziu {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajtov","%n bajtov"],
"Restore" : "Obnoviť",
+ "No versions available" : "Žiadne verzie nie sú dostupné",
"More versions..." : "Viac verzií...",
"No other versions available" : "Žiadne ďalšie verzie nie sú dostupné"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
diff --git a/apps/files_versions/l10n/sl.js b/apps/files_versions/l10n/sl.js
index 44d40e93eb5..58dd669580a 100644
--- a/apps/files_versions/l10n/sl.js
+++ b/apps/files_versions/l10n/sl.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "Ni mogoče povrniti: %s",
"Versions" : "Različice",
"Failed to revert {file} to revision {timestamp}." : "Povrnitev datoteke {file} na objavo {timestamp} je spodletelo.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n byte-a","%n byte-i","%n byte-ov"],
"Restore" : "Obnovi",
+ "No versions available" : "Ni verzij na voljo",
"More versions..." : "Več različic",
"No other versions available" : "Ni drugih različic"
},
diff --git a/apps/files_versions/l10n/sl.json b/apps/files_versions/l10n/sl.json
index d73adb935fe..a169af9e1bc 100644
--- a/apps/files_versions/l10n/sl.json
+++ b/apps/files_versions/l10n/sl.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "Ni mogoče povrniti: %s",
"Versions" : "Različice",
"Failed to revert {file} to revision {timestamp}." : "Povrnitev datoteke {file} na objavo {timestamp} je spodletelo.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n byte-a","%n byte-i","%n byte-ov"],
"Restore" : "Obnovi",
+ "No versions available" : "Ni verzij na voljo",
"More versions..." : "Več različic",
"No other versions available" : "Ni drugih različic"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
diff --git a/apps/files_versions/l10n/sq.js b/apps/files_versions/l10n/sq.js
index ec054c6bcfc..976e75163ba 100644
--- a/apps/files_versions/l10n/sq.js
+++ b/apps/files_versions/l10n/sq.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "S’u rikthye dot: %s",
"Versions" : "Versione",
"Failed to revert {file} to revision {timestamp}." : "Dështoi në rikthimin e {file} te rishikimi {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bajte","%n bajte"],
"Restore" : "Riktheje",
+ "No versions available" : "Ska versione të gatshme",
"More versions..." : "Më shumë versione…",
"No other versions available" : "Nuk ka versione të tjera të gatshme"
},
diff --git a/apps/files_versions/l10n/sq.json b/apps/files_versions/l10n/sq.json
index a63e4d937dc..04ebebdfd74 100644
--- a/apps/files_versions/l10n/sq.json
+++ b/apps/files_versions/l10n/sq.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "S’u rikthye dot: %s",
"Versions" : "Versione",
"Failed to revert {file} to revision {timestamp}." : "Dështoi në rikthimin e {file} te rishikimi {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n bajte","%n bajte"],
"Restore" : "Riktheje",
+ "No versions available" : "Ska versione të gatshme",
"More versions..." : "Më shumë versione…",
"No other versions available" : "Nuk ka versione të tjera të gatshme"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/sv.js b/apps/files_versions/l10n/sv.js
index d4f51a56cf6..e33aae97a2f 100644
--- a/apps/files_versions/l10n/sv.js
+++ b/apps/files_versions/l10n/sv.js
@@ -3,8 +3,10 @@ OC.L10N.register(
{
"Could not revert: %s" : "Kunde inte återställa: %s",
"Versions" : "Versioner",
- "Failed to revert {file} to revision {timestamp}." : "Kunde inte återställa {file} till revision {timestamp}.",
+ "Failed to revert {file} to revision {timestamp}." : "Kunde inte återställa {file} till {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Återskapa",
+ "No versions available" : "Inga versioner tillgängliga",
"More versions..." : "Fler versioner...",
"No other versions available" : "Inga andra versioner tillgängliga"
},
diff --git a/apps/files_versions/l10n/sv.json b/apps/files_versions/l10n/sv.json
index 4d912c3b0bf..5e74937879d 100644
--- a/apps/files_versions/l10n/sv.json
+++ b/apps/files_versions/l10n/sv.json
@@ -1,8 +1,10 @@
{ "translations": {
"Could not revert: %s" : "Kunde inte återställa: %s",
"Versions" : "Versioner",
- "Failed to revert {file} to revision {timestamp}." : "Kunde inte återställa {file} till revision {timestamp}.",
+ "Failed to revert {file} to revision {timestamp}." : "Kunde inte återställa {file} till {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Återskapa",
+ "No versions available" : "Inga versioner tillgängliga",
"More versions..." : "Fler versioner...",
"No other versions available" : "Inga andra versioner tillgängliga"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/zh_CN.js b/apps/files_versions/l10n/zh_CN.js
index e7cbf668da0..77a40dd74f0 100644
--- a/apps/files_versions/l10n/zh_CN.js
+++ b/apps/files_versions/l10n/zh_CN.js
@@ -4,7 +4,9 @@ OC.L10N.register(
"Could not revert: %s" : "无法恢复: %s",
"Versions" : "版本",
"Failed to revert {file} to revision {timestamp}." : "无法恢复 {file} 到 {timestamp} 的版本。",
+ "_%n byte_::_%n bytes_" : ["%n 比特"],
"Restore" : "恢复",
+ "No versions available" : "没有可用的版本",
"More versions..." : "更多版本...",
"No other versions available" : "无其他版本可用"
},
diff --git a/apps/files_versions/l10n/zh_CN.json b/apps/files_versions/l10n/zh_CN.json
index 67253581a35..a44264da4be 100644
--- a/apps/files_versions/l10n/zh_CN.json
+++ b/apps/files_versions/l10n/zh_CN.json
@@ -2,7 +2,9 @@
"Could not revert: %s" : "无法恢复: %s",
"Versions" : "版本",
"Failed to revert {file} to revision {timestamp}." : "无法恢复 {file} 到 {timestamp} 的版本。",
+ "_%n byte_::_%n bytes_" : ["%n 比特"],
"Restore" : "恢复",
+ "No versions available" : "没有可用的版本",
"More versions..." : "更多版本...",
"No other versions available" : "无其他版本可用"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/apps/lookup_server_connector/appinfo/info.xml b/apps/lookup_server_connector/appinfo/info.xml
index 88898c0b71b..7bada73bbbb 100644
--- a/apps/lookup_server_connector/appinfo/info.xml
+++ b/apps/lookup_server_connector/appinfo/info.xml
@@ -9,7 +9,7 @@
<version>1.0.0</version>
<category>other</category>
<dependencies>
- <owncloud min-version="11.0" max-version="11.0" />
+ <nextcloud min-version="12.0" max-version="12.0" />
</dependencies>
<default_enable/>
<types>
diff --git a/apps/provisioning_api/appinfo/info.xml b/apps/provisioning_api/appinfo/info.xml
index 0ebcee9a7f7..e633df00bd9 100644
--- a/apps/provisioning_api/appinfo/info.xml
+++ b/apps/provisioning_api/appinfo/info.xml
@@ -17,12 +17,12 @@
<documentation>
<admin>admin-provisioning-api</admin>
</documentation>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<namespace>Provisioning_API</namespace>
<types>
<prevent_group_restriction/>
</types>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
</info>
diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php
index 04a34fba903..baa4e475be8 100644
--- a/apps/provisioning_api/appinfo/routes.php
+++ b/apps/provisioning_api/appinfo/routes.php
@@ -45,6 +45,7 @@ return [
['root' => '/cloud', 'name' => 'Users#getUsers', 'url' => '/users', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#addUser', 'url' => '/users', 'verb' => 'POST'],
['root' => '/cloud', 'name' => 'Users#getUser', 'url' => '/users/{userId}', 'verb' => 'GET'],
+ ['root' => '/cloud', 'name' => 'Users#getCurrentUser', 'url' => '/user', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#editUser', 'url' => '/users/{userId}', 'verb' => 'PUT'],
['root' => '/cloud', 'name' => 'Users#deleteUser', 'url' => '/users/{userId}', 'verb' => 'DELETE'],
['root' => '/cloud', 'name' => 'Users#enableUser', 'url' => '/users/{userId}/enable', 'verb' => 'PUT'],
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index cc1d63d2d34..1e8a767b33a 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -29,14 +29,15 @@
namespace OCA\Provisioning_API\Controller;
+use OC\Accounts\AccountManager;
use \OC_Helper;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSForbiddenException;
-use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\AppFramework\OCSController;
use OCP\Files\NotFoundException;
use OCP\IConfig;
+use OCP\IGroup;
use OCP\IGroupManager;
use OCP\ILogger;
use OCP\IRequest;
@@ -53,6 +54,8 @@ class UsersController extends OCSController {
private $groupManager;
/** @var IUserSession */
private $userSession;
+ /** @var AccountManager */
+ private $accountManager;
/** @var ILogger */
private $logger;
@@ -63,6 +66,7 @@ class UsersController extends OCSController {
* @param IConfig $config
* @param IGroupManager $groupManager
* @param IUserSession $userSession
+ * @param AccountManager $accountManager
* @param ILogger $logger
*/
public function __construct($appName,
@@ -71,6 +75,7 @@ class UsersController extends OCSController {
IConfig $config,
IGroupManager $groupManager,
IUserSession $userSession,
+ AccountManager $accountManager,
ILogger $logger) {
parent::__construct($appName, $request);
@@ -78,6 +83,7 @@ class UsersController extends OCSController {
$this->config = $config;
$this->groupManager = $groupManager;
$this->userSession = $userSession;
+ $this->accountManager = $accountManager;
$this->logger = $logger;
}
@@ -107,7 +113,7 @@ class UsersController extends OCSController {
}
if($offset === null) {
- $offset = 0;
+ $offset = 0;
}
$users = [];
@@ -159,7 +165,7 @@ class UsersController extends OCSController {
throw new OCSException('no group specified (required for subadmins)', 106);
}
}
-
+
try {
$newUser = $this->userManager->createUser($userid, $password);
$this->logger->info('Successful addUser call with userid: '.$userid, ['app' => 'ocs_api']);
@@ -188,6 +194,42 @@ class UsersController extends OCSController {
* @throws OCSException
*/
public function getUser($userId) {
+ $data = $this->getUserData($userId);
+ return new DataResponse($data);
+ }
+
+ /**
+ * @NoAdminRequired
+ * @NoSubAdminRequired
+ *
+ * gets user info from the currently logged in user
+ *
+ * @return DataResponse
+ * @throws OCSException
+ */
+ public function getCurrentUser() {
+ $user = $this->userSession->getUser();
+ if ($user) {
+ $data = $this->getUserData($user->getUID());
+ // rename "displayname" to "display-name" only for this call to keep
+ // the API stable.
+ $data['display-name'] = $data['displayname'];
+ unset($data['displayname']);
+ return new DataResponse($data);
+
+ }
+
+ throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED);
+ }
+
+ /**
+ * creates a array with all user data
+ *
+ * @param $userId
+ * @return array
+ * @throws OCSException
+ */
+ protected function getUserData($userId) {
$currentLoggedInUser = $this->userSession->getUser();
$data = [];
@@ -209,12 +251,19 @@ class UsersController extends OCSController {
}
}
+ $userAccount = $this->accountManager->getUser($targetUserObject);
+
// Find the data
+ $data['id'] = $targetUserObject->getUID();
$data['quota'] = $this->fillStorageInfo($userId);
$data['email'] = $targetUserObject->getEMailAddress();
$data['displayname'] = $targetUserObject->getDisplayName();
+ $data['phone'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_PHONE]['value'];
+ $data['address'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_ADDRESS]['value'];
+ $data['webpage'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_WEBSITE]['value'];
+ $data['twitter'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['value'];
- return new DataResponse($data);
+ return $data;
}
/**
@@ -275,9 +324,9 @@ class UsersController extends OCSController {
break;
case 'quota':
$quota = $value;
- if($quota !== 'none' and $quota !== 'default') {
+ if($quota !== 'none' && $quota !== 'default') {
if (is_numeric($quota)) {
- $quota = floatval($quota);
+ $quota = (float) $quota;
} else {
$quota = \OCP\Util::computerFileSize($quota);
}
@@ -421,6 +470,7 @@ class UsersController extends OCSController {
// Looking up someone else
if($subAdminManager->isUserAccessible($loggedInUser, $targetUser)) {
// Return the group that the method caller is subadmin of for the user in question
+ /** @var IGroup[] $getSubAdminsGroups */
$getSubAdminsGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
foreach ($getSubAdminsGroups as $key => $group) {
$getSubAdminsGroups[$key] = $group->getGID();
@@ -435,11 +485,13 @@ class UsersController extends OCSController {
throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED);
}
}
-
+
}
/**
* @PasswordConfirmationRequired
+ * @NoAdminRequired
+ *
* @param string $userId
* @param string $groupid
* @return DataResponse
@@ -459,6 +511,13 @@ class UsersController extends OCSController {
throw new OCSException('', 103);
}
+ // If they're not an admin, check they are a subadmin of the group in question
+ $loggedInUser = $this->userSession->getUser();
+ $subAdminManager = $this->groupManager->getSubAdmin();
+ if (!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) {
+ throw new OCSException('', 104);
+ }
+
// Add user to group
$group->addUser($targetUser);
return new DataResponse();
@@ -492,25 +551,33 @@ class UsersController extends OCSController {
// If they're not an admin, check they are a subadmin of the group in question
$subAdminManager = $this->groupManager->getSubAdmin();
- if(!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminofGroup($loggedInUser, $group)) {
+ if (!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) {
throw new OCSException('', 104);
}
+
// Check they aren't removing themselves from 'admin' or their 'subadmin; group
- if($userId === $loggedInUser->getUID()) {
- if($this->groupManager->isAdmin($loggedInUser->getUID())) {
- if($group->getGID() === 'admin') {
+ if ($userId === $loggedInUser->getUID()) {
+ if ($this->groupManager->isAdmin($loggedInUser->getUID())) {
+ if ($group->getGID() === 'admin') {
throw new OCSException('Cannot remove yourself from the admin group', 105);
}
} else {
- // Not an admin, check they are not removing themself from their subadmin group
- $subAdminGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
- foreach ($subAdminGroups as $key => $group) {
- $subAdminGroups[$key] = $group->getGID();
- }
+ // Not an admin, so the user must be a subadmin of this group, but that is not allowed.
+ throw new OCSException('Cannot remove yourself from this group as you are a SubAdmin', 105);
+ }
- if(in_array($group->getGID(), $subAdminGroups, true)) {
- throw new OCSException('Cannot remove yourself from this group as you are a SubAdmin', 105);
- }
+ } else if (!$this->groupManager->isAdmin($loggedInUser->getUID())) {
+ /** @var IGroup[] $subAdminGroups */
+ $subAdminGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
+ $subAdminGroups = array_map(function (IGroup $subAdminGroup) {
+ return $subAdminGroup->getGID();
+ }, $subAdminGroups);
+ $userGroups = $this->groupManager->getUserGroupIds($targetUser);
+ $userSubAdminGroups = array_intersect($subAdminGroups, $userGroups);
+
+ if (count($userSubAdminGroups) <= 1) {
+ // Subadmin must not be able to remove a user from all their subadmin groups.
+ throw new OCSException('Cannot remove user from this group as this is the only remaining group you are a SubAdmin of', 105);
}
}
diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
index e04ee86feae..a3e5bf6fde6 100644
--- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
@@ -29,7 +29,12 @@
namespace OCA\Provisioning_API\Tests\Controller;
+use OC\Accounts\AccountManager;
use OCA\Provisioning_API\Controller\UsersController;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\IGroup;
+use OCP\IRequest;
+use OCP\IUser;
use OCP\IUserManager;
use OCP\IConfig;
use OCP\IUserSession;
@@ -38,7 +43,7 @@ use Test\TestCase as OriginalTest;
use OCP\ILogger;
class UsersControllerTest extends OriginalTest {
-
+
/** @var IUserManager | PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
/** @var IConfig | PHPUnit_Framework_MockObject_MockObject */
@@ -51,6 +56,10 @@ class UsersControllerTest extends OriginalTest {
protected $logger;
/** @var UsersController | PHPUnit_Framework_MockObject_MockObject */
protected $api;
+ /** @var AccountManager | PHPUnit_Framework_MockObject_MockObject */
+ protected $accountManager;
+ /** @var IRequest | PHPUnit_Framework_MockObject_MockObject */
+ protected $request;
protected function tearDown() {
parent::tearDown();
@@ -74,17 +83,21 @@ class UsersControllerTest extends OriginalTest {
$this->logger = $this->getMockBuilder('OCP\ILogger')
->disableOriginalConstructor()
->getMock();
- $request = $this->getMockBuilder('OCP\IRequest')
+ $this->request = $this->getMockBuilder('OCP\IRequest')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->accountManager = $this->getMockBuilder(AccountManager::class)
->disableOriginalConstructor()
->getMock();
$this->api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController')
->setConstructorArgs([
'provisioning_api',
- $request,
+ $this->request,
$this->userManager,
$this->config,
$this->groupManager,
$this->userSession,
+ $this->accountManager,
$this->logger,
])
->setMethods(['fillStorageInfo'])
@@ -621,7 +634,7 @@ class UsersControllerTest extends OriginalTest {
$this->api->getUser('UserToGet');
}
- public function testGetUserAsAdmin() {
+ public function testGetUserDataAsAdmin() {
$loggedInUser = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor()
->getMock();
@@ -649,6 +662,16 @@ class UsersControllerTest extends OriginalTest {
->method('isAdmin')
->with('admin')
->will($this->returnValue(true));
+ $this->accountManager->expects($this->any())->method('getUser')
+ ->with($targetUser)
+ ->willReturn(
+ [
+ AccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ AccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ AccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]
+ );
$this->config
->expects($this->at(0))
->method('getUserValue')
@@ -663,17 +686,26 @@ class UsersControllerTest extends OriginalTest {
->expects($this->once())
->method('getDisplayName')
->will($this->returnValue('Demo User'));
+ $targetUser
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('UID'));
$expected = [
+ 'id' => 'UID',
'enabled' => 'true',
'quota' => ['DummyValue'],
'email' => 'demo@owncloud.org',
'displayname' => 'Demo User',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter'
];
- $this->assertEquals($expected, $this->api->getUser('UserToGet')->getData());
+ $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UserToGet']));
}
- public function testGetUserAsSubAdminAndUserIsAccessible() {
+ public function testGetUserDataAsSubAdminAndUserIsAccessible() {
$loggedInUser = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor()
->getMock();
@@ -728,14 +760,33 @@ class UsersControllerTest extends OriginalTest {
->expects($this->once())
->method('getDisplayName')
->will($this->returnValue('Demo User'));
+ $targetUser
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('UID'));
+ $this->accountManager->expects($this->any())->method('getUser')
+ ->with($targetUser)
+ ->willReturn(
+ [
+ AccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ AccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ AccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]
+ );
$expected = [
+ 'id' => 'UID',
'enabled' => 'true',
'quota' => ['DummyValue'],
'email' => 'demo@owncloud.org',
'displayname' => 'Demo User',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter'
];
- $this->assertEquals($expected, $this->api->getUser('UserToGet')->getData());
+ $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UserToGet']));
}
@@ -743,7 +794,7 @@ class UsersControllerTest extends OriginalTest {
* @expectedException \OCP\AppFramework\OCS\OCSException
* @expectedExceptionCode 997
*/
- public function testGetUserAsSubAdminAndUserIsNotAccessible() {
+ public function testGetUserDataAsSubAdminAndUserIsNotAccessible() {
$loggedInUser = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor()
->getMock();
@@ -781,10 +832,10 @@ class UsersControllerTest extends OriginalTest {
->method('getSubAdmin')
->will($this->returnValue($subAdminManager));
- $this->api->getUser('UserToGet');
+ $this->invokePrivate($this->api, 'getUserData', ['UserToGet']);
}
- public function testGetUserAsSubAdminSelfLookup() {
+ public function testGetUserDataAsSubAdminSelfLookup() {
$loggedInUser = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor()
->getMock();
@@ -834,13 +885,32 @@ class UsersControllerTest extends OriginalTest {
->expects($this->once())
->method('getEMailAddress')
->will($this->returnValue('subadmin@owncloud.org'));
+ $targetUser
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('UID'));
+ $this->accountManager->expects($this->any())->method('getUser')
+ ->with($targetUser)
+ ->willReturn(
+ [
+ AccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
+ AccountManager::PROPERTY_PHONE => ['value' => 'phone'],
+ AccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ AccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
+ ]
+ );
$expected = [
+ 'id' => 'UID',
'quota' => ['DummyValue'],
'email' => 'subadmin@owncloud.org',
'displayname' => 'Subadmin User',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter'
];
- $this->assertEquals($expected, $this->api->getUser('subadmin')->getData());
+ $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['subadmin']));
}
public function testEditUserRegularUserSelfEditChangeDisplayName() {
@@ -1598,11 +1668,10 @@ class UsersControllerTest extends OriginalTest {
* @expectedExceptionCode 102
*/
public function testAddToGroupWithTargetGroupNotExisting() {
- $this->groupManager
- ->expects($this->once())
+ $this->groupManager->expects($this->once())
->method('get')
->with('GroupToAddTo')
- ->will($this->returnValue(null));
+ ->willReturn(null);
$this->api->addToGroup('TargetUser', 'GroupToAddTo');
}
@@ -1620,16 +1689,149 @@ class UsersControllerTest extends OriginalTest {
* @expectedExceptionCode 103
*/
public function testAddToGroupWithTargetUserNotExisting() {
- $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
- $this->groupManager
- ->expects($this->once())
+ $targetGroup = $this->createMock(IGroup::class);
+ $this->groupManager->expects($this->once())
->method('get')
->with('GroupToAddTo')
- ->will($this->returnValue($targetGroup));
+ ->willReturn($targetGroup);
+
+ $this->api->addToGroup('TargetUser', 'GroupToAddTo');
+ }
+
+ /**
+ * @expectedException \OCP\AppFramework\OCS\OCSException
+ * @expectedExceptionCode 104
+ */
+ public function testAddToGroupNoSubadmin() {
+ $targetUser = $this->createMock(IUser::class);
+ $loggedInUser = $this->createMock(IUser::class);
+ $loggedInUser->expects($this->once())
+ ->method('getUID')
+ ->willReturn('subadmin');
+
+ $targetGroup = $this->createMock(IGroup::class);
+ $targetGroup->expects($this->never())
+ ->method('addUser')
+ ->with($targetUser);
+
+ $this->groupManager->expects($this->once())
+ ->method('get')
+ ->with('GroupToAddTo')
+ ->willReturn($targetGroup);
+
+
+ $subAdminManager = $this->createMock(\OC\SubAdmin::class);
+ $subAdminManager->expects($this->once())
+ ->method('isSubAdminOfGroup')
+ ->with($loggedInUser, $targetGroup)
+ ->willReturn(false);
+
+ $this->groupManager->expects($this->once())
+ ->method('getSubAdmin')
+ ->willReturn($subAdminManager);
+ $this->groupManager->expects($this->once())
+ ->method('isAdmin')
+ ->with('subadmin')
+ ->willReturn(false);
+
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('TargetUser')
+ ->willReturn($targetUser);
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
$this->api->addToGroup('TargetUser', 'GroupToAddTo');
}
+ public function testAddToGroupSuccessAsSubadmin() {
+ $targetUser = $this->createMock(IUser::class);
+ $loggedInUser = $this->createMock(IUser::class);
+ $loggedInUser->expects($this->once())
+ ->method('getUID')
+ ->willReturn('subadmin');
+
+ $targetGroup = $this->createMock(IGroup::class);
+ $targetGroup->expects($this->once())
+ ->method('addUser')
+ ->with($targetUser);
+
+ $this->groupManager->expects($this->once())
+ ->method('get')
+ ->with('GroupToAddTo')
+ ->willReturn($targetGroup);
+
+
+ $subAdminManager = $this->createMock(\OC\SubAdmin::class);
+ $subAdminManager->expects($this->once())
+ ->method('isSubAdminOfGroup')
+ ->with($loggedInUser, $targetGroup)
+ ->willReturn(true);
+
+ $this->groupManager->expects($this->once())
+ ->method('getSubAdmin')
+ ->willReturn($subAdminManager);
+ $this->groupManager->expects($this->once())
+ ->method('isAdmin')
+ ->with('subadmin')
+ ->willReturn(false);
+
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('TargetUser')
+ ->willReturn($targetUser);
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+
+ $this->assertEquals(new DataResponse(), $this->api->addToGroup('TargetUser', 'GroupToAddTo'));
+ }
+
+ public function testAddToGroupSuccessAsAdmin() {
+ $targetUser = $this->createMock(IUser::class);
+ $loggedInUser = $this->createMock(IUser::class);
+ $loggedInUser->expects($this->once())
+ ->method('getUID')
+ ->willReturn('admin');
+
+ $targetGroup = $this->createMock(IGroup::class);
+ $targetGroup->expects($this->once())
+ ->method('addUser')
+ ->with($targetUser);
+
+ $this->groupManager->expects($this->once())
+ ->method('get')
+ ->with('GroupToAddTo')
+ ->willReturn($targetGroup);
+
+
+ $subAdminManager = $this->createMock(\OC\SubAdmin::class);
+ $subAdminManager->expects($this->never())
+ ->method('isSubAdminOfGroup');
+
+ $this->groupManager->expects($this->once())
+ ->method('getSubAdmin')
+ ->willReturn($subAdminManager);
+ $this->groupManager->expects($this->once())
+ ->method('isAdmin')
+ ->with('admin')
+ ->willReturn(true);
+
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('TargetUser')
+ ->willReturn($targetUser);
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+
+ $this->assertEquals(new DataResponse(), $this->api->addToGroup('TargetUser', 'GroupToAddTo'));
+ }
+
/**
* @expectedException \OCP\AppFramework\OCS\OCSException
* @expectedExceptionCode 101
@@ -1813,22 +2015,79 @@ class UsersControllerTest extends OriginalTest {
->method('isSubAdminofGroup')
->with($loggedInUser, $targetGroup)
->will($this->returnValue(true));
+ $this->groupManager
+ ->expects($this->once())
+ ->method('getSubAdmin')
+ ->will($this->returnValue($subAdminManager));
+ $this->groupManager
+ ->expects($this->any())
+ ->method('isAdmin')
+ ->with('subadmin')
+ ->will($this->returnValue(false));
+
+ $this->api->removeFromGroup('subadmin', 'subadmin');
+ }
+
+ /**
+ * @expectedException \OCP\AppFramework\OCS\OCSException
+ * @expectedExceptionCode 105
+ * @expectedExceptionMessage Cannot remove user from this group as this is the only remaining group you are a SubAdmin of
+ */
+ public function testRemoveFromGroupAsSubAdminFromLastSubAdminGroup() {
+ $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser
+ ->expects($this->any())
+ ->method('getUID')
+ ->will($this->returnValue('subadmin'));
+ $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
+ $targetGroup
+ ->expects($this->any())
+ ->method('getGID')
+ ->will($this->returnValue('subadmin'));
+ $this->userSession
+ ->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($loggedInUser));
+ $this->groupManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('subadmin')
+ ->will($this->returnValue($targetGroup));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('AnotherUser')
+ ->will($this->returnValue($targetUser));
+ $subAdminManager = $this->getMockBuilder('OC\SubAdmin')
+ ->disableOriginalConstructor()->getMock();
$subAdminManager
->expects($this->once())
- ->method('getSubAdminsGroups')
- ->with($loggedInUser)
- ->will($this->returnValue([$targetGroup]));
+ ->method('isSubAdminofGroup')
+ ->with($loggedInUser, $targetGroup)
+ ->will($this->returnValue(true));
$this->groupManager
->expects($this->once())
->method('getSubAdmin')
->will($this->returnValue($subAdminManager));
+ $subAdminManager
+ ->expects($this->once())
+ ->method('getSubAdminsGroups')
+ ->with($loggedInUser)
+ ->will($this->returnValue([$targetGroup]));
+
$this->groupManager
->expects($this->any())
->method('isAdmin')
->with('subadmin')
->will($this->returnValue(false));
+ $this->groupManager
+ ->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($targetUser)
+ ->willReturn(['subadmin', 'other group']);
- $this->api->removeFromGroup('subadmin', 'subadmin');
+ $this->api->removeFromGroup('AnotherUser', 'subadmin');
}
public function testRemoveFromGroupSuccessful() {
@@ -2293,4 +2552,105 @@ class UsersControllerTest extends OriginalTest {
$this->assertEquals([], $this->api->disableUser('RequestedUser')->getData());
}
+
+ public function testGetCurrentUserLoggedIn() {
+
+ $user = $this->getMock(IUser::class);
+ $user->expects($this->once())->method('getUID')->willReturn('UID');
+
+ $this->userSession->expects($this->once())->method('getUser')
+ ->willReturn($user);
+
+ /** @var UsersController | PHPUnit_Framework_MockObject_MockObject $api */
+ $api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController')
+ ->setConstructorArgs([
+ 'provisioning_api',
+ $this->request,
+ $this->userManager,
+ $this->config,
+ $this->groupManager,
+ $this->userSession,
+ $this->accountManager,
+ $this->logger,
+ ])
+ ->setMethods(['getUserData'])
+ ->getMock();
+
+ $api->expects($this->once())->method('getUserData')->with('UID')
+ ->willReturn(
+ [
+ 'id' => 'UID',
+ 'enabled' => 'true',
+ 'quota' => ['DummyValue'],
+ 'email' => 'demo@owncloud.org',
+ 'displayname' => 'Demo User',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter'
+ ]
+ );
+
+ $expected = [
+ 'id' => 'UID',
+ 'enabled' => 'true',
+ 'quota' => ['DummyValue'],
+ 'email' => 'demo@owncloud.org',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter',
+ 'display-name' => 'Demo User'
+ ];
+
+ $this->assertSame($expected, $api->getCurrentUser()->getData());
+ }
+
+ /**
+ * @expectedException \OCP\AppFramework\OCS\OCSException
+ */
+ public function testGetCurrentUserNotLoggedIn() {
+
+ $this->userSession->expects($this->once())->method('getUser')
+ ->willReturn(null);
+
+ $this->api->getCurrentUser();
+ }
+
+
+ public function testGetUser() {
+ /** @var UsersController | PHPUnit_Framework_MockObject_MockObject $api */
+ $api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController')
+ ->setConstructorArgs([
+ 'provisioning_api',
+ $this->request,
+ $this->userManager,
+ $this->config,
+ $this->groupManager,
+ $this->userSession,
+ $this->accountManager,
+ $this->logger,
+ ])
+ ->setMethods(['getUserData'])
+ ->getMock();
+
+ $expected = [
+ 'id' => 'UID',
+ 'enabled' => 'true',
+ 'quota' => ['DummyValue'],
+ 'email' => 'demo@owncloud.org',
+ 'phone' => 'phone',
+ 'address' => 'address',
+ 'webpage' => 'website',
+ 'twitter' => 'twitter',
+ 'displayname' => 'Demo User'
+ ];
+
+ $api->expects($this->once())->method('getUserData')
+ ->with('uid')
+ ->willReturn($expected);
+
+ $this->assertSame($expected, $api->getUser('uid')->getData());
+ }
+
}
diff --git a/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
new file mode 100644
index 00000000000..2d8b79842f2
--- /dev/null
+++ b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Provisioning_API\Tests\Middleware;
+
+use OCA\Provisioning_API\Middleware\Exceptions\NotSubAdminException;
+use OCA\Provisioning_API\Middleware\ProvisioningApiMiddleware;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\AppFramework\Utility\IControllerMethodReflector;
+use Test\TestCase;
+
+class ProvisioningApiMiddlewareTest extends TestCase {
+
+ /** @var IControllerMethodReflector|\PHPUnit_Framework_MockObject_MockObject */
+ private $reflector;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->reflector = $this->createMock(IControllerMethodReflector::class);
+ }
+
+ public function dataAnnotation() {
+ return [
+ [false, false, false, false],
+ [false, false, true, false],
+ [false, true, true, false],
+ [ true, false, false, true],
+ [ true, false, true, false],
+ [ true, true, false, false],
+ [ true, true, true, false],
+ ];
+ }
+
+ /**
+ * @dataProvider dataAnnotation
+ *
+ * @param bool $subadminRequired
+ * @param bool $isAdmin
+ * @param bool $isSubAdmin
+ * @param bool $shouldThrowException
+ */
+ public function testBeforeController($subadminRequired, $isAdmin, $isSubAdmin, $shouldThrowException) {
+ $middleware = new ProvisioningApiMiddleware(
+ $this->reflector,
+ $isAdmin,
+ $isSubAdmin
+ );
+
+ $this->reflector->method('hasAnnotation')
+ ->with('NoSubAdminRequired')
+ ->willReturn(!$subadminRequired);
+
+ try {
+ $middleware->beforeController(
+ $this->createMock(Controller::class),
+ 'myMethod'
+ );
+ $this->assertFalse($shouldThrowException);
+ } catch (NotSubAdminException $e) {
+ $this->assertTrue($shouldThrowException);
+ }
+ }
+
+ public function dataAfterException() {
+ return [
+ [new NotSubAdminException(), false],
+ [new \Exception('test', 42), true],
+ ];
+ }
+
+ /**
+ * @dataProvider dataAfterException
+ *
+ * @param \Exception $e
+ * @param bool $forwared
+ */
+ public function testAfterException(\Exception $exception, $forwared) {
+ $middleware = new ProvisioningApiMiddleware(
+ $this->reflector,
+ false,
+ false
+ );
+
+ try {
+ $middleware->afterException(
+ $this->createMock(Controller::class),
+ 'myMethod',
+ $exception
+ );
+ $this->fail();
+ } catch (OCSException $e) {
+ $this->assertFalse($forwared);
+ $this->assertSame($exception->getMessage(), $e->getMessage());
+ $this->assertSame(\OCP\API::RESPOND_UNAUTHORISED, $e->getCode());
+ } catch (\Exception $e) {
+ $this->assertTrue($forwared);
+ $this->assertSame($exception, $e);
+ }
+
+ }
+}
diff --git a/apps/sharebymail/appinfo/info.xml b/apps/sharebymail/appinfo/info.xml
index 56977fcf285..5528f6158d9 100644
--- a/apps/sharebymail/appinfo/info.xml
+++ b/apps/sharebymail/appinfo/info.xml
@@ -5,11 +5,11 @@
<description>Share provider which allows you to share files by mail</description>
<licence>AGPL</licence>
<author>Bjoern Schiessle</author>
- <version>1.0.1</version>
+ <version>1.1.0</version>
<namespace>ShareByMail</namespace>
<category>other</category>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<default_enable/>
diff --git a/apps/sharebymail/lib/Activity.php b/apps/sharebymail/lib/Activity.php
index 5342d013ade..1c2f37dc382 100644
--- a/apps/sharebymail/lib/Activity.php
+++ b/apps/sharebymail/lib/Activity.php
@@ -196,7 +196,7 @@ class Activity implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
- 'path' => $path,
+ 'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php
index cb013acd4de..e09ca308f31 100644
--- a/apps/sharebymail/lib/ShareByMailProvider.php
+++ b/apps/sharebymail/lib/ShareByMailProvider.php
@@ -31,6 +31,7 @@ use OCP\IDBConnection;
use OCP\IL10N;
use OCP\ILogger;
use OCP\IURLGenerator;
+use OCP\IUser;
use OCP\IUserManager;
use OCP\Mail\IMailer;
use OCP\Security\ISecureRandom;
@@ -167,14 +168,14 @@ class ShareByMailProvider implements IShareProvider {
if ($share->getShareOwner() !== $share->getSharedBy()) {
$ownerFolder = $this->rootFolder->getUserFolder($share->getShareOwner());
$fileId = $share->getNode()->getId();
- $node = $ownerFolder->getById($fileId);
- $ownerPath = $node[0]->getPath();
+ $nodes = $ownerFolder->getById($fileId);
+ $ownerPath = $nodes[0]->getPath();
$this->publishActivity(
Activity::SUBJECT_SHARED_EMAIL_BY,
[$ownerFolder->getRelativePath($ownerPath), $share->getSharedWith(), $share->getSharedBy()],
$share->getShareOwner(),
$fileId,
- $userFolder->getRelativePath($ownerPath)
+ $ownerFolder->getRelativePath($ownerPath)
);
}
@@ -240,15 +241,19 @@ class ShareByMailProvider implements IShareProvider {
}
protected function sendMailNotification($filename, $link, $owner, $initiator, $shareWith) {
+ $ownerUser = $this->userManager->get($owner);
+ $initiatorUser = $this->userManager->get($initiator);
+ $ownerDisplayName = ($ownerUser instanceof IUser) ? $ownerUser->getDisplayName() : $owner;
+ $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
if ($owner === $initiator) {
- $subject = (string)$this->l->t('%s shared »%s« with you', array($owner, $filename));
+ $subject = (string)$this->l->t('%s shared »%s« with you', array($ownerDisplayName, $filename));
} else {
- $subject = (string)$this->l->t('%s shared »%s« with you on behalf of %s', array($owner, $filename, $initiator));
+ $subject = (string)$this->l->t('%s shared »%s« with you on behalf of %s', array($ownerDisplayName, $filename, $initiatorDisplayName));
}
$message = $this->mailer->createMessage();
- $htmlBody = $this->createMailBody('mail', $filename, $link, $owner, $initiator);
- $textBody = $this->createMailBody('altmail', $filename, $link, $owner, $initiator);
+ $htmlBody = $this->createMailBody('mail', $filename, $link, $ownerDisplayName, $initiatorDisplayName);
+ $textBody = $this->createMailBody('altmail', $filename, $link, $ownerDisplayName, $initiatorDisplayName);
$message->setTo([$shareWith]);
$message->setSubject($subject);
$message->setBody($textBody, 'text/plain');
diff --git a/apps/systemtags/appinfo/info.xml b/apps/systemtags/appinfo/info.xml
index 1d5f33207a4..02cafdb4d26 100644
--- a/apps/systemtags/appinfo/info.xml
+++ b/apps/systemtags/appinfo/info.xml
@@ -7,9 +7,9 @@
<licence>AGPL</licence>
<author>Vincent Petry, Joas Schilling</author>
<default_enable/>
- <version>1.1.3</version>
+ <version>1.2.0</version>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<namespace>SystemTags</namespace>
<types>
diff --git a/apps/systemtags/l10n/bg_BG.js b/apps/systemtags/l10n/bg_BG.js
index eeddbd55d1a..e9d207b967d 100644
--- a/apps/systemtags/l10n/bg_BG.js
+++ b/apps/systemtags/l10n/bg_BG.js
@@ -2,11 +2,62 @@ OC.L10N.register(
"systemtags",
{
"Tags" : "Етикети",
+ "Update" : "Обнови",
+ "Create" : "Създай",
+ "Select tag…" : "Избери етикет...",
"Tagged files" : "Отбелязани файлове",
+ "Select tags to filter by" : "Моля изберете таг по който да филтрирате",
+ "No tags found" : "Няма открити етикети",
+ "Please select tags to filter by" : "Моля изберете таг за филтриране",
+ "No files found for the selected tags" : "Няма намерени файлове за избраните тагове",
+ "Added system tag %1$s" : "Добавен системен таг %1$s",
+ "Added system tag {systemtag}" : "Добавен системен таг {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s добави системен таг %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} добави системен таг {systemtag}",
+ "Removed system tag %1$s" : "Премахнат системен таг %1$s",
+ "Removed system tag {systemtag}" : "Премахнат системен таг {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s премахна системен таг %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} премахна системен таг {systemtag}",
+ "You created system tag %1$s" : "Създадохте системен таг %1$s",
+ "You created system tag {systemtag}" : "Създадохте системен таг {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s създаде системен таг %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} създаде системен таг {systemtag}",
+ "You deleted system tag %1$s" : "Изтрихте системен таг %1$s",
+ "You deleted system tag {systemtag}" : "Изтрихте системен таг {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s изтри системен таг %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} изтри системен таг {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Актуализирахте системен таг %2$s на %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Актуализирахте системен таг {oldsystemtag} на {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s акутализиран системен таг %3$s на %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} Актуализира системен таг {oldsystemtag} на {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Добавихте системен таг %2$s на %1$s",
+ "You added system tag {systemtag} to {file}" : "Добавихте системен таг {systemtag} на {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s добави системен таг %3$s на %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} добави системен таг {systemtag} на {file}",
+ "You removed system tag %2$s from %1$s" : "Премахнахте системен таг %2$s от %1$s",
+ "You removed system tag {systemtag} from {file}" : "Премахнахте системен таг {systemtag} от {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s премахна системни таг %3$s от %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} премахна системен таг {systemtag} от {file}",
+ "<strong>System tags</strong> for a file have been modified" : "Промяна на <strong>системни тагове</strong> за файл",
+ "Name" : "Име",
+ "Delete" : "Изтриване",
+ "Public" : "Публичен",
+ "Restricted" : "Ограничен",
+ "Reset" : "Възстанови",
"No files in here" : "Тук няма файлове",
"No entries found in this folder" : "Няма намерени записи в тази папка",
- "Name" : "Име",
"Size" : "Размер",
- "Modified" : "Променен на"
+ "Modified" : "Променен на",
+ "You assigned system tag %3$s" : "Назначихте системен таг %3$s",
+ "%1$s assigned system tag %3$s" : "%1$s възложи системен таг %3$s",
+ "You unassigned system tag %3$s" : "Отстранихте системен таг %3$s",
+ "%1$s unassigned system tag %3$s" : "%1$s отстрани системен таг %3$s",
+ "You created system tag %2$s" : "Създадохте системен таг %2$s",
+ "You deleted system tag %2$s" : "Изтрихте системен таг %2$s",
+ "You updated system tag %3$s to %2$s" : "Актуализирахте системен таг %3$s на %2$s",
+ "You assigned system tag %3$s to %2$s" : "Назначихте системен таг %3$s на %2$s",
+ "%1$s assigned system tag %3$s to %2$s" : "%1$s назначи системен таг %3$s на %2$s",
+ "You unassigned system tag %3$s from %2$s" : "Отстранихте системен таг %3$s от %2$s",
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s отстрани системен таг %3$s от %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/bg_BG.json b/apps/systemtags/l10n/bg_BG.json
index b6f33731e60..25460accb1f 100644
--- a/apps/systemtags/l10n/bg_BG.json
+++ b/apps/systemtags/l10n/bg_BG.json
@@ -1,10 +1,61 @@
{ "translations": {
"Tags" : "Етикети",
+ "Update" : "Обнови",
+ "Create" : "Създай",
+ "Select tag…" : "Избери етикет...",
"Tagged files" : "Отбелязани файлове",
+ "Select tags to filter by" : "Моля изберете таг по който да филтрирате",
+ "No tags found" : "Няма открити етикети",
+ "Please select tags to filter by" : "Моля изберете таг за филтриране",
+ "No files found for the selected tags" : "Няма намерени файлове за избраните тагове",
+ "Added system tag %1$s" : "Добавен системен таг %1$s",
+ "Added system tag {systemtag}" : "Добавен системен таг {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s добави системен таг %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} добави системен таг {systemtag}",
+ "Removed system tag %1$s" : "Премахнат системен таг %1$s",
+ "Removed system tag {systemtag}" : "Премахнат системен таг {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s премахна системен таг %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} премахна системен таг {systemtag}",
+ "You created system tag %1$s" : "Създадохте системен таг %1$s",
+ "You created system tag {systemtag}" : "Създадохте системен таг {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s създаде системен таг %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} създаде системен таг {systemtag}",
+ "You deleted system tag %1$s" : "Изтрихте системен таг %1$s",
+ "You deleted system tag {systemtag}" : "Изтрихте системен таг {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s изтри системен таг %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} изтри системен таг {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Актуализирахте системен таг %2$s на %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Актуализирахте системен таг {oldsystemtag} на {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s акутализиран системен таг %3$s на %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} Актуализира системен таг {oldsystemtag} на {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Добавихте системен таг %2$s на %1$s",
+ "You added system tag {systemtag} to {file}" : "Добавихте системен таг {systemtag} на {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s добави системен таг %3$s на %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} добави системен таг {systemtag} на {file}",
+ "You removed system tag %2$s from %1$s" : "Премахнахте системен таг %2$s от %1$s",
+ "You removed system tag {systemtag} from {file}" : "Премахнахте системен таг {systemtag} от {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s премахна системни таг %3$s от %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} премахна системен таг {systemtag} от {file}",
+ "<strong>System tags</strong> for a file have been modified" : "Промяна на <strong>системни тагове</strong> за файл",
+ "Name" : "Име",
+ "Delete" : "Изтриване",
+ "Public" : "Публичен",
+ "Restricted" : "Ограничен",
+ "Reset" : "Възстанови",
"No files in here" : "Тук няма файлове",
"No entries found in this folder" : "Няма намерени записи в тази папка",
- "Name" : "Име",
"Size" : "Размер",
- "Modified" : "Променен на"
+ "Modified" : "Променен на",
+ "You assigned system tag %3$s" : "Назначихте системен таг %3$s",
+ "%1$s assigned system tag %3$s" : "%1$s възложи системен таг %3$s",
+ "You unassigned system tag %3$s" : "Отстранихте системен таг %3$s",
+ "%1$s unassigned system tag %3$s" : "%1$s отстрани системен таг %3$s",
+ "You created system tag %2$s" : "Създадохте системен таг %2$s",
+ "You deleted system tag %2$s" : "Изтрихте системен таг %2$s",
+ "You updated system tag %3$s to %2$s" : "Актуализирахте системен таг %3$s на %2$s",
+ "You assigned system tag %3$s to %2$s" : "Назначихте системен таг %3$s на %2$s",
+ "%1$s assigned system tag %3$s to %2$s" : "%1$s назначи системен таг %3$s на %2$s",
+ "You unassigned system tag %3$s from %2$s" : "Отстранихте системен таг %3$s от %2$s",
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s отстрани системен таг %3$s от %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/cs_CZ.js b/apps/systemtags/l10n/cs_CZ.js
index a58f4456d74..1cd9e4224c6 100644
--- a/apps/systemtags/l10n/cs_CZ.js
+++ b/apps/systemtags/l10n/cs_CZ.js
@@ -10,23 +10,37 @@ OC.L10N.register(
"No tags found" : "Nebyly nalezeny žádné tagy",
"Please select tags to filter by" : "Vyberte prosím tagy pro filtrování",
"No files found for the selected tags" : "Nebyly nalezeny žádné soubory s vybranými tagy",
- "<strong>System tags</strong> for a file have been modified" : "<strong>Systémové tagy</strong> souboru byly upraveny",
- "You added system tag %3$s" : "Přidal jste systémový štítek %3$s",
- "%1$s added system tag %3$s" : "%1$s přidal systémový štítek %3$s",
- "You removed system tag %3$s" : "Odstranil jste systémový tag %3$s",
- "%1$s removed system tag %3$s" : "%1$s odstranil systémový štítek %3$s",
- "You created system tag %2$s" : "Vytvořili jste systémový tag %2$s",
+ "Added system tag %1$s" : "Přidán systémový tag %1$s",
+ "Added system tag {systemtag}" : "Přidán systémový tag {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s přidal(a) systémový tag %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} přidal(a) systémový tag {systemtag}",
+ "Removed system tag %1$s" : "Odstraněn systémový tag %1$s",
+ "Removed system tag {systemtag}" : "Odstraněn systémový tag {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s odstranil(a) systémový tag %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} odstranil(a) systémový tag {systemtag}",
+ "You created system tag %1$s" : "Vytvořil(a) jste systémový tag %1$s",
+ "You created system tag {systemtag}" : "Vytvořil(a) jste systémový tag {systemtag}",
"%1$s created system tag %2$s" : "%1$s vytvořil systémový tag %2$s",
- "You deleted system tag %2$s" : "Smazali jste systémový tag %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} vytvořil(a) systémový tag {systemtag}",
+ "You deleted system tag %1$s" : "Odstranil(a) jste systémový tag %1$s",
+ "You deleted system tag {systemtag}" : "Odstranil(a) jste systémový tag {systemtag}",
"%1$s deleted system tag %2$s" : "%1$s smazal systémový tag %2$s",
- "You updated system tag %3$s to %2$s" : "Aktualizovali jste systémový tag %3$s na %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} odstranil(a) systémový tag {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Aktualizoval(a) jste systémový tag %2$s na %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Aktualizoval(a) jste systémový tag {oldsystemtag} na {newsystemtag}",
"%1$s updated system tag %3$s to %2$s" : "%1$s aktualizoval systémový tag %3$s na %2$s",
- "You added system tag %3$s to %2$s" : "K %2$s jste přidal systémový štítek %3$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} aktualizoval(a) systémový tag {oldsystemtag} na { newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Přidal(a) jste systémový tag %2$s k %1$s",
+ "You added system tag {systemtag} to {file}" : "K {file} jste přidal(a) systémový tag {systemtag}",
"%1$s added system tag %3$s to %2$s" : "%1$s k %2$s přidal systémový štítek %3$s",
- "You removed system tag %3$s from %2$s" : "Z %2$s jste odstranil systémový štítek %3$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} přidal(a) systémový tag {systemtag} k {file}",
+ "You removed system tag %2$s from %1$s" : "Z %2$s jste odstranil(a) systémový tag %1$s",
+ "You removed system tag {systemtag} from {file}" : "Z {file} jste odstranil(a) systémový tag {systemtag}",
"%1$s removed system tag %3$s from %2$s" : "%1$s odstranil systémový štítek %3$s z %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} odstranil(a) systémotý tag {systemtag} z {file}",
"%s (restricted)" : "%s (omezeno)",
"%s (invisible)" : "%s (neviditelný)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>Systémové tagy</strong> souboru byly upraveny",
"Collaborative tags" : "Značky pro spolupráci",
"Name" : "Název",
"Delete" : "Smazat",
@@ -42,10 +56,12 @@ OC.L10N.register(
"%1$s assigned system tag %3$s" : "%1$s přiřadil systémový tag %3$s",
"You unassigned system tag %3$s" : "Odebrali jste systémový tag %3$s",
"%1$s unassigned system tag %3$s" : "%1$s odebral systémový tag %3$s",
+ "You created system tag %2$s" : "Vytvořili jste systémový tag %2$s",
+ "You deleted system tag %2$s" : "Smazali jste systémový tag %2$s",
+ "You updated system tag %3$s to %2$s" : "Aktualizovali jste systémový tag %3$s na %2$s",
"You assigned system tag %3$s to %2$s" : "Přiřadili jste systémový tag %3$s na %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s přiřadil systémový tag %3$s na %2$s",
"You unassigned system tag %3$s from %2$s" : "Odebrali jste systémový tag %3$s z %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s",
- "%s (not-assignable)" : "%s (nepřiřaditelné)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/systemtags/l10n/cs_CZ.json b/apps/systemtags/l10n/cs_CZ.json
index 4c431198836..4f37860393e 100644
--- a/apps/systemtags/l10n/cs_CZ.json
+++ b/apps/systemtags/l10n/cs_CZ.json
@@ -8,23 +8,37 @@
"No tags found" : "Nebyly nalezeny žádné tagy",
"Please select tags to filter by" : "Vyberte prosím tagy pro filtrování",
"No files found for the selected tags" : "Nebyly nalezeny žádné soubory s vybranými tagy",
- "<strong>System tags</strong> for a file have been modified" : "<strong>Systémové tagy</strong> souboru byly upraveny",
- "You added system tag %3$s" : "Přidal jste systémový štítek %3$s",
- "%1$s added system tag %3$s" : "%1$s přidal systémový štítek %3$s",
- "You removed system tag %3$s" : "Odstranil jste systémový tag %3$s",
- "%1$s removed system tag %3$s" : "%1$s odstranil systémový štítek %3$s",
- "You created system tag %2$s" : "Vytvořili jste systémový tag %2$s",
+ "Added system tag %1$s" : "Přidán systémový tag %1$s",
+ "Added system tag {systemtag}" : "Přidán systémový tag {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s přidal(a) systémový tag %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} přidal(a) systémový tag {systemtag}",
+ "Removed system tag %1$s" : "Odstraněn systémový tag %1$s",
+ "Removed system tag {systemtag}" : "Odstraněn systémový tag {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s odstranil(a) systémový tag %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} odstranil(a) systémový tag {systemtag}",
+ "You created system tag %1$s" : "Vytvořil(a) jste systémový tag %1$s",
+ "You created system tag {systemtag}" : "Vytvořil(a) jste systémový tag {systemtag}",
"%1$s created system tag %2$s" : "%1$s vytvořil systémový tag %2$s",
- "You deleted system tag %2$s" : "Smazali jste systémový tag %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} vytvořil(a) systémový tag {systemtag}",
+ "You deleted system tag %1$s" : "Odstranil(a) jste systémový tag %1$s",
+ "You deleted system tag {systemtag}" : "Odstranil(a) jste systémový tag {systemtag}",
"%1$s deleted system tag %2$s" : "%1$s smazal systémový tag %2$s",
- "You updated system tag %3$s to %2$s" : "Aktualizovali jste systémový tag %3$s na %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} odstranil(a) systémový tag {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Aktualizoval(a) jste systémový tag %2$s na %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Aktualizoval(a) jste systémový tag {oldsystemtag} na {newsystemtag}",
"%1$s updated system tag %3$s to %2$s" : "%1$s aktualizoval systémový tag %3$s na %2$s",
- "You added system tag %3$s to %2$s" : "K %2$s jste přidal systémový štítek %3$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} aktualizoval(a) systémový tag {oldsystemtag} na { newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Přidal(a) jste systémový tag %2$s k %1$s",
+ "You added system tag {systemtag} to {file}" : "K {file} jste přidal(a) systémový tag {systemtag}",
"%1$s added system tag %3$s to %2$s" : "%1$s k %2$s přidal systémový štítek %3$s",
- "You removed system tag %3$s from %2$s" : "Z %2$s jste odstranil systémový štítek %3$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} přidal(a) systémový tag {systemtag} k {file}",
+ "You removed system tag %2$s from %1$s" : "Z %2$s jste odstranil(a) systémový tag %1$s",
+ "You removed system tag {systemtag} from {file}" : "Z {file} jste odstranil(a) systémový tag {systemtag}",
"%1$s removed system tag %3$s from %2$s" : "%1$s odstranil systémový štítek %3$s z %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} odstranil(a) systémotý tag {systemtag} z {file}",
"%s (restricted)" : "%s (omezeno)",
"%s (invisible)" : "%s (neviditelný)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>Systémové tagy</strong> souboru byly upraveny",
"Collaborative tags" : "Značky pro spolupráci",
"Name" : "Název",
"Delete" : "Smazat",
@@ -40,10 +54,12 @@
"%1$s assigned system tag %3$s" : "%1$s přiřadil systémový tag %3$s",
"You unassigned system tag %3$s" : "Odebrali jste systémový tag %3$s",
"%1$s unassigned system tag %3$s" : "%1$s odebral systémový tag %3$s",
+ "You created system tag %2$s" : "Vytvořili jste systémový tag %2$s",
+ "You deleted system tag %2$s" : "Smazali jste systémový tag %2$s",
+ "You updated system tag %3$s to %2$s" : "Aktualizovali jste systémový tag %3$s na %2$s",
"You assigned system tag %3$s to %2$s" : "Přiřadili jste systémový tag %3$s na %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s přiřadil systémový tag %3$s na %2$s",
"You unassigned system tag %3$s from %2$s" : "Odebrali jste systémový tag %3$s z %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s",
- "%s (not-assignable)" : "%s (nepřiřaditelné)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js
index 966cb646717..8694bb0b389 100644
--- a/apps/systemtags/l10n/de.js
+++ b/apps/systemtags/l10n/de.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt",
"%s (restricted)" : "%s (eingeschränkt)",
"%s (invisible)" : "%s (unsichtbar)",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Collaborative tags" : "Zusammenarbeits-Tags",
"Name" : "Name",
"Delete" : "Löschen",
@@ -62,7 +62,6 @@ OC.L10N.register(
"You assigned system tag %3$s to %2$s" : "System-Tag %3$s an %2$s zugewiesen",
"%1$s assigned system tag %3$s to %2$s" : "%1$s hat System-Tag %3$s %2$s zugewiesen",
"You unassigned system tag %3$s from %2$s" : "System-Bezeichnung %3$s von %2$s entfernt",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt",
- "%s (not-assignable)" : "%s (nicht zuweisbar)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json
index d95db2afbfb..9c408bb0c09 100644
--- a/apps/systemtags/l10n/de.json
+++ b/apps/systemtags/l10n/de.json
@@ -38,7 +38,7 @@
"{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt",
"%s (restricted)" : "%s (eingeschränkt)",
"%s (invisible)" : "%s (unsichtbar)",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Collaborative tags" : "Zusammenarbeits-Tags",
"Name" : "Name",
"Delete" : "Löschen",
@@ -60,7 +60,6 @@
"You assigned system tag %3$s to %2$s" : "System-Tag %3$s an %2$s zugewiesen",
"%1$s assigned system tag %3$s to %2$s" : "%1$s hat System-Tag %3$s %2$s zugewiesen",
"You unassigned system tag %3$s from %2$s" : "System-Bezeichnung %3$s von %2$s entfernt",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt",
- "%s (not-assignable)" : "%s (nicht zuweisbar)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js
index 5f624847a98..69d9bce4420 100644
--- a/apps/systemtags/l10n/de_DE.js
+++ b/apps/systemtags/l10n/de_DE.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt",
"%s (restricted)" : "%s (eingeschränkt)",
"%s (invisible)" : "%s (unsichtbar)",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Collaborative tags" : "Gemeinsame Tags",
"Name" : "Name",
"Delete" : "Löschen",
@@ -62,7 +62,6 @@ OC.L10N.register(
"You assigned system tag %3$s to %2$s" : "Sie haben den System-Tag %3$s an %2$s zugeordnet",
"%1$s assigned system tag %3$s to %2$s" : "%1$s hat den System-Tag %3$s an %2$s zugeordnet",
"You unassigned system tag %3$s from %2$s" : "Sie haben den System-Tag %3$s von %2$s entfernt",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt",
- "%s (not-assignable)" : "%s (nicht zuweisbar)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json
index 69b48f28469..1155159a066 100644
--- a/apps/systemtags/l10n/de_DE.json
+++ b/apps/systemtags/l10n/de_DE.json
@@ -38,7 +38,7 @@
"{actor} removed system tag {systemtag} from {file}" : "{actor} hat den System-Tag {systemtag} von {file} entfernt",
"%s (restricted)" : "%s (eingeschränkt)",
"%s (invisible)" : "%s (unsichtbar)",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Collaborative tags" : "Gemeinsame Tags",
"Name" : "Name",
"Delete" : "Löschen",
@@ -60,7 +60,6 @@
"You assigned system tag %3$s to %2$s" : "Sie haben den System-Tag %3$s an %2$s zugeordnet",
"%1$s assigned system tag %3$s to %2$s" : "%1$s hat den System-Tag %3$s an %2$s zugeordnet",
"You unassigned system tag %3$s from %2$s" : "Sie haben den System-Tag %3$s von %2$s entfernt",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt",
- "%s (not-assignable)" : "%s (nicht zuweisbar)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/es.js b/apps/systemtags/l10n/es.js
index 6d4d7ff023f..611e96c62e8 100644
--- a/apps/systemtags/l10n/es.js
+++ b/apps/systemtags/l10n/es.js
@@ -32,6 +32,12 @@ OC.L10N.register(
"{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta de sistema {oldsystemtag} a {newsystemtag}",
"You added system tag %2$s to %1$s" : "Usted añadió la etiqueta de sistema %2$s a %1$s",
"You added system tag {systemtag} to {file}" : "Usted añadió la etiqueta de sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta de sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta de sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Ha removido la etiqueta de sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Ha removido la etiqueta de sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s removió la etiqueta de sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} removió la etiqueta de sistema {systemtag} de {file}",
"%s (restricted)" : "%s (restringido)",
"%s (invisible)" : "%s (invisible)",
"<strong>System tags</strong> for a file have been modified" : "Se han modificado las <strong>etiquetas de sistema</strong> de un archivo",
@@ -56,7 +62,6 @@ OC.L10N.register(
"You assigned system tag %3$s to %2$s" : "Asignaste la etiqueta del sistema de %3$s a %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s asignó la etiqueta de sistema %3$s a %2$s",
"You unassigned system tag %3$s from %2$s" : "Desasignaste la etiqueta del sistema a %3$s de %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s eliminó la asignación de etiqueta de sistema %3$s de %2$s",
- "%s (not-assignable)" : "%s (no-asignable)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s eliminó la asignación de etiqueta de sistema %3$s de %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/es.json b/apps/systemtags/l10n/es.json
index 4c862068b30..29ab3561313 100644
--- a/apps/systemtags/l10n/es.json
+++ b/apps/systemtags/l10n/es.json
@@ -30,6 +30,12 @@
"{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta de sistema {oldsystemtag} a {newsystemtag}",
"You added system tag %2$s to %1$s" : "Usted añadió la etiqueta de sistema %2$s a %1$s",
"You added system tag {systemtag} to {file}" : "Usted añadió la etiqueta de sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta de sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta de sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Ha removido la etiqueta de sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Ha removido la etiqueta de sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s removió la etiqueta de sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} removió la etiqueta de sistema {systemtag} de {file}",
"%s (restricted)" : "%s (restringido)",
"%s (invisible)" : "%s (invisible)",
"<strong>System tags</strong> for a file have been modified" : "Se han modificado las <strong>etiquetas de sistema</strong> de un archivo",
@@ -54,7 +60,6 @@
"You assigned system tag %3$s to %2$s" : "Asignaste la etiqueta del sistema de %3$s a %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s asignó la etiqueta de sistema %3$s a %2$s",
"You unassigned system tag %3$s from %2$s" : "Desasignaste la etiqueta del sistema a %3$s de %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s eliminó la asignación de etiqueta de sistema %3$s de %2$s",
- "%s (not-assignable)" : "%s (no-asignable)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s eliminó la asignación de etiqueta de sistema %3$s de %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/fr.js b/apps/systemtags/l10n/fr.js
index 38dc9d5dedd..c8ae9d40962 100644
--- a/apps/systemtags/l10n/fr.js
+++ b/apps/systemtags/l10n/fr.js
@@ -62,7 +62,6 @@ OC.L10N.register(
"You assigned system tag %3$s to %2$s" : "Vous avez attribué l'étiquette collaborative %3$s à %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s a attribué l'étiquette collaborative %3$s à %2$s",
"You unassigned system tag %3$s from %2$s" : "Vous avez retiré l'étiquette collaborative %3$s de %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s a retiré l'étiquette collaborative %3$s de %2$s",
- "%s (not-assignable)" : "%s (non assignable)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s a retiré l'étiquette collaborative %3$s de %2$s"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/systemtags/l10n/fr.json b/apps/systemtags/l10n/fr.json
index f7b526cce22..6bf4ef57225 100644
--- a/apps/systemtags/l10n/fr.json
+++ b/apps/systemtags/l10n/fr.json
@@ -60,7 +60,6 @@
"You assigned system tag %3$s to %2$s" : "Vous avez attribué l'étiquette collaborative %3$s à %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s a attribué l'étiquette collaborative %3$s à %2$s",
"You unassigned system tag %3$s from %2$s" : "Vous avez retiré l'étiquette collaborative %3$s de %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s a retiré l'étiquette collaborative %3$s de %2$s",
- "%s (not-assignable)" : "%s (non assignable)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s a retiré l'étiquette collaborative %3$s de %2$s"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/hu_HU.js b/apps/systemtags/l10n/hu_HU.js
index 96fa98bdd31..e53af978e7e 100644
--- a/apps/systemtags/l10n/hu_HU.js
+++ b/apps/systemtags/l10n/hu_HU.js
@@ -62,7 +62,6 @@ OC.L10N.register(
"You assigned system tag %3$s to %2$s" : "%3$s rendszer címkét hozzárendelte: %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s hozzárendelte ezt a rendszer címkét: %3$s neki: %2$s",
"You unassigned system tag %3$s from %2$s" : "%3$s rendszer címke hozzárendelést elvette tőle: %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s elvette ezt a rendszer címkét %3$s tőle: %2$s",
- "%s (not-assignable)" : "%s (nem hozzárendelhető)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s elvette ezt a rendszer címkét %3$s tőle: %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/hu_HU.json b/apps/systemtags/l10n/hu_HU.json
index f0c566aafec..56ce722db09 100644
--- a/apps/systemtags/l10n/hu_HU.json
+++ b/apps/systemtags/l10n/hu_HU.json
@@ -60,7 +60,6 @@
"You assigned system tag %3$s to %2$s" : "%3$s rendszer címkét hozzárendelte: %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s hozzárendelte ezt a rendszer címkét: %3$s neki: %2$s",
"You unassigned system tag %3$s from %2$s" : "%3$s rendszer címke hozzárendelést elvette tőle: %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s elvette ezt a rendszer címkét %3$s tőle: %2$s",
- "%s (not-assignable)" : "%s (nem hozzárendelhető)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s elvette ezt a rendszer címkét %3$s tőle: %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/it.js b/apps/systemtags/l10n/it.js
index 30e5e9a0861..1e330c33640 100644
--- a/apps/systemtags/l10n/it.js
+++ b/apps/systemtags/l10n/it.js
@@ -62,7 +62,6 @@ OC.L10N.register(
"You assigned system tag %3$s to %2$s" : "Hai assegnato l'etichetta di sistema %3$s a %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s ha assegnato l'etichetta di sistema %3$s a %2$s",
"You unassigned system tag %3$s from %2$s" : "Hai rimosso l'etichetta di sistema %3$s da %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha rimosso l'etichetta di sistema %3$s da %2$s",
- "%s (not-assignable)" : "%s (non assegnabile)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha rimosso l'etichetta di sistema %3$s da %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/it.json b/apps/systemtags/l10n/it.json
index 4e403e6e3cf..10684634acd 100644
--- a/apps/systemtags/l10n/it.json
+++ b/apps/systemtags/l10n/it.json
@@ -60,7 +60,6 @@
"You assigned system tag %3$s to %2$s" : "Hai assegnato l'etichetta di sistema %3$s a %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s ha assegnato l'etichetta di sistema %3$s a %2$s",
"You unassigned system tag %3$s from %2$s" : "Hai rimosso l'etichetta di sistema %3$s da %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha rimosso l'etichetta di sistema %3$s da %2$s",
- "%s (not-assignable)" : "%s (non assegnabile)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha rimosso l'etichetta di sistema %3$s da %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/nb_NO.js b/apps/systemtags/l10n/nb_NO.js
index 69e904077de..c464d26c6eb 100644
--- a/apps/systemtags/l10n/nb_NO.js
+++ b/apps/systemtags/l10n/nb_NO.js
@@ -7,21 +7,40 @@ OC.L10N.register(
"Select tag…" : "Velg merkelapp...",
"Tagged files" : "Merkede filer",
"Select tags to filter by" : "Velg merkelapper å filtrere på",
+ "No tags found" : "Fant ingen merkelapper",
"Please select tags to filter by" : "Vennligst velg merkelapper å filtrere på",
"No files found for the selected tags" : "Ingen filer funnet for de valgte merkelappene",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-merkelapper</strong> for en fil er endret",
- "You added system tag %3$s" : "Du la til system merkelappen %3$s",
- "%1$s added system tag %3$s" : "%1$s la til system merkelapp %3$s",
- "You removed system tag %3$s" : "Du fjernet system merkelappen %3$s",
- "%1$s removed system tag %3$s" : "%1$s fjernet systemetiketten %3$s",
- "You created system tag %2$s" : "Du opprettet system merkelappen %2$s",
+ "Added system tag %1$s" : "La til system-merkelapp %1$s",
+ "Added system tag {systemtag}" : "La til system-merkelapp {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s la til system-merkelapp %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} la til system-merkelapp {systemtag}",
+ "Removed system tag %1$s" : "Fjernet system-merkelapp %1$s",
+ "Removed system tag {systemtag}" : "Fjernet system-merkelapp {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s fjernet system-merkelapp %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} fjernet system-merkelapp {systemtag}",
+ "You created system tag %1$s" : "Du opprettet system-merkelapp %1$s",
+ "You created system tag {systemtag}" : "Du opprettet system-merkelapp {systemtag}",
"%1$s created system tag %2$s" : "%1$s opprettet system-merkelapp %2$s",
- "You deleted system tag %2$s" : "Du slettet system merkelappen %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} opprettet system-merkelapp {systemtag}",
+ "You deleted system tag %1$s" : "Du slettet system-merkelapp %1$s",
+ "You deleted system tag {systemtag}" : "Du slettet system-merkelapp {systemtag}",
"%1$s deleted system tag %2$s" : "%1$s slettet system-merkelapp %2$s",
- "You updated system tag %3$s to %2$s" : "Du oppdaterte system merkelapp %3$s til %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} slettet system-merkelapp {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Du oppdaterte system-merkelapp %2$s til %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Du oppdaterte system-merkelapp {oldsystemtag} til {newsystemtag}",
"%1$s updated system tag %3$s to %2$s" : "%1$s oppdaterte system-merkelapp %3$s til %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} oppdaterte system-merkelapp {oldsystemtag} til {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Du la til system-merkelapp %2$s til %1$s",
+ "You added system tag {systemtag} to {file}" : "Du la til system-merkelapp {systemtag} til {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s la til system-merkelapp %3$s til %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} la til system-merkelapp {systemtag} til {file}",
+ "You removed system tag %2$s from %1$s" : "Du fjernet system-merkelapp %2$s fra %1$s",
+ "You removed system tag {systemtag} from {file}" : "Du fjernet system-merkelapp {systemtag} fra {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s fjernet system-merkelapp %3$s fra %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} fjernet system-merkelapp {systemtag} fra {file}",
"%s (restricted)" : "%s (begrenset)",
"%s (invisible)" : "%s (usynlig)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-merkelapper</strong> for en fil er endret",
"Collaborative tags" : "Felles merkelapper",
"Name" : "Navn",
"Delete" : "Slett",
@@ -33,14 +52,16 @@ OC.L10N.register(
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
"Size" : "Størrelse",
"Modified" : "Endret",
- "You assigned system tag %3$s" : "Du tildelte system merkelappen %3$s",
+ "You assigned system tag %3$s" : "Du tildelte system-merkelappen %3$s",
"%1$s assigned system tag %3$s" : "%1$s festet system-merkelapp %3$s",
- "You unassigned system tag %3$s" : "Du tildelte system merkelappen %3$s",
+ "You unassigned system tag %3$s" : "Du tildelte system-merkelappen %3$s",
"%1$s unassigned system tag %3$s" : "%1$s fjernet system-merkelapp %3$s",
- "You assigned system tag %3$s to %2$s" : "Du tildelte system merkelappen %3$s to %2$s",
+ "You created system tag %2$s" : "Du opprettet system-merkelappen %2$s",
+ "You deleted system tag %2$s" : "Du slettet system-merkelappen %2$s",
+ "You updated system tag %3$s to %2$s" : "Du oppdaterte system-merkelapp %3$s til %2$s",
+ "You assigned system tag %3$s to %2$s" : "Du tildelte system-merkelappen %3$s to %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s festet system-merkelapp %3$s på %2$s",
- "You unassigned system tag %3$s from %2$s" : "Du fjernet system merkelappen %3$s fra %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s fjernet system-merkelapp %3$s fra %2$s",
- "%s (not-assignable)" : "%s (ikke overdragbar)"
+ "You unassigned system tag %3$s from %2$s" : "Du fjernet system-merkelappen %3$s fra %2$s",
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s fjernet system-merkelapp %3$s fra %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/nb_NO.json b/apps/systemtags/l10n/nb_NO.json
index 97236b8db4f..9fc637b487b 100644
--- a/apps/systemtags/l10n/nb_NO.json
+++ b/apps/systemtags/l10n/nb_NO.json
@@ -5,21 +5,40 @@
"Select tag…" : "Velg merkelapp...",
"Tagged files" : "Merkede filer",
"Select tags to filter by" : "Velg merkelapper å filtrere på",
+ "No tags found" : "Fant ingen merkelapper",
"Please select tags to filter by" : "Vennligst velg merkelapper å filtrere på",
"No files found for the selected tags" : "Ingen filer funnet for de valgte merkelappene",
- "<strong>System tags</strong> for a file have been modified" : "<strong>System-merkelapper</strong> for en fil er endret",
- "You added system tag %3$s" : "Du la til system merkelappen %3$s",
- "%1$s added system tag %3$s" : "%1$s la til system merkelapp %3$s",
- "You removed system tag %3$s" : "Du fjernet system merkelappen %3$s",
- "%1$s removed system tag %3$s" : "%1$s fjernet systemetiketten %3$s",
- "You created system tag %2$s" : "Du opprettet system merkelappen %2$s",
+ "Added system tag %1$s" : "La til system-merkelapp %1$s",
+ "Added system tag {systemtag}" : "La til system-merkelapp {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s la til system-merkelapp %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} la til system-merkelapp {systemtag}",
+ "Removed system tag %1$s" : "Fjernet system-merkelapp %1$s",
+ "Removed system tag {systemtag}" : "Fjernet system-merkelapp {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s fjernet system-merkelapp %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} fjernet system-merkelapp {systemtag}",
+ "You created system tag %1$s" : "Du opprettet system-merkelapp %1$s",
+ "You created system tag {systemtag}" : "Du opprettet system-merkelapp {systemtag}",
"%1$s created system tag %2$s" : "%1$s opprettet system-merkelapp %2$s",
- "You deleted system tag %2$s" : "Du slettet system merkelappen %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} opprettet system-merkelapp {systemtag}",
+ "You deleted system tag %1$s" : "Du slettet system-merkelapp %1$s",
+ "You deleted system tag {systemtag}" : "Du slettet system-merkelapp {systemtag}",
"%1$s deleted system tag %2$s" : "%1$s slettet system-merkelapp %2$s",
- "You updated system tag %3$s to %2$s" : "Du oppdaterte system merkelapp %3$s til %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} slettet system-merkelapp {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Du oppdaterte system-merkelapp %2$s til %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Du oppdaterte system-merkelapp {oldsystemtag} til {newsystemtag}",
"%1$s updated system tag %3$s to %2$s" : "%1$s oppdaterte system-merkelapp %3$s til %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} oppdaterte system-merkelapp {oldsystemtag} til {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Du la til system-merkelapp %2$s til %1$s",
+ "You added system tag {systemtag} to {file}" : "Du la til system-merkelapp {systemtag} til {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s la til system-merkelapp %3$s til %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} la til system-merkelapp {systemtag} til {file}",
+ "You removed system tag %2$s from %1$s" : "Du fjernet system-merkelapp %2$s fra %1$s",
+ "You removed system tag {systemtag} from {file}" : "Du fjernet system-merkelapp {systemtag} fra {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s fjernet system-merkelapp %3$s fra %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} fjernet system-merkelapp {systemtag} fra {file}",
"%s (restricted)" : "%s (begrenset)",
"%s (invisible)" : "%s (usynlig)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>System-merkelapper</strong> for en fil er endret",
"Collaborative tags" : "Felles merkelapper",
"Name" : "Navn",
"Delete" : "Slett",
@@ -31,14 +50,16 @@
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
"Size" : "Størrelse",
"Modified" : "Endret",
- "You assigned system tag %3$s" : "Du tildelte system merkelappen %3$s",
+ "You assigned system tag %3$s" : "Du tildelte system-merkelappen %3$s",
"%1$s assigned system tag %3$s" : "%1$s festet system-merkelapp %3$s",
- "You unassigned system tag %3$s" : "Du tildelte system merkelappen %3$s",
+ "You unassigned system tag %3$s" : "Du tildelte system-merkelappen %3$s",
"%1$s unassigned system tag %3$s" : "%1$s fjernet system-merkelapp %3$s",
- "You assigned system tag %3$s to %2$s" : "Du tildelte system merkelappen %3$s to %2$s",
+ "You created system tag %2$s" : "Du opprettet system-merkelappen %2$s",
+ "You deleted system tag %2$s" : "Du slettet system-merkelappen %2$s",
+ "You updated system tag %3$s to %2$s" : "Du oppdaterte system-merkelapp %3$s til %2$s",
+ "You assigned system tag %3$s to %2$s" : "Du tildelte system-merkelappen %3$s to %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s festet system-merkelapp %3$s på %2$s",
- "You unassigned system tag %3$s from %2$s" : "Du fjernet system merkelappen %3$s fra %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s fjernet system-merkelapp %3$s fra %2$s",
- "%s (not-assignable)" : "%s (ikke overdragbar)"
+ "You unassigned system tag %3$s from %2$s" : "Du fjernet system-merkelappen %3$s fra %2$s",
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s fjernet system-merkelapp %3$s fra %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/nl.js b/apps/systemtags/l10n/nl.js
index 9fb855151d5..69256cf8b62 100644
--- a/apps/systemtags/l10n/nl.js
+++ b/apps/systemtags/l10n/nl.js
@@ -62,7 +62,6 @@ OC.L10N.register(
"You assigned system tag %3$s to %2$s" : "Je wees systeemmarkering %3$s aan %2$s toe",
"%1$s assigned system tag %3$s to %2$s" : "%1$s wees systeemmarkering %3$s aan %2$s toe",
"You unassigned system tag %3$s from %2$s" : "Je maakte de toewijzing van systeem markering %3$s van %2$s ongedaan",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s verwijderde systeemmarkering %3$s van %2$s",
- "%s (not-assignable)" : "%s (niet-toewijsbaar)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s verwijderde systeemmarkering %3$s van %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/nl.json b/apps/systemtags/l10n/nl.json
index 2cdffb4e5fb..1f024aad6b7 100644
--- a/apps/systemtags/l10n/nl.json
+++ b/apps/systemtags/l10n/nl.json
@@ -60,7 +60,6 @@
"You assigned system tag %3$s to %2$s" : "Je wees systeemmarkering %3$s aan %2$s toe",
"%1$s assigned system tag %3$s to %2$s" : "%1$s wees systeemmarkering %3$s aan %2$s toe",
"You unassigned system tag %3$s from %2$s" : "Je maakte de toewijzing van systeem markering %3$s van %2$s ongedaan",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s verwijderde systeemmarkering %3$s van %2$s",
- "%s (not-assignable)" : "%s (niet-toewijsbaar)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s verwijderde systeemmarkering %3$s van %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/pt_BR.js b/apps/systemtags/l10n/pt_BR.js
index 365ecf3ca57..0d556a9ec52 100644
--- a/apps/systemtags/l10n/pt_BR.js
+++ b/apps/systemtags/l10n/pt_BR.js
@@ -62,7 +62,6 @@ OC.L10N.register(
"You assigned system tag %3$s to %2$s" : "Você atribuiu a etiqueta do sistema %3$s para %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s etiqueta de sistema atribuída %3$s para %2$s",
"You unassigned system tag %3$s from %2$s" : "Você eliminou a atribuição da etiqueta do sistema %3$s de %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s etiqueta de sistema não atribuída %3$s de %2$s",
- "%s (not-assignable)" : "%s (não atribuível)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s etiqueta de sistema não atribuída %3$s de %2$s"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/systemtags/l10n/pt_BR.json b/apps/systemtags/l10n/pt_BR.json
index 26694d202e1..fcef1a22495 100644
--- a/apps/systemtags/l10n/pt_BR.json
+++ b/apps/systemtags/l10n/pt_BR.json
@@ -60,7 +60,6 @@
"You assigned system tag %3$s to %2$s" : "Você atribuiu a etiqueta do sistema %3$s para %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s etiqueta de sistema atribuída %3$s para %2$s",
"You unassigned system tag %3$s from %2$s" : "Você eliminou a atribuição da etiqueta do sistema %3$s de %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s etiqueta de sistema não atribuída %3$s de %2$s",
- "%s (not-assignable)" : "%s (não atribuível)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s etiqueta de sistema não atribuída %3$s de %2$s"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/ru.js b/apps/systemtags/l10n/ru.js
index bd9385d0bf2..247d6345c3d 100644
--- a/apps/systemtags/l10n/ru.js
+++ b/apps/systemtags/l10n/ru.js
@@ -7,19 +7,40 @@ OC.L10N.register(
"Select tag…" : "Выбрать метку...",
"Tagged files" : "Файлы с метками",
"Select tags to filter by" : "Выберите метки для фильтра",
+ "No tags found" : "Метки не найдены",
"Please select tags to filter by" : "Выберите метки для фильтра",
"No files found for the selected tags" : "Для выбранных меток файлов не найдено",
- "<strong>System tags</strong> for a file have been modified" : "<strong>Системные метки</strong> файла были изменены",
- "You removed system tag %3$s" : "Вы удалили системную метку %3$s",
- "%1$s removed system tag %3$s" : "%1$s удалил системную метку %3$s",
- "You created system tag %2$s" : "Вы создали системную метку %2$s",
+ "Added system tag %1$s" : "Добавлена системная метка %1$s",
+ "Added system tag {systemtag}" : "Добавлена системная метка {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s добавил системную метку %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} добавил системную метку {systemtag}",
+ "Removed system tag %1$s" : "Убрана системная метка %1$s",
+ "Removed system tag {systemtag}" : "Убрана системная метка {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s удалил системную метку %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} удалили системную метку {systemtag}",
+ "You created system tag %1$s" : "Вы создали системную метку %1$s",
+ "You created system tag {systemtag}" : "Вы создали системную метку {systemtag}",
"%1$s created system tag %2$s" : "%1$s создал системную метку %2$s",
- "You deleted system tag %2$s" : "Вы удалили системную метку %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} создал системную метку {systemtag}",
+ "You deleted system tag %1$s" : "Вы удалили системную метку %1$s",
+ "You deleted system tag {systemtag}" : "Вы удалили системную метку {systemtag}",
"%1$s deleted system tag %2$s" : "%1$s удалил системную метку %2$s",
- "You updated system tag %3$s to %2$s" : "Вы обновили системную метку %3$s на %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} удалил системную метку {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Вы обновили системную метку с %2$s на %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Вы обновили системную метку с {oldsystemtag} на {newsystemtag}",
"%1$s updated system tag %3$s to %2$s" : "%1$s обновил системную метку %3$s для %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} обновил системную метку с {oldsystemtag} на {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Вы добавили системную метку %2$s к %1$s",
+ "You added system tag {systemtag} to {file}" : "Вы добавили системную метку {systemtag} к {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s добавил системную метку %3$s к %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} добавил системную метку {systemtag} к {file}",
+ "You removed system tag %2$s from %1$s" : "Вы удалили системную метку %2$s из %1$s",
+ "You removed system tag {systemtag} from {file}" : "Вы удалили системную метку {systemtag} из {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s удалил системную метку %3$s из %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} удалил системную метку {systemtag} из {file}",
"%s (restricted)" : "%s (ограничено)",
"%s (invisible)" : "%s (невидимые)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>Системные метки</strong> файла были изменены",
"Collaborative tags" : "Совместные метки",
"Name" : "Имя",
"Delete" : "Удалить",
@@ -35,10 +56,12 @@ OC.L10N.register(
"%1$s assigned system tag %3$s" : "%1$s назначил системную метку %3$s",
"You unassigned system tag %3$s" : "Вы убрали системную метку %3$s",
"%1$s unassigned system tag %3$s" : "%1$s убрал системную метку %3$s",
+ "You created system tag %2$s" : "Вы создали системную метку %2$s",
+ "You deleted system tag %2$s" : "Вы удалили системную метку %2$s",
+ "You updated system tag %3$s to %2$s" : "Вы обновили системную метку %3$s на %2$s",
"You assigned system tag %3$s to %2$s" : "Вы назначили системную метку %3$s на %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s назначил системную метку %3$s для %2$s",
"You unassigned system tag %3$s from %2$s" : "Вы назначили системную метку %3$s из %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s убрал системную метку %3$s с %2$s",
- "%s (not-assignable)" : "%s (not-assignable)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s убрал системную метку %3$s с %2$s"
},
"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/systemtags/l10n/ru.json b/apps/systemtags/l10n/ru.json
index 65ada9bbfb3..1a41f38126b 100644
--- a/apps/systemtags/l10n/ru.json
+++ b/apps/systemtags/l10n/ru.json
@@ -5,19 +5,40 @@
"Select tag…" : "Выбрать метку...",
"Tagged files" : "Файлы с метками",
"Select tags to filter by" : "Выберите метки для фильтра",
+ "No tags found" : "Метки не найдены",
"Please select tags to filter by" : "Выберите метки для фильтра",
"No files found for the selected tags" : "Для выбранных меток файлов не найдено",
- "<strong>System tags</strong> for a file have been modified" : "<strong>Системные метки</strong> файла были изменены",
- "You removed system tag %3$s" : "Вы удалили системную метку %3$s",
- "%1$s removed system tag %3$s" : "%1$s удалил системную метку %3$s",
- "You created system tag %2$s" : "Вы создали системную метку %2$s",
+ "Added system tag %1$s" : "Добавлена системная метка %1$s",
+ "Added system tag {systemtag}" : "Добавлена системная метка {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s добавил системную метку %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} добавил системную метку {systemtag}",
+ "Removed system tag %1$s" : "Убрана системная метка %1$s",
+ "Removed system tag {systemtag}" : "Убрана системная метка {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s удалил системную метку %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} удалили системную метку {systemtag}",
+ "You created system tag %1$s" : "Вы создали системную метку %1$s",
+ "You created system tag {systemtag}" : "Вы создали системную метку {systemtag}",
"%1$s created system tag %2$s" : "%1$s создал системную метку %2$s",
- "You deleted system tag %2$s" : "Вы удалили системную метку %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} создал системную метку {systemtag}",
+ "You deleted system tag %1$s" : "Вы удалили системную метку %1$s",
+ "You deleted system tag {systemtag}" : "Вы удалили системную метку {systemtag}",
"%1$s deleted system tag %2$s" : "%1$s удалил системную метку %2$s",
- "You updated system tag %3$s to %2$s" : "Вы обновили системную метку %3$s на %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} удалил системную метку {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Вы обновили системную метку с %2$s на %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Вы обновили системную метку с {oldsystemtag} на {newsystemtag}",
"%1$s updated system tag %3$s to %2$s" : "%1$s обновил системную метку %3$s для %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} обновил системную метку с {oldsystemtag} на {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Вы добавили системную метку %2$s к %1$s",
+ "You added system tag {systemtag} to {file}" : "Вы добавили системную метку {systemtag} к {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s добавил системную метку %3$s к %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} добавил системную метку {systemtag} к {file}",
+ "You removed system tag %2$s from %1$s" : "Вы удалили системную метку %2$s из %1$s",
+ "You removed system tag {systemtag} from {file}" : "Вы удалили системную метку {systemtag} из {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s удалил системную метку %3$s из %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} удалил системную метку {systemtag} из {file}",
"%s (restricted)" : "%s (ограничено)",
"%s (invisible)" : "%s (невидимые)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>Системные метки</strong> файла были изменены",
"Collaborative tags" : "Совместные метки",
"Name" : "Имя",
"Delete" : "Удалить",
@@ -33,10 +54,12 @@
"%1$s assigned system tag %3$s" : "%1$s назначил системную метку %3$s",
"You unassigned system tag %3$s" : "Вы убрали системную метку %3$s",
"%1$s unassigned system tag %3$s" : "%1$s убрал системную метку %3$s",
+ "You created system tag %2$s" : "Вы создали системную метку %2$s",
+ "You deleted system tag %2$s" : "Вы удалили системную метку %2$s",
+ "You updated system tag %3$s to %2$s" : "Вы обновили системную метку %3$s на %2$s",
"You assigned system tag %3$s to %2$s" : "Вы назначили системную метку %3$s на %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s назначил системную метку %3$s для %2$s",
"You unassigned system tag %3$s from %2$s" : "Вы назначили системную метку %3$s из %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s убрал системную метку %3$s с %2$s",
- "%s (not-assignable)" : "%s (not-assignable)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s убрал системную метку %3$s с %2$s"
},"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/systemtags/l10n/sq.js b/apps/systemtags/l10n/sq.js
index 9312d671bd1..3c1c1b4f039 100644
--- a/apps/systemtags/l10n/sq.js
+++ b/apps/systemtags/l10n/sq.js
@@ -2,31 +2,52 @@ OC.L10N.register(
"systemtags",
{
"Tags" : "Etiketa",
+ "Update" : "Përditëso",
+ "Create" : "Krijo",
+ "Select tag…" : "Përzgjidh etiketën...",
"Tagged files" : "Kartela të etiketuara",
"Select tags to filter by" : "Përzgjidhni etiketa sipas të cilat të bëhet filtrimi",
+ "No tags found" : "Asnjë etiket nuk u gjet",
"Please select tags to filter by" : "Ju lutemi, përzgjidhni etiketa sipas të cilat të bëhet filtrimi",
"No files found for the selected tags" : "S’u gjetën kartela për etiketat e përzgjedhura",
+ "Added system tag %1$s" : "U shtua etiketa %1$s e sistemit ",
+ "Added system tag {systemtag}" : "Tagu i shtuar i sistemit{systemtag}",
+ "%1$s added system tag %2$s" : "%1$s shtoi etiketën %2$s të sistemit ",
+ "{actor} added system tag {systemtag}" : "{actor} shtoi etiketën e sistemit {systemtag}",
+ "Removed system tag %1$s" : "Hoqi etiketën %1$s të sistemit ",
+ "Removed system tag {systemtag}" : "Hoqi etiketën e sistemit {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s hoqi etiketën %2$s të sistemit ",
+ "{actor} removed system tag {systemtag}" : "{actor} hoqi etiketën e sistemit {systemtag}",
+ "You created system tag %1$s" : "Ju krijuat etiketën %1$s të sistemit",
+ "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s",
+ "You deleted system tag %1$s" : "Ju fshit etiketën %1$s të sistemit",
+ "You deleted system tag {systemtag}" : "Ju fshit etiketën {systemtag} të sistemit",
+ "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} fshiu etiketën {systemtag} të sistemit",
+ "You updated system tag %2$s to %1$s" : "Ju përditësuat etiketën e sistemit nga %2$s në %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Ju përditësuat etiketën e sistemit nga {oldsystemtag} në {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s",
+ "You added system tag %2$s to %1$s" : "Ju shtuat tagun e sistemit%2$s në %1$s",
+ "You added system tag {systemtag} to {file}" : "Ju shtuat tagun e sistemit{systemtag} në{file}",
+ "You removed system tag {systemtag} from {file}" : "Hoqët etiketën e sistemit {systemtag} nga {file}",
+ "%s (restricted)" : "%s (e kufizuar)",
+ "%s (invisible)" : "%s (e padukshme)",
"<strong>System tags</strong> for a file have been modified" : "U ndryshyan <strong>etiketa sistemi</strong>për një kartelë",
+ "Name" : "Emër",
+ "No files in here" : "S’ka kartela këtu",
+ "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
+ "Size" : "Madhësi",
+ "Modified" : "Ndryshuar më",
"You assigned system tag %3$s" : "Caktuat etiketën e sistemit %3$s",
"%1$s assigned system tag %3$s" : "%1$s caktoi etiketën e sistemit %3$s",
"You unassigned system tag %3$s" : "I hoqët etiketën e sistemit %3$s",
"%1$s unassigned system tag %3$s" : "%1$s e hoqi %3$s si etiketë sistemi",
"You created system tag %2$s" : "Krijuat etiketën e sistemit %2$s",
- "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s",
"You deleted system tag %2$s" : "Fshitë etiketën e sistemit %2$s",
- "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s",
"You updated system tag %3$s to %2$s" : "Përditësuat etiketën e sistemit %3$s në %2$s",
- "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s",
"You assigned system tag %3$s to %2$s" : "Caktuat etiketë sistemi %3$s për %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s caktoi etiketën e sistemit %3$s si %2$s",
"You unassigned system tag %3$s from %2$s" : "I hoqët %2$s etiketën e sistemit %3$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s",
- "%s (restricted)" : "%s (e kufizuar)",
- "%s (invisible)" : "%s (e padukshme)",
- "Name" : "Emër",
- "No files in here" : "S’ka kartela këtu",
- "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
- "Size" : "Madhësi",
- "Modified" : "Ndryshuar më"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/sq.json b/apps/systemtags/l10n/sq.json
index eed88992e5a..31b30a1ffa3 100644
--- a/apps/systemtags/l10n/sq.json
+++ b/apps/systemtags/l10n/sq.json
@@ -1,30 +1,51 @@
{ "translations": {
"Tags" : "Etiketa",
+ "Update" : "Përditëso",
+ "Create" : "Krijo",
+ "Select tag…" : "Përzgjidh etiketën...",
"Tagged files" : "Kartela të etiketuara",
"Select tags to filter by" : "Përzgjidhni etiketa sipas të cilat të bëhet filtrimi",
+ "No tags found" : "Asnjë etiket nuk u gjet",
"Please select tags to filter by" : "Ju lutemi, përzgjidhni etiketa sipas të cilat të bëhet filtrimi",
"No files found for the selected tags" : "S’u gjetën kartela për etiketat e përzgjedhura",
+ "Added system tag %1$s" : "U shtua etiketa %1$s e sistemit ",
+ "Added system tag {systemtag}" : "Tagu i shtuar i sistemit{systemtag}",
+ "%1$s added system tag %2$s" : "%1$s shtoi etiketën %2$s të sistemit ",
+ "{actor} added system tag {systemtag}" : "{actor} shtoi etiketën e sistemit {systemtag}",
+ "Removed system tag %1$s" : "Hoqi etiketën %1$s të sistemit ",
+ "Removed system tag {systemtag}" : "Hoqi etiketën e sistemit {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s hoqi etiketën %2$s të sistemit ",
+ "{actor} removed system tag {systemtag}" : "{actor} hoqi etiketën e sistemit {systemtag}",
+ "You created system tag %1$s" : "Ju krijuat etiketën %1$s të sistemit",
+ "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s",
+ "You deleted system tag %1$s" : "Ju fshit etiketën %1$s të sistemit",
+ "You deleted system tag {systemtag}" : "Ju fshit etiketën {systemtag} të sistemit",
+ "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} fshiu etiketën {systemtag} të sistemit",
+ "You updated system tag %2$s to %1$s" : "Ju përditësuat etiketën e sistemit nga %2$s në %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Ju përditësuat etiketën e sistemit nga {oldsystemtag} në {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s",
+ "You added system tag %2$s to %1$s" : "Ju shtuat tagun e sistemit%2$s në %1$s",
+ "You added system tag {systemtag} to {file}" : "Ju shtuat tagun e sistemit{systemtag} në{file}",
+ "You removed system tag {systemtag} from {file}" : "Hoqët etiketën e sistemit {systemtag} nga {file}",
+ "%s (restricted)" : "%s (e kufizuar)",
+ "%s (invisible)" : "%s (e padukshme)",
"<strong>System tags</strong> for a file have been modified" : "U ndryshyan <strong>etiketa sistemi</strong>për një kartelë",
+ "Name" : "Emër",
+ "No files in here" : "S’ka kartela këtu",
+ "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
+ "Size" : "Madhësi",
+ "Modified" : "Ndryshuar më",
"You assigned system tag %3$s" : "Caktuat etiketën e sistemit %3$s",
"%1$s assigned system tag %3$s" : "%1$s caktoi etiketën e sistemit %3$s",
"You unassigned system tag %3$s" : "I hoqët etiketën e sistemit %3$s",
"%1$s unassigned system tag %3$s" : "%1$s e hoqi %3$s si etiketë sistemi",
"You created system tag %2$s" : "Krijuat etiketën e sistemit %2$s",
- "%1$s created system tag %2$s" : "%1$s krijoi etiketën e sistemit %2$s",
"You deleted system tag %2$s" : "Fshitë etiketën e sistemit %2$s",
- "%1$s deleted system tag %2$s" : "%1$s fshiu etiketën e sistemit %2$s",
"You updated system tag %3$s to %2$s" : "Përditësuat etiketën e sistemit %3$s në %2$s",
- "%1$s updated system tag %3$s to %2$s" : "%1$s përditësoi etiketën e sistemit %3$s si %2$s",
"You assigned system tag %3$s to %2$s" : "Caktuat etiketë sistemi %3$s për %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s caktoi etiketën e sistemit %3$s si %2$s",
"You unassigned system tag %3$s from %2$s" : "I hoqët %2$s etiketën e sistemit %3$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s",
- "%s (restricted)" : "%s (e kufizuar)",
- "%s (invisible)" : "%s (e padukshme)",
- "Name" : "Emër",
- "No files in here" : "S’ka kartela këtu",
- "No entries found in this folder" : "S’u gjetën zëra në këtë dosje",
- "Size" : "Madhësi",
- "Modified" : "Ndryshuar më"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/sv.js b/apps/systemtags/l10n/sv.js
index be11b9f9ad3..a91610dd452 100644
--- a/apps/systemtags/l10n/sv.js
+++ b/apps/systemtags/l10n/sv.js
@@ -2,31 +2,66 @@ OC.L10N.register(
"systemtags",
{
"Tags" : "Taggar",
+ "Update" : "Uppdatera",
+ "Create" : "Skapa",
+ "Select tag…" : "Välj tagg...",
"Tagged files" : "Taggade filer",
"Select tags to filter by" : "Välj taggar att filtrera med",
+ "No tags found" : "Inga taggar hittades",
"Please select tags to filter by" : "Vänligen välj taggar att filtrera med",
- "No files found for the selected tags" : "Inga filer hittade för de valda taggarna",
+ "No files found for the selected tags" : "Inga filer hittades för de valda taggarna",
+ "Added system tag %1$s" : "La till systemtagg %1$s",
+ "Added system tag {systemtag}" : "La till systemtagg {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s la till systemtagg %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} la till systemtagg {systemtag}",
+ "Removed system tag %1$s" : "Tog bort systemtagg %1$s",
+ "Removed system tag {systemtag}" : "Tog bort systemtagg {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s tog bort systemtagg %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} tog bort systemtagg {systemtag}",
+ "You created system tag %1$s" : "Du skapade systemtagg %1$s",
+ "You created system tag {systemtag}" : "Du skapade systemtagg {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s skapade systemtagg %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} skapade systemtagg {systemtag}",
+ "You deleted system tag %1$s" : "Du raderade systemtagg %1$s",
+ "You deleted system tag {systemtag}" : "Du raderade systemtagg {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s raderade systemtagg %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} raderade systemtagg {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Du uppdaterade systemtagg %2$s till %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Du uppdaterade systemtagg {oldsystemtag} till {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s uppdaterade systemtagg %3$s till %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} uppdaterade systemtagg {oldsystemtag} till {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Du la till systemtagg %2$s på %1$s",
+ "You added system tag {systemtag} to {file}" : "Du la till systemtagg {systemtag} på {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s la till systemtagg %3$s på %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} la till systemtagg {systemtag} på {file}",
+ "You removed system tag %2$s from %1$s" : "Du tog bort systemtagg %2$s från %1$s",
+ "You removed system tag {systemtag} from {file}" : "Du tog bort systemtagg {systemtag} från {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s tog bort systemtagg %3$s från %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} tog bort systemtagg {systemtag} från {file}",
+ "%s (restricted)" : "%s (begränsad)",
+ "%s (invisible)" : "%s (osynlig)",
"<strong>System tags</strong> for a file have been modified" : "<strong>Systemtaggar</strong> för en fil har blivit ändrade",
+ "Collaborative tags" : "Samverkande taggar",
+ "Name" : "Namn",
+ "Delete" : "Radera",
+ "Public" : "Offentlig",
+ "Restricted" : "Begränsad",
+ "Invisible" : "Osynlig",
+ "Reset" : "Återställ",
+ "No files in here" : "Inga filer här inne",
+ "No entries found in this folder" : "Ingenting hittades i denna mapp",
+ "Size" : "Storlek",
+ "Modified" : "Modifierad",
"You assigned system tag %3$s" : "Du tilldelade systemtagg %3$s",
"%1$s assigned system tag %3$s" : "%1$s blev tilldelad systemtagg %3$s",
"You unassigned system tag %3$s" : "Du tog bort tilldelning av systemtag %3$s",
"%1$s unassigned system tag %3$s" : "%1$s tog bort tilldelad systemtagg %3$s",
"You created system tag %2$s" : "Du skapade systemtagg %2$s",
- "%1$s created system tag %2$s" : "%1$s skapade systemtagg %2$s",
- "You deleted system tag %2$s" : "Du tog bort systemtagg %2$s",
- "%1$s deleted system tag %2$s" : "%1$s raderade systemtagg %2$s",
+ "You deleted system tag %2$s" : "Du raderade systemtagg %2$s",
"You updated system tag %3$s to %2$s" : "Du uppdaterade systemtagg %3$s till %2$s",
- "%1$s updated system tag %3$s to %2$s" : "%1$s uppdaterade systemtagg %3$s till %2$s",
"You assigned system tag %3$s to %2$s" : "Du tilldelade systemtagg %3$s till %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s tilldelade systemtagg %3$s till %2$s",
"You unassigned system tag %3$s from %2$s" : "Du tog bort tilldelad systemtagg %3$s från %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s tog bort tilldelad systemtagg %3$s från %2$s",
- "%s (restricted)" : "%s (begränsad)",
- "%s (invisible)" : "%s (osynlig)",
- "Name" : "Namn",
- "No files in here" : "Inga filer kunde hittas",
- "No entries found in this folder" : "nga Filer hittades i denna mapp",
- "Size" : "Storlek",
- "Modified" : "Ändrad"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s tog bort tilldelad systemtagg %3$s från %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/sv.json b/apps/systemtags/l10n/sv.json
index 214bd3b100a..df64bff3ffe 100644
--- a/apps/systemtags/l10n/sv.json
+++ b/apps/systemtags/l10n/sv.json
@@ -1,30 +1,65 @@
{ "translations": {
"Tags" : "Taggar",
+ "Update" : "Uppdatera",
+ "Create" : "Skapa",
+ "Select tag…" : "Välj tagg...",
"Tagged files" : "Taggade filer",
"Select tags to filter by" : "Välj taggar att filtrera med",
+ "No tags found" : "Inga taggar hittades",
"Please select tags to filter by" : "Vänligen välj taggar att filtrera med",
- "No files found for the selected tags" : "Inga filer hittade för de valda taggarna",
+ "No files found for the selected tags" : "Inga filer hittades för de valda taggarna",
+ "Added system tag %1$s" : "La till systemtagg %1$s",
+ "Added system tag {systemtag}" : "La till systemtagg {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s la till systemtagg %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} la till systemtagg {systemtag}",
+ "Removed system tag %1$s" : "Tog bort systemtagg %1$s",
+ "Removed system tag {systemtag}" : "Tog bort systemtagg {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s tog bort systemtagg %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} tog bort systemtagg {systemtag}",
+ "You created system tag %1$s" : "Du skapade systemtagg %1$s",
+ "You created system tag {systemtag}" : "Du skapade systemtagg {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s skapade systemtagg %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} skapade systemtagg {systemtag}",
+ "You deleted system tag %1$s" : "Du raderade systemtagg %1$s",
+ "You deleted system tag {systemtag}" : "Du raderade systemtagg {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s raderade systemtagg %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} raderade systemtagg {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Du uppdaterade systemtagg %2$s till %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Du uppdaterade systemtagg {oldsystemtag} till {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s uppdaterade systemtagg %3$s till %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} uppdaterade systemtagg {oldsystemtag} till {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Du la till systemtagg %2$s på %1$s",
+ "You added system tag {systemtag} to {file}" : "Du la till systemtagg {systemtag} på {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s la till systemtagg %3$s på %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} la till systemtagg {systemtag} på {file}",
+ "You removed system tag %2$s from %1$s" : "Du tog bort systemtagg %2$s från %1$s",
+ "You removed system tag {systemtag} from {file}" : "Du tog bort systemtagg {systemtag} från {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s tog bort systemtagg %3$s från %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} tog bort systemtagg {systemtag} från {file}",
+ "%s (restricted)" : "%s (begränsad)",
+ "%s (invisible)" : "%s (osynlig)",
"<strong>System tags</strong> for a file have been modified" : "<strong>Systemtaggar</strong> för en fil har blivit ändrade",
+ "Collaborative tags" : "Samverkande taggar",
+ "Name" : "Namn",
+ "Delete" : "Radera",
+ "Public" : "Offentlig",
+ "Restricted" : "Begränsad",
+ "Invisible" : "Osynlig",
+ "Reset" : "Återställ",
+ "No files in here" : "Inga filer här inne",
+ "No entries found in this folder" : "Ingenting hittades i denna mapp",
+ "Size" : "Storlek",
+ "Modified" : "Modifierad",
"You assigned system tag %3$s" : "Du tilldelade systemtagg %3$s",
"%1$s assigned system tag %3$s" : "%1$s blev tilldelad systemtagg %3$s",
"You unassigned system tag %3$s" : "Du tog bort tilldelning av systemtag %3$s",
"%1$s unassigned system tag %3$s" : "%1$s tog bort tilldelad systemtagg %3$s",
"You created system tag %2$s" : "Du skapade systemtagg %2$s",
- "%1$s created system tag %2$s" : "%1$s skapade systemtagg %2$s",
- "You deleted system tag %2$s" : "Du tog bort systemtagg %2$s",
- "%1$s deleted system tag %2$s" : "%1$s raderade systemtagg %2$s",
+ "You deleted system tag %2$s" : "Du raderade systemtagg %2$s",
"You updated system tag %3$s to %2$s" : "Du uppdaterade systemtagg %3$s till %2$s",
- "%1$s updated system tag %3$s to %2$s" : "%1$s uppdaterade systemtagg %3$s till %2$s",
"You assigned system tag %3$s to %2$s" : "Du tilldelade systemtagg %3$s till %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s tilldelade systemtagg %3$s till %2$s",
"You unassigned system tag %3$s from %2$s" : "Du tog bort tilldelad systemtagg %3$s från %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s tog bort tilldelad systemtagg %3$s från %2$s",
- "%s (restricted)" : "%s (begränsad)",
- "%s (invisible)" : "%s (osynlig)",
- "Name" : "Namn",
- "No files in here" : "Inga filer kunde hittas",
- "No entries found in this folder" : "nga Filer hittades i denna mapp",
- "Size" : "Storlek",
- "Modified" : "Ändrad"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s tog bort tilldelad systemtagg %3$s från %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/testing/appinfo/app.php b/apps/testing/appinfo/app.php
new file mode 100644
index 00000000000..402889f2674
--- /dev/null
+++ b/apps/testing/appinfo/app.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ * @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/>
+ *
+ */
+
+$app = new \OCA\Testing\Application();
+
diff --git a/apps/testing/appinfo/info.xml b/apps/testing/appinfo/info.xml
index 41b07447d55..caefd1709c5 100644
--- a/apps/testing/appinfo/info.xml
+++ b/apps/testing/appinfo/info.xml
@@ -5,8 +5,11 @@
<description>This app is only for testing! It is dangerous to have it enabled in a live instance</description>
<licence>AGPL</licence>
<author>Joas Schilling</author>
- <version>1.1.0</version>
+ <version>1.2.0</version>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
+ <types>
+ <authentication/>
+ </types>
</info>
diff --git a/apps/testing/lib/AlternativeHomeUserBackend.php b/apps/testing/lib/AlternativeHomeUserBackend.php
new file mode 100644
index 00000000000..1e86b0bc555
--- /dev/null
+++ b/apps/testing/lib/AlternativeHomeUserBackend.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ * @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/>
+ *
+ */
+
+namespace OCA\Testing;
+
+/**
+ * Alternative home user backend.
+ *
+ * It returns a md5 of the home folder instead of the user id.
+ * To configure, need to add this in config.php:
+ * 'user_backends' => [
+ * 'default' => false, [
+ * 'class' => '\\OCA\\Testing\\AlternativeHomeUserBackend',
+ * 'arguments' => [],
+ * ],
+ * ]
+ */
+class AlternativeHomeUserBackend extends \OC\User\Database {
+ public function __construct() {
+ parent::__construct();
+ }
+ /**
+ * get the user's home directory
+ * @param string $uid the username
+ * @return string|false
+ */
+ public function getHome($uid) {
+ if ($this->userExists($uid)) {
+ // workaround to avoid killing the admin
+ if ($uid !== 'admin') {
+ $uid = md5($uid);
+ }
+ return \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/' . $uid;
+ }
+
+ return false;
+ }
+}
diff --git a/apps/testing/lib/Application.php b/apps/testing/lib/Application.php
new file mode 100644
index 00000000000..8f42d0442dd
--- /dev/null
+++ b/apps/testing/lib/Application.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, ownCloud GmbH
+ * @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/>
+ *
+ */
+
+namespace OCA\Testing;
+
+use OCP\AppFramework\App;
+use OCA\Testing\AlternativeHomeUserBackend;
+
+class Application extends App {
+ public function __construct (array $urlParams = array()) {
+ $appName = 'testing';
+ parent::__construct($appName, $urlParams);
+
+ $c = $this->getContainer();
+ $config = $c->getServer()->getConfig();
+ if ($config->getAppValue($appName, 'enable_alt_user_backend', 'no') === 'yes') {
+ $userManager = $c->getServer()->getUserManager();
+
+ // replace all user backends with this one
+ $userManager->clearBackends();
+ $userManager->registerBackend($c->query(AlternativeHomeUserBackend::class));
+ }
+ }
+}
diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml
index 3a8867dc6f4..9ded5c89b87 100644
--- a/apps/theming/appinfo/info.xml
+++ b/apps/theming/appinfo/info.xml
@@ -5,12 +5,12 @@
<description>Adjust the Nextcloud theme</description>
<licence>AGPL</licence>
<author>Nextcloud</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>Theming</namespace>
<category>other</category>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
diff --git a/apps/theming/img/app-dark.svg b/apps/theming/img/app-dark.svg
new file mode 100644
index 00000000000..adf97966c41
--- /dev/null
+++ b/apps/theming/img/app-dark.svg
@@ -0,0 +1 @@
+<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M10.707 11.412l-.587-.587-.03-.03a.513.513 0 0 1-.074-.526L13.07 3.4l-1.5-1.498-.15.15-.708-.706.505-.505a.538.538 0 0 1 .224-.128c.04-.01.05-.01.087-.016h.087c.04.006.05.006.086.016.072.02.134.055.192.1.74.676 1.42 1.415 2.127 2.124a.503.503 0 0 1 .103.556l-3.053 6.87.344.343.49-.49 3.01 3.01a1.192 1.192 0 0 1-1.685 1.686l-3.012-3.01.49-.488zm-.533-10.217a.986.986 0 0 0-1.396 0l-7.582 7.58a.99.99 0 0 0 0 1.398l1.397 1.396a.986.986 0 0 0 1.396 0l7.58-7.583a.988.988 0 0 0 0-1.396l-1.396-1.395z" fill="#000"/></svg>
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index 73e3ed3a4b4..24ac1c7d8d5 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -374,6 +374,7 @@ class ThemingController extends Controller {
';
$responseCss .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$responseCss .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $responseCss .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
}
$logo = $this->config->getAppValue($this->appName, 'logoMime');
@@ -445,8 +446,7 @@ class ThemingController extends Controller {
cacheBuster: ' . json_encode($cacheBusterValue). '
};
})();';
- $response = new Http\DataDisplayResponse($responseJS);
- $response->addHeader('Content-type', 'text/javascript');
+ $response = new DataDownloadResponse($responseJS, 'javascript', 'text/javascript');
$response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$response->addHeader('Pragma', 'cache');
$response->cacheFor(3600);
diff --git a/apps/theming/lib/Settings/Section.php b/apps/theming/lib/Settings/Section.php
index cffbb8901c8..6078743dead 100644
--- a/apps/theming/lib/Settings/Section.php
+++ b/apps/theming/lib/Settings/Section.php
@@ -24,13 +24,21 @@
namespace OCA\Theming\Settings;
use OCP\IL10N;
-use OCP\Settings\ISection;
+use OCP\IURLGenerator;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $url;
- public function __construct(IL10N $l) {
+ /**
+ * @param IURLGenerator $url
+ * @param IL10N $l
+ */
+ public function __construct(IURLGenerator $url, IL10N $l) {
+ $this->url = $url;
$this->l = $l;
}
@@ -64,4 +72,11 @@ class Section implements ISection {
public function getPriority() {
return 30;
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return $this->url->imagePath('theming', 'app-dark.svg');
+ }
}
diff --git a/apps/theming/lib/Util.php b/apps/theming/lib/Util.php
index 9fea56838ad..5c9ccb3baa6 100644
--- a/apps/theming/lib/Util.php
+++ b/apps/theming/lib/Util.php
@@ -128,7 +128,7 @@ class Util {
} catch (AppPathNotFoundException $e) {}
if($this->config->getAppValue('theming', 'logoMime', '') !== '' && $this->rootFolder->nodeExists('/themedinstancelogo')) {
- return $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/') . '/themedinstancelogo';
+ return $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/themedinstancelogo';
}
return \OC::$SERVERROOT . '/core/img/logo.svg';
}
diff --git a/apps/theming/templates/settings-admin.php b/apps/theming/templates/settings-admin.php
index 013b3bcf34f..920b4a007da 100644
--- a/apps/theming/templates/settings-admin.php
+++ b/apps/theming/templates/settings-admin.php
@@ -74,7 +74,7 @@ style('theming', 'settings-admin');
<div>
<form class="uploadButton inlineblock" method="post" action="<?php p($_['uploadLogoRoute']) ?>">
<input type="hidden" id="current-backgroundMime" name="current-backgroundMime" value="<?php p($_['backgroundMime']); ?>" />
- <label for="upload-login-background"><span><?php p($l->t('Log in image')) ?></span></label>
+ <label for="upload-login-background"><span><?php p($l->t('Login image')) ?></span></label>
<input id="upload-login-background" class="upload-logo-field" name="upload-login-background" type="file">
<label for="upload-login-background" class="button icon-upload svg" id="upload-login-background" title="<?php p($l->t("Upload new login background")) ?>"></label>
<div data-setting="backgroundMime" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></div>
diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php
index d42e5afb245..97a5e985860 100644
--- a/apps/theming/tests/Controller/ThemingControllerTest.php
+++ b/apps/theming/tests/Controller/ThemingControllerTest.php
@@ -487,6 +487,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= '.nc-theming-contrast {color: #ffffff}' . "\n";
$expectedData .= '.icon-file,.icon-filetype-text {' .
'background-image: url(\'./img/core/filetypes/text.svg?v=0\');' . "}\n" .
@@ -581,6 +582,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= '#header .header-appname, #expandDisplayName { color: #000000; }' . "\n";
$expectedData .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n";
$expectedData .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n";
@@ -768,6 +770,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= sprintf(
'#header .logo {' .
'background-image: url(\'./logo?v=0\');' .
@@ -879,6 +882,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= sprintf(
'#header .logo {' .
'background-image: url(\'./logo?v=0\');' .
@@ -910,7 +914,6 @@ class ThemingControllerTest extends TestCase {
'background-image: url(\'./img/core/filetypes/folder.svg?v=0\');' . "}\n" .
'.icon-filetype-folder-drag-accept {' .
'background-image: url(\'./img/core/filetypes/folder-drag-accept.svg?v=0\')!important;' . "}\n";
- $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css');
$expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css');
$expected->cacheFor(3600);
@@ -948,8 +951,7 @@ class ThemingControllerTest extends TestCase {
cacheBuster: null
};
})();';
- $expected = new Http\DataDisplayResponse($expectedResponse);
- $expected->addHeader("Content-type","text/javascript");
+ $expected = new Http\DataDownloadResponse($expectedResponse, 'javascript', 'text/javascript');
$expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$expected->addHeader('Pragma', 'cache');
$expected->cacheFor(3600);
@@ -983,8 +985,7 @@ class ThemingControllerTest extends TestCase {
cacheBuster: null
};
})();';
- $expected = new Http\DataDisplayResponse($expectedResponse);
- $expected->addHeader("Content-type","text/javascript");
+ $expected = new Http\DataDownloadResponse($expectedResponse, 'javascript', 'text/javascript');
$expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$expected->addHeader('Pragma', 'cache');
$expected->cacheFor(3600);
diff --git a/apps/theming/tests/Settings/SectionTest.php b/apps/theming/tests/Settings/SectionTest.php
index 3a3a4375236..90d1854aebf 100644
--- a/apps/theming/tests/Settings/SectionTest.php
+++ b/apps/theming/tests/Settings/SectionTest.php
@@ -25,19 +25,24 @@ namespace OCA\Theming\Tests\Settings;
use OCA\Theming\Settings\Section;
use OCP\IL10N;
+use OCP\IURLGenerator;
use Test\TestCase;
class SectionTest extends TestCase {
- /** @var IL10N */
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ private $url;
+ /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
private $l;
/** @var Section */
private $section;
public function setUp() {
parent::setUp();
- $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock();
+ $this->url = $this->createMock(IURLGenerator::class);
+ $this->l = $this->createMock(IL10N::class);
$this->section = new Section(
+ $this->url,
$this->l
);
}
@@ -59,4 +64,13 @@ class SectionTest extends TestCase {
public function testGetPriority() {
$this->assertSame(30, $this->section->getPriority());
}
+
+ public function testGetIcon() {
+ $this->url->expects($this->once())
+ ->method('imagePath')
+ ->with('theming', 'app-dark.svg')
+ ->willReturn('icon');
+
+ $this->assertSame('icon', $this->section->getIcon());
+ }
}
diff --git a/apps/twofactor_backupcodes/appinfo/app.php b/apps/twofactor_backupcodes/appinfo/app.php
index 31f9b6b8eae..0cb10531360 100644
--- a/apps/twofactor_backupcodes/appinfo/app.php
+++ b/apps/twofactor_backupcodes/appinfo/app.php
@@ -19,4 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+
+// @codeCoverageIgnoreStart
OC_App::registerPersonal('twofactor_backupcodes', 'settings/personal');
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/appinfo/info.xml b/apps/twofactor_backupcodes/appinfo/info.xml
index d5dd3f4db9e..42985d15481 100644
--- a/apps/twofactor_backupcodes/appinfo/info.xml
+++ b/apps/twofactor_backupcodes/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>A two-factor auth backup codes provider</description>
<licence>agpl</licence>
<author>Christoph Wurst</author>
- <version>1.0.0</version>
+ <version>1.1.0</version>
<namespace>TwoFactorBackupCodes</namespace>
<category>other</category>
@@ -14,6 +14,19 @@
</two-factor-providers>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
+
+ <activity>
+ <filters>
+ <filter>OCA\TwoFactorBackupCodes\Activity\GenericFilter</filter>
+ </filters>
+ <settings>
+ <setting>OCA\TwoFactorBackupCodes\Activity\GenericSetting</setting>
+ </settings>
+ <providers>
+ <provider>OCA\TwoFactorBackupCodes\Activity\GenericProvider</provider>
+ <provider>OCA\TwoFactorBackupCodes\Activity\Provider</provider>
+ </providers>
+ </activity>
</info>
diff --git a/apps/twofactor_backupcodes/appinfo/routes.php b/apps/twofactor_backupcodes/appinfo/routes.php
index f2af12e9b45..0119bfd0b08 100644
--- a/apps/twofactor_backupcodes/appinfo/routes.php
+++ b/apps/twofactor_backupcodes/appinfo/routes.php
@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+// @codeCoverageIgnoreStart
return [
'routes' => [
[
@@ -33,3 +34,4 @@ return [
],
]
];
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/l10n/cs_CZ.js b/apps/twofactor_backupcodes/l10n/cs_CZ.js
index 346fc3ab1ca..126b5b20ec1 100644
--- a/apps/twofactor_backupcodes/l10n/cs_CZ.js
+++ b/apps/twofactor_backupcodes/l10n/cs_CZ.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Pokud vytvoříte nové záložní kódy, staré budou automaticky zrušeny.",
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
"Nextcloud backup codes" : "Nextcloud záložní kódy",
+ "Two-factor authentication" : "Dvoufázová autentizace",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Úspěšně jste se přihlásil(a) pomocí dvoufázové autentizace (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Pokus o přihlášení s použitím dvoufázové autentizace selhal (%1$s)",
+ "You created two-factor backup codes for your account" : "Vytvořil(a) jste záložní kódy dvoufázové autentizace pro váš účet",
"Backup code" : "Záložní kód",
"Use backup code" : "Použít záložní kód",
"Second-factor backup codes" : "Dvoufázové záložní kódy"
diff --git a/apps/twofactor_backupcodes/l10n/cs_CZ.json b/apps/twofactor_backupcodes/l10n/cs_CZ.json
index a397a5ba8db..98005f8e6ee 100644
--- a/apps/twofactor_backupcodes/l10n/cs_CZ.json
+++ b/apps/twofactor_backupcodes/l10n/cs_CZ.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Pokud vytvoříte nové záložní kódy, staré budou automaticky zrušeny.",
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
"Nextcloud backup codes" : "Nextcloud záložní kódy",
+ "Two-factor authentication" : "Dvoufázová autentizace",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Úspěšně jste se přihlásil(a) pomocí dvoufázové autentizace (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Pokus o přihlášení s použitím dvoufázové autentizace selhal (%1$s)",
+ "You created two-factor backup codes for your account" : "Vytvořil(a) jste záložní kódy dvoufázové autentizace pro váš účet",
"Backup code" : "Záložní kód",
"Use backup code" : "Použít záložní kód",
"Second-factor backup codes" : "Dvoufázové záložní kódy"
diff --git a/apps/twofactor_backupcodes/l10n/de.js b/apps/twofactor_backupcodes/l10n/de.js
index e5ca6422df6..039b8bea68b 100644
--- a/apps/twofactor_backupcodes/l10n/de.js
+++ b/apps/twofactor_backupcodes/l10n/de.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Du Backup-Codes neu generierst, werden alte automatisch ungültig.",
"An error occurred while generating your backup codes" : "Ein Fehler ist bei der Erstellung Deiner Backup-Codes aufgetreten",
"Nextcloud backup codes" : "Nextcloud-Backup-Codes",
+ "Two-factor authentication" : "Zwei-Faktor Authentifizierung",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Erfolgreich mittels Zwei-Faktorauthentifizierung angemeldet (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktorauthentifizierung gescheitert (%1$s)",
+ "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Dein Konto erstellt",
"Backup code" : "Backup-Code",
"Use backup code" : "Backup-Code verwenden",
"Second-factor backup codes" : "Zweitfaktor-Backup-Codes"
diff --git a/apps/twofactor_backupcodes/l10n/de.json b/apps/twofactor_backupcodes/l10n/de.json
index e3cdfce9d7b..6afdfa52ac4 100644
--- a/apps/twofactor_backupcodes/l10n/de.json
+++ b/apps/twofactor_backupcodes/l10n/de.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Du Backup-Codes neu generierst, werden alte automatisch ungültig.",
"An error occurred while generating your backup codes" : "Ein Fehler ist bei der Erstellung Deiner Backup-Codes aufgetreten",
"Nextcloud backup codes" : "Nextcloud-Backup-Codes",
+ "Two-factor authentication" : "Zwei-Faktor Authentifizierung",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Erfolgreich mittels Zwei-Faktorauthentifizierung angemeldet (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktorauthentifizierung gescheitert (%1$s)",
+ "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Dein Konto erstellt",
"Backup code" : "Backup-Code",
"Use backup code" : "Backup-Code verwenden",
"Second-factor backup codes" : "Zweitfaktor-Backup-Codes"
diff --git a/apps/twofactor_backupcodes/l10n/de_DE.js b/apps/twofactor_backupcodes/l10n/de_DE.js
index 2405813cca0..771051e41b8 100644
--- a/apps/twofactor_backupcodes/l10n/de_DE.js
+++ b/apps/twofactor_backupcodes/l10n/de_DE.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern werde die alten Codes automatisch ungültig.",
"An error occurred while generating your backup codes" : "Beim Erstellen Ihrer Backup-Codes ist ein Fehler aufgetreten",
"Nextcloud backup codes" : "Nextcloud Backup-Codes",
+ "Two-factor authentication" : "Zwei-Faktor Authentifizierung",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Erfolgreich mittels Zwei-Faktorauthentifizierung angemeldet (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktorauthentifizierung gescheitert (%1$s)",
+ "You created two-factor backup codes for your account" : "Sie haben Zwei-Faktor Sicherungs-Codes für Ihr Konto erstellt",
"Backup code" : "Backup-Code",
"Use backup code" : "Verwende Backup-Code",
"Second-factor backup codes" : "Zweitfaktor Backup-Codes"
diff --git a/apps/twofactor_backupcodes/l10n/de_DE.json b/apps/twofactor_backupcodes/l10n/de_DE.json
index 5bd7b6b7667..c8d3ba5a737 100644
--- a/apps/twofactor_backupcodes/l10n/de_DE.json
+++ b/apps/twofactor_backupcodes/l10n/de_DE.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern werde die alten Codes automatisch ungültig.",
"An error occurred while generating your backup codes" : "Beim Erstellen Ihrer Backup-Codes ist ein Fehler aufgetreten",
"Nextcloud backup codes" : "Nextcloud Backup-Codes",
+ "Two-factor authentication" : "Zwei-Faktor Authentifizierung",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Erfolgreich mittels Zwei-Faktorauthentifizierung angemeldet (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktorauthentifizierung gescheitert (%1$s)",
+ "You created two-factor backup codes for your account" : "Sie haben Zwei-Faktor Sicherungs-Codes für Ihr Konto erstellt",
"Backup code" : "Backup-Code",
"Use backup code" : "Verwende Backup-Code",
"Second-factor backup codes" : "Zweitfaktor Backup-Codes"
diff --git a/apps/twofactor_backupcodes/l10n/es.js b/apps/twofactor_backupcodes/l10n/es.js
index c7018056f7f..add6139bc99 100644
--- a/apps/twofactor_backupcodes/l10n/es.js
+++ b/apps/twofactor_backupcodes/l10n/es.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regenera los códigos de respaldo automaticamente invalidara los antiguos.",
"An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban los códigos de respaldo.",
"Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "Two-factor authentication" : "Autenticación en dos pasos",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Te has identificado correctamente usando la autenticación en dos pasos (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un intento de identificación usando autenticación en dos pasos ha fallado (%1$s)",
+ "You created two-factor backup codes for your account" : "Has creado códigos de respaldo de dos pasos para tu cuenta",
"Backup code" : "Código de respaldo",
"Use backup code" : "Usar código de respaldo",
"Second-factor backup codes" : "Codigo de copia de seguridad de segundo-factor"
diff --git a/apps/twofactor_backupcodes/l10n/es.json b/apps/twofactor_backupcodes/l10n/es.json
index 963aa4763e0..33b6a696ae0 100644
--- a/apps/twofactor_backupcodes/l10n/es.json
+++ b/apps/twofactor_backupcodes/l10n/es.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regenera los códigos de respaldo automaticamente invalidara los antiguos.",
"An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban los códigos de respaldo.",
"Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "Two-factor authentication" : "Autenticación en dos pasos",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Te has identificado correctamente usando la autenticación en dos pasos (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un intento de identificación usando autenticación en dos pasos ha fallado (%1$s)",
+ "You created two-factor backup codes for your account" : "Has creado códigos de respaldo de dos pasos para tu cuenta",
"Backup code" : "Código de respaldo",
"Use backup code" : "Usar código de respaldo",
"Second-factor backup codes" : "Codigo de copia de seguridad de segundo-factor"
diff --git a/apps/twofactor_backupcodes/l10n/fr.js b/apps/twofactor_backupcodes/l10n/fr.js
index 56b14ae0f6a..f046128f474 100644
--- a/apps/twofactor_backupcodes/l10n/fr.js
+++ b/apps/twofactor_backupcodes/l10n/fr.js
@@ -3,13 +3,17 @@ OC.L10N.register(
{
"Generate backup codes" : "Générer des codes de récupération",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Les codes de récupération ont été générés. {{used}} codes sur {{total}} ont été utilisés.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Voici vos codes de récupération. Veuillez les sauvegarder et/ou les imprimer car vous ne pouvez plus y avoir accès ultérieurement",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Voici vos codes de récupération. Veuillez les sauvegarder et/ou les imprimer car vous ne pourrez plus y avoir accès ultérieurement",
"Save backup codes" : "Sauvegarder les codes de récupération",
"Print backup codes" : "Imprimer les codes de récupération",
"Regenerate backup codes" : "Régénérer les codes de récupération",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vous régénérez les codes de récupération, vous invalidez automatiquement les anciens codes.",
"An error occurred while generating your backup codes" : "Une erreur est survenue lors de la génération de vos codes de récupération",
"Nextcloud backup codes" : "Codes de récupération Nextcloud",
+ "Two-factor authentication" : "Authentification à deux facteurs",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Vous avez réussi à vous connecter en utilisant l'authentification à deux facteurs (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Une tentative de connexion utilisant l'authentification à deux facteurs a échouée (%1$s)",
+ "You created two-factor backup codes for your account" : "Vous avez créé des codes de secours à deux facteurs pour votre compte",
"Backup code" : "Code de récupération",
"Use backup code" : "Utiliser un code de récupération",
"Second-factor backup codes" : "Codes de récupération pour l'authentification en deux étapes"
diff --git a/apps/twofactor_backupcodes/l10n/fr.json b/apps/twofactor_backupcodes/l10n/fr.json
index 275fbb7e2f2..6f7801119b9 100644
--- a/apps/twofactor_backupcodes/l10n/fr.json
+++ b/apps/twofactor_backupcodes/l10n/fr.json
@@ -1,13 +1,17 @@
{ "translations": {
"Generate backup codes" : "Générer des codes de récupération",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Les codes de récupération ont été générés. {{used}} codes sur {{total}} ont été utilisés.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Voici vos codes de récupération. Veuillez les sauvegarder et/ou les imprimer car vous ne pouvez plus y avoir accès ultérieurement",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Voici vos codes de récupération. Veuillez les sauvegarder et/ou les imprimer car vous ne pourrez plus y avoir accès ultérieurement",
"Save backup codes" : "Sauvegarder les codes de récupération",
"Print backup codes" : "Imprimer les codes de récupération",
"Regenerate backup codes" : "Régénérer les codes de récupération",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vous régénérez les codes de récupération, vous invalidez automatiquement les anciens codes.",
"An error occurred while generating your backup codes" : "Une erreur est survenue lors de la génération de vos codes de récupération",
"Nextcloud backup codes" : "Codes de récupération Nextcloud",
+ "Two-factor authentication" : "Authentification à deux facteurs",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Vous avez réussi à vous connecter en utilisant l'authentification à deux facteurs (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Une tentative de connexion utilisant l'authentification à deux facteurs a échouée (%1$s)",
+ "You created two-factor backup codes for your account" : "Vous avez créé des codes de secours à deux facteurs pour votre compte",
"Backup code" : "Code de récupération",
"Use backup code" : "Utiliser un code de récupération",
"Second-factor backup codes" : "Codes de récupération pour l'authentification en deux étapes"
diff --git a/apps/twofactor_backupcodes/l10n/hu_HU.js b/apps/twofactor_backupcodes/l10n/hu_HU.js
index c5e10d26f2d..af793b8fb9a 100644
--- a/apps/twofactor_backupcodes/l10n/hu_HU.js
+++ b/apps/twofactor_backupcodes/l10n/hu_HU.js
@@ -10,6 +10,7 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Ha újra generálod a biztonsági kódokat, akkor a régiek automatikusan érvénytelenítve lesznek.",
"An error occurred while generating your backup codes" : "Hiba történt a biztonsági kódok generálása közben",
"Nextcloud backup codes" : "Nextcloud biztonsági kódok",
+ "Two-factor authentication" : "Kétlépcsős hitelesítés",
"Backup code" : "Biztonsági kód",
"Use backup code" : "Biztonsági kód használata",
"Second-factor backup codes" : "Második lépcsős biztonsági kódok"
diff --git a/apps/twofactor_backupcodes/l10n/hu_HU.json b/apps/twofactor_backupcodes/l10n/hu_HU.json
index 1afa0a6ac84..acb9373df72 100644
--- a/apps/twofactor_backupcodes/l10n/hu_HU.json
+++ b/apps/twofactor_backupcodes/l10n/hu_HU.json
@@ -8,6 +8,7 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Ha újra generálod a biztonsági kódokat, akkor a régiek automatikusan érvénytelenítve lesznek.",
"An error occurred while generating your backup codes" : "Hiba történt a biztonsági kódok generálása közben",
"Nextcloud backup codes" : "Nextcloud biztonsági kódok",
+ "Two-factor authentication" : "Kétlépcsős hitelesítés",
"Backup code" : "Biztonsági kód",
"Use backup code" : "Biztonsági kód használata",
"Second-factor backup codes" : "Második lépcsős biztonsági kódok"
diff --git a/apps/twofactor_backupcodes/l10n/it.js b/apps/twofactor_backupcodes/l10n/it.js
index 400647479bd..7150d2ed427 100644
--- a/apps/twofactor_backupcodes/l10n/it.js
+++ b/apps/twofactor_backupcodes/l10n/it.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Se rigeneri i codici di backup, invaliderai automaticamente i vecchi codici.",
"An error occurred while generating your backup codes" : "Si è verificato un errore durante la generazione dei tuoi codici di backup",
"Nextcloud backup codes" : "Codici di backup di Nextcloud",
+ "Two-factor authentication" : "Autenticazione a due fattori",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Hai effettuato correttamente l'accesso utilizzando l'autenticazione a due fattori (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un tentativo di utilizzare l'autenticazione a due fattori non è riuscito (%1$s)",
+ "You created two-factor backup codes for your account" : "Hai creato codici di backup a due fattori per il tuo account",
"Backup code" : "Codice di backup",
"Use backup code" : "Usa il codice di backup",
"Second-factor backup codes" : "Codici di backup con secondo fattore"
diff --git a/apps/twofactor_backupcodes/l10n/it.json b/apps/twofactor_backupcodes/l10n/it.json
index 5bfc8a109b1..b24eae99c6f 100644
--- a/apps/twofactor_backupcodes/l10n/it.json
+++ b/apps/twofactor_backupcodes/l10n/it.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Se rigeneri i codici di backup, invaliderai automaticamente i vecchi codici.",
"An error occurred while generating your backup codes" : "Si è verificato un errore durante la generazione dei tuoi codici di backup",
"Nextcloud backup codes" : "Codici di backup di Nextcloud",
+ "Two-factor authentication" : "Autenticazione a due fattori",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Hai effettuato correttamente l'accesso utilizzando l'autenticazione a due fattori (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un tentativo di utilizzare l'autenticazione a due fattori non è riuscito (%1$s)",
+ "You created two-factor backup codes for your account" : "Hai creato codici di backup a due fattori per il tuo account",
"Backup code" : "Codice di backup",
"Use backup code" : "Usa il codice di backup",
"Second-factor backup codes" : "Codici di backup con secondo fattore"
diff --git a/apps/twofactor_backupcodes/l10n/ko.js b/apps/twofactor_backupcodes/l10n/ko.js
index a3644a27d2c..53ea6f37f20 100644
--- a/apps/twofactor_backupcodes/l10n/ko.js
+++ b/apps/twofactor_backupcodes/l10n/ko.js
@@ -2,14 +2,16 @@ OC.L10N.register(
"twofactor_backupcodes",
{
"Generate backup codes" : "백업 코드 생성",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "백업 코드가 생성되었습니다. {{total}}개 중 {{used}}개의 코드가 사용되었습니다.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "이것은 백업 코드입니다. 이 코드는 나중에 다시 확인할 수 없으므로 저장하거나 인쇄하십시오.",
"Save backup codes" : "백업 코드 저장",
"Print backup codes" : "백업 코드 인쇄",
- "Regenerate backup codes" : "백업 코드 다시생성",
- "If you regenerate backup codes, you automatically invalidate old codes." : "백업 코드를 생성하면 자동으로 이전 코드는 무효화 됩니다.",
- "An error occurred while generating your backup codes" : "백업 코드를 생성하는 중 오류 발생",
+ "Regenerate backup codes" : "백업 코드 다시 생성",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "백업 코드를 다시 생성하면 이전 코드는 자동으로 무효화 됩니다.",
+ "An error occurred while generating your backup codes" : "백업 코드를 생성하는 중 오류가 발생했습니다.",
"Nextcloud backup codes" : "Nextcloud 백업 코드",
"Backup code" : "백업 코드",
"Use backup code" : "백업 코드 사용",
- "Second-factor backup codes" : "두 번째 인자 백업 코드"
+ "Second-factor backup codes" : "이중 인증 백업 코드"
},
"nplurals=1; plural=0;");
diff --git a/apps/twofactor_backupcodes/l10n/ko.json b/apps/twofactor_backupcodes/l10n/ko.json
index 22f0dd138f6..cce8a5ac0b8 100644
--- a/apps/twofactor_backupcodes/l10n/ko.json
+++ b/apps/twofactor_backupcodes/l10n/ko.json
@@ -1,13 +1,15 @@
{ "translations": {
"Generate backup codes" : "백업 코드 생성",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "백업 코드가 생성되었습니다. {{total}}개 중 {{used}}개의 코드가 사용되었습니다.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "이것은 백업 코드입니다. 이 코드는 나중에 다시 확인할 수 없으므로 저장하거나 인쇄하십시오.",
"Save backup codes" : "백업 코드 저장",
"Print backup codes" : "백업 코드 인쇄",
- "Regenerate backup codes" : "백업 코드 다시생성",
- "If you regenerate backup codes, you automatically invalidate old codes." : "백업 코드를 생성하면 자동으로 이전 코드는 무효화 됩니다.",
- "An error occurred while generating your backup codes" : "백업 코드를 생성하는 중 오류 발생",
+ "Regenerate backup codes" : "백업 코드 다시 생성",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "백업 코드를 다시 생성하면 이전 코드는 자동으로 무효화 됩니다.",
+ "An error occurred while generating your backup codes" : "백업 코드를 생성하는 중 오류가 발생했습니다.",
"Nextcloud backup codes" : "Nextcloud 백업 코드",
"Backup code" : "백업 코드",
"Use backup code" : "백업 코드 사용",
- "Second-factor backup codes" : "두 번째 인자 백업 코드"
+ "Second-factor backup codes" : "이중 인증 백업 코드"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/lv.js b/apps/twofactor_backupcodes/l10n/lv.js
new file mode 100644
index 00000000000..0731fc56890
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/lv.js
@@ -0,0 +1,20 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Izveidot rezerves kodus",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Rezerves kodi ir ģenerēti. {{used}} no {{total}} kodiem ir izmantoti.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Šie ir jūsu dublējuma kodi. Lūdzu saglabāt un / vai izdrukāt tos, jūs nevarēsiet izlasīt kodus vēlreiz",
+ "Save backup codes" : "Saglabāt rezerves kodus",
+ "Print backup codes" : "Drukāt dublējuma kodus",
+ "Regenerate backup codes" : "Atjaunot dublējuma kodus",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Ja atjaunot dublējum kodus, tiek automātiski anulēti vecie kodi.",
+ "An error occurred while generating your backup codes" : "Radās kļūda, ģenerējot jūsu dublējuma kodus",
+ "Nextcloud backup codes" : "Nextcloud dublēšanas kodi",
+ "Two-factor authentication" : "Divpakāpju autentifikācija",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Esat veiksmīgi pieteicies, izmantojot divpakāpju autentifikācija (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Pieteikšanās mēģinājums, izmantojot divpakāpju autentifikāciju neizdevās (%1$s)",
+ "You created two-factor backup codes for your account" : "Jūs izveidojāt divpakāpju dublējumu kodus savam kontam",
+ "Backup code" : "Dublēšanas kods",
+ "Use backup code" : "Izmantojiet dublēšanas kodu"
+},
+"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/twofactor_backupcodes/l10n/lv.json b/apps/twofactor_backupcodes/l10n/lv.json
new file mode 100644
index 00000000000..c7a827cdda4
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/lv.json
@@ -0,0 +1,18 @@
+{ "translations": {
+ "Generate backup codes" : "Izveidot rezerves kodus",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Rezerves kodi ir ģenerēti. {{used}} no {{total}} kodiem ir izmantoti.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Šie ir jūsu dublējuma kodi. Lūdzu saglabāt un / vai izdrukāt tos, jūs nevarēsiet izlasīt kodus vēlreiz",
+ "Save backup codes" : "Saglabāt rezerves kodus",
+ "Print backup codes" : "Drukāt dublējuma kodus",
+ "Regenerate backup codes" : "Atjaunot dublējuma kodus",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Ja atjaunot dublējum kodus, tiek automātiski anulēti vecie kodi.",
+ "An error occurred while generating your backup codes" : "Radās kļūda, ģenerējot jūsu dublējuma kodus",
+ "Nextcloud backup codes" : "Nextcloud dublēšanas kodi",
+ "Two-factor authentication" : "Divpakāpju autentifikācija",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Esat veiksmīgi pieteicies, izmantojot divpakāpju autentifikācija (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Pieteikšanās mēģinājums, izmantojot divpakāpju autentifikāciju neizdevās (%1$s)",
+ "You created two-factor backup codes for your account" : "Jūs izveidojāt divpakāpju dublējumu kodus savam kontam",
+ "Backup code" : "Dublēšanas kods",
+ "Use backup code" : "Izmantojiet dublēšanas kodu"
+},"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/twofactor_backupcodes/l10n/nb_NO.js b/apps/twofactor_backupcodes/l10n/nb_NO.js
index dd340787993..98ad943d2cd 100644
--- a/apps/twofactor_backupcodes/l10n/nb_NO.js
+++ b/apps/twofactor_backupcodes/l10n/nb_NO.js
@@ -1,17 +1,21 @@
OC.L10N.register(
"twofactor_backupcodes",
{
- "Generate backup codes" : "Generer sikkerhetskopi koder",
- "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Sikkerhetskopi koder har blitt generert. {{used}} av {{total}} koder er brukt.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dette er sikkerhetskopi kodene. Vennligst lagre og/eller skriv dem ut siden du ikke vil kunne lese kodene her igjen senere.",
- "Save backup codes" : "Lagre sikkerhetskopi kodene",
- "Print backup codes" : "Skriv sikkerhetskopi koder",
- "Regenerate backup codes" : "Lag sikkerhetskopi koder på nytt",
- "If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du regenererer nye sikkerhetskopi kodene vil du automatisk gjøre de gamle kodene ugyldige.",
- "An error occurred while generating your backup codes" : "En feil oppstod under generering av sikkerhetskopi koder",
- "Nextcloud backup codes" : "Nextclouds backupkoder",
- "Backup code" : "Sikkerhetskopi kode",
- "Use backup code" : "Bruker sikkerhetskopi kode",
- "Second-factor backup codes" : "To-faktor sikkerhetskopikoder"
+ "Generate backup codes" : "Generer sikkerhetskopi-koder",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Sikkerhetskopi-koder har blitt generert. {{used}} av {{total}} koder er brukt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dette er sikkerhetskopi-kodene. Vennligst lagre og/eller skriv dem ut siden du ikke vil kunne se kodene her igjen senere.",
+ "Save backup codes" : "Lagre sikkerhetskopi-kodene",
+ "Print backup codes" : "Skriv ut sikkerhetskopi-koder",
+ "Regenerate backup codes" : "Lag sikkerhetskopi-koder på nytt",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du regenererer nye sikkerhetskopi-koder, vil du automatisk gjøre de gamle kodene ugyldige.",
+ "An error occurred while generating your backup codes" : "En feil oppstod under generering av sikkerhetskopi-kodene",
+ "Nextcloud backup codes" : "Nextcloud sikkerhetskopi-koder",
+ "Two-factor authentication" : "To-trinns bekreftelse",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Din innlogging med to-trinns bekreftelse var velykket (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "En innlogging med to-trinns bekreftelse mislyktes (%1$s)",
+ "You created two-factor backup codes for your account" : "Du opprettet to-trinns bekreftelse sikkerhetskopi-koder",
+ "Backup code" : "Sikkerhetskopi-kode",
+ "Use backup code" : "Bruker sikkerhetskopi-kode",
+ "Second-factor backup codes" : "To-trinns bekreftelse sikkerhetskopi-koder"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/nb_NO.json b/apps/twofactor_backupcodes/l10n/nb_NO.json
index 282514e1e8a..1fe3d2a9a32 100644
--- a/apps/twofactor_backupcodes/l10n/nb_NO.json
+++ b/apps/twofactor_backupcodes/l10n/nb_NO.json
@@ -1,15 +1,19 @@
{ "translations": {
- "Generate backup codes" : "Generer sikkerhetskopi koder",
- "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Sikkerhetskopi koder har blitt generert. {{used}} av {{total}} koder er brukt.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dette er sikkerhetskopi kodene. Vennligst lagre og/eller skriv dem ut siden du ikke vil kunne lese kodene her igjen senere.",
- "Save backup codes" : "Lagre sikkerhetskopi kodene",
- "Print backup codes" : "Skriv sikkerhetskopi koder",
- "Regenerate backup codes" : "Lag sikkerhetskopi koder på nytt",
- "If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du regenererer nye sikkerhetskopi kodene vil du automatisk gjøre de gamle kodene ugyldige.",
- "An error occurred while generating your backup codes" : "En feil oppstod under generering av sikkerhetskopi koder",
- "Nextcloud backup codes" : "Nextclouds backupkoder",
- "Backup code" : "Sikkerhetskopi kode",
- "Use backup code" : "Bruker sikkerhetskopi kode",
- "Second-factor backup codes" : "To-faktor sikkerhetskopikoder"
+ "Generate backup codes" : "Generer sikkerhetskopi-koder",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Sikkerhetskopi-koder har blitt generert. {{used}} av {{total}} koder er brukt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dette er sikkerhetskopi-kodene. Vennligst lagre og/eller skriv dem ut siden du ikke vil kunne se kodene her igjen senere.",
+ "Save backup codes" : "Lagre sikkerhetskopi-kodene",
+ "Print backup codes" : "Skriv ut sikkerhetskopi-koder",
+ "Regenerate backup codes" : "Lag sikkerhetskopi-koder på nytt",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du regenererer nye sikkerhetskopi-koder, vil du automatisk gjøre de gamle kodene ugyldige.",
+ "An error occurred while generating your backup codes" : "En feil oppstod under generering av sikkerhetskopi-kodene",
+ "Nextcloud backup codes" : "Nextcloud sikkerhetskopi-koder",
+ "Two-factor authentication" : "To-trinns bekreftelse",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Din innlogging med to-trinns bekreftelse var velykket (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "En innlogging med to-trinns bekreftelse mislyktes (%1$s)",
+ "You created two-factor backup codes for your account" : "Du opprettet to-trinns bekreftelse sikkerhetskopi-koder",
+ "Backup code" : "Sikkerhetskopi-kode",
+ "Use backup code" : "Bruker sikkerhetskopi-kode",
+ "Second-factor backup codes" : "To-trinns bekreftelse sikkerhetskopi-koder"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/nl.js b/apps/twofactor_backupcodes/l10n/nl.js
index e0dde0e9a0e..8d95cad5151 100644
--- a/apps/twofactor_backupcodes/l10n/nl.js
+++ b/apps/twofactor_backupcodes/l10n/nl.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Als je backup codes opnieuw genereert, worden oude codes automatisch ongeldig gemaakt.",
"An error occurred while generating your backup codes" : "Er trad een fout op bij het genereren van je backup codes",
"Nextcloud backup codes" : "Nextcloud backup codes",
+ "Two-factor authentication" : "Tweefactor authenticatie",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Je bent succesvol ingelogd via tweefactot authenticatie (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Een inlogpoging via tweefactor authenticatie is mislukt (%1$s)",
+ "You created two-factor backup codes for your account" : "Je creëerde tweefactor back-up codes voor je account",
"Backup code" : "Backup code",
"Use backup code" : "Gebruik backup code",
"Second-factor backup codes" : "Twee-factor backup code"
diff --git a/apps/twofactor_backupcodes/l10n/nl.json b/apps/twofactor_backupcodes/l10n/nl.json
index 77185e6f36e..4041eae646a 100644
--- a/apps/twofactor_backupcodes/l10n/nl.json
+++ b/apps/twofactor_backupcodes/l10n/nl.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Als je backup codes opnieuw genereert, worden oude codes automatisch ongeldig gemaakt.",
"An error occurred while generating your backup codes" : "Er trad een fout op bij het genereren van je backup codes",
"Nextcloud backup codes" : "Nextcloud backup codes",
+ "Two-factor authentication" : "Tweefactor authenticatie",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Je bent succesvol ingelogd via tweefactot authenticatie (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Een inlogpoging via tweefactor authenticatie is mislukt (%1$s)",
+ "You created two-factor backup codes for your account" : "Je creëerde tweefactor back-up codes voor je account",
"Backup code" : "Backup code",
"Use backup code" : "Gebruik backup code",
"Second-factor backup codes" : "Twee-factor backup code"
diff --git a/apps/twofactor_backupcodes/l10n/pl.js b/apps/twofactor_backupcodes/l10n/pl.js
index 1291e75856f..2fdb0332e7a 100644
--- a/apps/twofactor_backupcodes/l10n/pl.js
+++ b/apps/twofactor_backupcodes/l10n/pl.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Jeśli generujesz kody zapasowe ponownie, automatycznie unieważnia stare kody.",
"An error occurred while generating your backup codes" : "Wystąpił błąd podczas generowania kodów zapasowych.",
"Nextcloud backup codes" : "Kody zapasowe Nextcloud",
+ "Two-factor authentication" : "Uwierzytelnienie dwuetapowe",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Zalogowałeś się z wykorzystaniem uwierzytelnienia dwuetapowego (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Próba zalogowania się z użyciem uwierzytelnienia dwuetapowego nie udała się (%1$s)",
+ "You created two-factor backup codes for your account" : "Stworzyłeś zapasowe kody uwierzytelnienia dwuetapowego swojego konta",
"Backup code" : "Kopia zapasowa kodów",
"Use backup code" : "Użyj kodu zapasowego",
"Second-factor backup codes" : "Druga opcja kodów zapasowych"
diff --git a/apps/twofactor_backupcodes/l10n/pl.json b/apps/twofactor_backupcodes/l10n/pl.json
index be569fe740f..5662387446c 100644
--- a/apps/twofactor_backupcodes/l10n/pl.json
+++ b/apps/twofactor_backupcodes/l10n/pl.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Jeśli generujesz kody zapasowe ponownie, automatycznie unieważnia stare kody.",
"An error occurred while generating your backup codes" : "Wystąpił błąd podczas generowania kodów zapasowych.",
"Nextcloud backup codes" : "Kody zapasowe Nextcloud",
+ "Two-factor authentication" : "Uwierzytelnienie dwuetapowe",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Zalogowałeś się z wykorzystaniem uwierzytelnienia dwuetapowego (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Próba zalogowania się z użyciem uwierzytelnienia dwuetapowego nie udała się (%1$s)",
+ "You created two-factor backup codes for your account" : "Stworzyłeś zapasowe kody uwierzytelnienia dwuetapowego swojego konta",
"Backup code" : "Kopia zapasowa kodów",
"Use backup code" : "Użyj kodu zapasowego",
"Second-factor backup codes" : "Druga opcja kodów zapasowych"
diff --git a/apps/twofactor_backupcodes/l10n/pt_BR.js b/apps/twofactor_backupcodes/l10n/pt_BR.js
index 59833bc35b0..7b6cfccb60c 100644
--- a/apps/twofactor_backupcodes/l10n/pt_BR.js
+++ b/apps/twofactor_backupcodes/l10n/pt_BR.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Se você regenerar os códigos de backup, invalidara automaticamente os códigos antigos.",
"An error occurred while generating your backup codes" : "Ocorreu um erro ao gerar os códigos de backup",
"Nextcloud backup codes" : "Nextcloud códigos de backup",
+ "Two-factor authentication" : "Autenticação de dois fatores",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Você está logado utilizando usando autenticação de dois fatores com sucesso (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "A tentativa de logar usando autenticação de dois fatores falhou (%1$s)",
+ "You created two-factor backup codes for your account" : "Você criou backup de códigos de dois fatores para sua conta.",
"Backup code" : "Código de backup",
"Use backup code" : "Usar o código de backup",
"Second-factor backup codes" : "Códigos de backup de segundo fator"
diff --git a/apps/twofactor_backupcodes/l10n/pt_BR.json b/apps/twofactor_backupcodes/l10n/pt_BR.json
index 677da150923..e6aa3c53f76 100644
--- a/apps/twofactor_backupcodes/l10n/pt_BR.json
+++ b/apps/twofactor_backupcodes/l10n/pt_BR.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Se você regenerar os códigos de backup, invalidara automaticamente os códigos antigos.",
"An error occurred while generating your backup codes" : "Ocorreu um erro ao gerar os códigos de backup",
"Nextcloud backup codes" : "Nextcloud códigos de backup",
+ "Two-factor authentication" : "Autenticação de dois fatores",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Você está logado utilizando usando autenticação de dois fatores com sucesso (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "A tentativa de logar usando autenticação de dois fatores falhou (%1$s)",
+ "You created two-factor backup codes for your account" : "Você criou backup de códigos de dois fatores para sua conta.",
"Backup code" : "Código de backup",
"Use backup code" : "Usar o código de backup",
"Second-factor backup codes" : "Códigos de backup de segundo fator"
diff --git a/apps/twofactor_backupcodes/l10n/ru.js b/apps/twofactor_backupcodes/l10n/ru.js
index ac137fb48d6..b8e20f8d0a4 100644
--- a/apps/twofactor_backupcodes/l10n/ru.js
+++ b/apps/twofactor_backupcodes/l10n/ru.js
@@ -1,17 +1,21 @@
OC.L10N.register(
"twofactor_backupcodes",
{
- "Generate backup codes" : "Генерировать код восстановления",
+ "Generate backup codes" : "Создать резервные коды",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Резервные коды были созданы. Использовано {{used}} из {{total}} кодов.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Это ваши резервные коды доступа. Пожалуйста, сохраните и/или распечатайте их, так как вы не сможете увидеть эти коды снова.",
- "Save backup codes" : "Сохранить код восстановления",
+ "Save backup codes" : "Сохранить резервные коды",
"Print backup codes" : "Распечатать резервные коды",
- "Regenerate backup codes" : "Пересоздать коды восстановления",
- "If you regenerate backup codes, you automatically invalidate old codes." : "Если перевыпустить коды восстановления, то старые автоматически становятся не активными.",
+ "Regenerate backup codes" : "Перевыпустить резервные коды",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "При перевыпуске резервных кодов, старые автоматически становятся недействительными.",
"An error occurred while generating your backup codes" : "Произошла ошибка при создании резервных кодов",
"Nextcloud backup codes" : "Резервные коды Nextcloud",
- "Backup code" : "Код восстановления",
- "Use backup code" : "Использовать код восстановления",
+ "Two-factor authentication" : "Двухфакторная аутентификация",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Вы успешно вошли в систему используя двухфакторную аутентификацию (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Сбой при попытке входа с использованием двухфакторной аутентификации (%1$s)",
+ "You created two-factor backup codes for your account" : "Вы создали двухфакторные резервные коды для своего аккаунта",
+ "Backup code" : "Резервный код",
+ "Use backup code" : "Использовать резервный код",
"Second-factor backup codes" : "Резервные коды двухфакторной аутентификации"
},
"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/twofactor_backupcodes/l10n/ru.json b/apps/twofactor_backupcodes/l10n/ru.json
index 1c5dd43437f..51aff5de850 100644
--- a/apps/twofactor_backupcodes/l10n/ru.json
+++ b/apps/twofactor_backupcodes/l10n/ru.json
@@ -1,15 +1,19 @@
{ "translations": {
- "Generate backup codes" : "Генерировать код восстановления",
+ "Generate backup codes" : "Создать резервные коды",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Резервные коды были созданы. Использовано {{used}} из {{total}} кодов.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Это ваши резервные коды доступа. Пожалуйста, сохраните и/или распечатайте их, так как вы не сможете увидеть эти коды снова.",
- "Save backup codes" : "Сохранить код восстановления",
+ "Save backup codes" : "Сохранить резервные коды",
"Print backup codes" : "Распечатать резервные коды",
- "Regenerate backup codes" : "Пересоздать коды восстановления",
- "If you regenerate backup codes, you automatically invalidate old codes." : "Если перевыпустить коды восстановления, то старые автоматически становятся не активными.",
+ "Regenerate backup codes" : "Перевыпустить резервные коды",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "При перевыпуске резервных кодов, старые автоматически становятся недействительными.",
"An error occurred while generating your backup codes" : "Произошла ошибка при создании резервных кодов",
"Nextcloud backup codes" : "Резервные коды Nextcloud",
- "Backup code" : "Код восстановления",
- "Use backup code" : "Использовать код восстановления",
+ "Two-factor authentication" : "Двухфакторная аутентификация",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Вы успешно вошли в систему используя двухфакторную аутентификацию (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Сбой при попытке входа с использованием двухфакторной аутентификации (%1$s)",
+ "You created two-factor backup codes for your account" : "Вы создали двухфакторные резервные коды для своего аккаунта",
+ "Backup code" : "Резервный код",
+ "Use backup code" : "Использовать резервный код",
"Second-factor backup codes" : "Резервные коды двухфакторной аутентификации"
},"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/twofactor_backupcodes/l10n/sv.js b/apps/twofactor_backupcodes/l10n/sv.js
new file mode 100644
index 00000000000..2c4f3a40ac8
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/sv.js
@@ -0,0 +1,21 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Generera återställningsnycklar",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Återställningsnycklarna har skapats. {{used}} av {{total}} nycklar har använts.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Detta är dina återställningsnycklar. Vänligen spara och/eller skriv ut dem eftersom du inte kommer kunna se dessa nycklar igen.",
+ "Save backup codes" : "Spara återställningsnycklar",
+ "Print backup codes" : "Skriv ut återställningsnycklar",
+ "Regenerate backup codes" : "Skapa nya återställningsnycklar",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Om du skapar nya återställningsnycklar så kommer de gamla automatiskt att sluta fungera.",
+ "An error occurred while generating your backup codes" : "Ett fel uppstod vid skapandet av nya återställningsnycklar",
+ "Nextcloud backup codes" : "Nextcloud återställningsnycklar",
+ "Two-factor authentication" : "Tvåfaktorsautentisering",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Du lyckades logga in genom att använda tvåfaktorsautentisering (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Ett inloggningsförsök med tvåfaktorsautentisering misslyckades (%1$s)",
+ "You created two-factor backup codes for your account" : "Du skapade återställningsnycklar till tvåfaktorsautentiseringen på ditt användarkonto.",
+ "Backup code" : "Återställningsnyckel",
+ "Use backup code" : "Använd återställningsnyckel",
+ "Second-factor backup codes" : "Tvåfaktorsautentisering"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/sv.json b/apps/twofactor_backupcodes/l10n/sv.json
new file mode 100644
index 00000000000..096f04f0f8f
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/sv.json
@@ -0,0 +1,19 @@
+{ "translations": {
+ "Generate backup codes" : "Generera återställningsnycklar",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Återställningsnycklarna har skapats. {{used}} av {{total}} nycklar har använts.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Detta är dina återställningsnycklar. Vänligen spara och/eller skriv ut dem eftersom du inte kommer kunna se dessa nycklar igen.",
+ "Save backup codes" : "Spara återställningsnycklar",
+ "Print backup codes" : "Skriv ut återställningsnycklar",
+ "Regenerate backup codes" : "Skapa nya återställningsnycklar",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Om du skapar nya återställningsnycklar så kommer de gamla automatiskt att sluta fungera.",
+ "An error occurred while generating your backup codes" : "Ett fel uppstod vid skapandet av nya återställningsnycklar",
+ "Nextcloud backup codes" : "Nextcloud återställningsnycklar",
+ "Two-factor authentication" : "Tvåfaktorsautentisering",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Du lyckades logga in genom att använda tvåfaktorsautentisering (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Ett inloggningsförsök med tvåfaktorsautentisering misslyckades (%1$s)",
+ "You created two-factor backup codes for your account" : "Du skapade återställningsnycklar till tvåfaktorsautentiseringen på ditt användarkonto.",
+ "Backup code" : "Återställningsnyckel",
+ "Use backup code" : "Använd återställningsnyckel",
+ "Second-factor backup codes" : "Tvåfaktorsautentisering"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/lib/Activity/GenericFilter.php b/apps/twofactor_backupcodes/lib/Activity/GenericFilter.php
new file mode 100644
index 00000000000..27c0274b600
--- /dev/null
+++ b/apps/twofactor_backupcodes/lib/Activity/GenericFilter.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Activity;
+
+use OCP\Activity\IFilter;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+
+class GenericFilter implements IFilter {
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ /** @var IL10N */
+ private $l10n;
+
+ public function __construct(IURLGenerator $urlGenerator, IL10N $l10n) {
+ $this->urlGenerator = $urlGenerator;
+ $this->l10n = $l10n;
+ }
+
+ public function allowedApps() {
+ return [];
+ }
+
+ public function filterTypes(array $types) {
+ return array_intersect(['twofactor'], $types);
+ }
+
+ public function getIcon() {
+ return $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'actions/password.svg'));
+ }
+
+ public function getIdentifier() {
+ return 'twofactor';
+ }
+
+ public function getName() {
+ return $this->l10n->t('Two-factor authentication');
+ }
+
+ public function getPriority() {
+ return 30;
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/lib/Activity/GenericProvider.php b/apps/twofactor_backupcodes/lib/Activity/GenericProvider.php
new file mode 100644
index 00000000000..ffdd47708d5
--- /dev/null
+++ b/apps/twofactor_backupcodes/lib/Activity/GenericProvider.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * Two-factor backup codes
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Activity;
+
+use InvalidArgumentException;
+use OCP\Activity\IEvent;
+use OCP\Activity\IProvider;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\L10N\IFactory as L10nFactory;
+
+class GenericProvider implements IProvider {
+
+ /** @var L10nFactory */
+ private $l10n;
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ /** @var ILogger */
+ private $logger;
+
+ public function __construct(L10nFactory $l10n, IURLGenerator $urlGenerator, ILogger $logger) {
+ $this->logger = $logger;
+ $this->urlGenerator = $urlGenerator;
+ $this->l10n = $l10n;
+ }
+
+ public function parse($language, IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getType() !== 'twofactor') {
+ throw new InvalidArgumentException();
+ }
+
+ $l = $this->l10n->get('core', $language);
+
+ switch ($event->getSubject()) {
+ case 'twofactor_success':
+ $params = $event->getSubjectParameters();
+ $event->setParsedSubject($l->t('You successfully logged in using two-factor authentication (%1$s)', [
+ $params['provider'],
+ ]));
+ $event->setIcon($this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'actions/password.svg')));
+ break;
+ case 'twofactor_failed':
+ $params = $event->getSubjectParameters();
+ $event->setParsedSubject($l->t('A login attempt using two-factor authentication failed (%1$s)', [
+ $params['provider'],
+ ]));
+ $event->setIcon($this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'actions/password.svg')));
+ break;
+ default:
+ throw new InvalidArgumentException();
+ }
+ return $event;
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/lib/Activity/GenericSetting.php b/apps/twofactor_backupcodes/lib/Activity/GenericSetting.php
new file mode 100644
index 00000000000..abd1c60f1d5
--- /dev/null
+++ b/apps/twofactor_backupcodes/lib/Activity/GenericSetting.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * Two-factor backup codes
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Activity;
+
+use OCP\Activity\ISetting;
+use OCP\IL10N;
+
+class GenericSetting implements ISetting {
+
+ /** @var IL10N */
+ private $l10n;
+
+ public function __construct(IL10N $l10n) {
+ $this->l10n = $l10n;
+ }
+
+ public function canChangeMail() {
+ return false;
+ }
+
+ public function canChangeStream() {
+ return false;
+ }
+
+ public function getIdentifier() {
+ return 'twofactor';
+ }
+
+ public function getName() {
+ return $this->l10n->t('Two-factor authentication');
+ }
+
+ public function getPriority() {
+ return 30;
+ }
+
+ public function isDefaultEnabledMail() {
+ return true;
+ }
+
+ public function isDefaultEnabledStream() {
+ return true;
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/lib/Activity/Provider.php b/apps/twofactor_backupcodes/lib/Activity/Provider.php
new file mode 100644
index 00000000000..9c7aaeae630
--- /dev/null
+++ b/apps/twofactor_backupcodes/lib/Activity/Provider.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * Two-factor backup codes
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Activity;
+
+use InvalidArgumentException;
+use OCP\Activity\IEvent;
+use OCP\Activity\IProvider;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\L10N\IFactory as L10nFactory;
+
+class Provider implements IProvider {
+
+ /** @var L10nFactory */
+ private $l10n;
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ /** @var ILogger */
+ private $logger;
+
+ /**
+ * @param L10nFactory $l10n
+ * @param IURLGenerator $urlGenerator
+ * @param ILogger $logger
+ */
+ public function __construct(L10nFactory $l10n, IURLGenerator $urlGenerator, ILogger $logger) {
+ $this->logger = $logger;
+ $this->urlGenerator = $urlGenerator;
+ $this->l10n = $l10n;
+ }
+
+ public function parse($language, IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'twofactor_backupcodes') {
+ throw new InvalidArgumentException();
+ }
+
+ $l = $this->l10n->get('twofactor_backupcodes', $language);
+
+ switch ($event->getSubject()) {
+ case 'codes_generated':
+ $event->setParsedSubject($l->t('You created two-factor backup codes for your account'));
+ $event->setIcon($this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'actions/password.svg')));
+ break;
+ default:
+ throw new InvalidArgumentException();
+ }
+ return $event;
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
index 8b56724fcec..85cc174fb6a 100644
--- a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
+++ b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
@@ -22,13 +22,12 @@
namespace OCA\TwoFactorBackupCodes\Db;
use OCP\AppFramework\Db\Mapper;
-use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\IDb;
+use OCP\IDBConnection;
use OCP\IUser;
class BackupCodeMapper extends Mapper {
- public function __construct(IDb $db) {
+ public function __construct(IDBConnection $db) {
parent::__construct($db, 'twofactor_backup_codes');
}
diff --git a/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php b/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
index bb10081bb54..1cf62d18801 100644
--- a/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
+++ b/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
@@ -22,14 +22,19 @@
namespace OCA\TwoFactorBackupCodes\Service;
+use BadMethodCallException;
use OCA\TwoFactorBackupCodes\Db\BackupCode;
use OCA\TwoFactorBackupCodes\Db\BackupCodeMapper;
+use OCP\Activity\IManager;
+use OCP\ILogger;
use OCP\IUser;
use OCP\Security\IHasher;
use OCP\Security\ISecureRandom;
class BackupCodeStorage {
+ private static $CODE_LENGTH = 16;
+
/** @var BackupCodeMapper */
private $mapper;
@@ -39,10 +44,26 @@ class BackupCodeStorage {
/** @var ISecureRandom */
private $random;
- public function __construct(BackupCodeMapper $mapper, ISecureRandom $random, IHasher $hasher) {
+ /** @var IManager */
+ private $activityManager;
+
+ /** @var ILogger */
+ private $logger;
+
+ /**
+ * @param BackupCodeMapper $mapper
+ * @param ISecureRandom $random
+ * @param IHasher $hasher
+ * @param IManager $activityManager
+ * @param ILogger $logger
+ */
+ public function __construct(BackupCodeMapper $mapper, ISecureRandom $random, IHasher $hasher,
+ IManager $activityManager, ILogger $logger) {
$this->mapper = $mapper;
$this->hasher = $hasher;
$this->random = $random;
+ $this->activityManager = $activityManager;
+ $this->logger = $logger;
}
/**
@@ -57,7 +78,7 @@ class BackupCodeStorage {
$uid = $user->getUID();
foreach (range(1, min([$number, 20])) as $i) {
- $code = $this->random->generate(10, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');
+ $code = $this->random->generate(self::$CODE_LENGTH, ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_DIGITS);
$dbCode = new BackupCode();
$dbCode->setUserId($uid);
@@ -68,10 +89,33 @@ class BackupCodeStorage {
array_push($result, $code);
}
+ $this->publishEvent($user, 'codes_generated');
+
return $result;
}
/**
+ * Push an event the user's activity stream
+ *
+ * @param IUser $user
+ * @param string $event
+ */
+ private function publishEvent(IUser $user, $event) {
+ $activity = $this->activityManager->generateEvent();
+ $activity->setApp('twofactor_backupcodes')
+ ->setType('twofactor')
+ ->setAuthor($user->getUID())
+ ->setAffectedUser($user->getUID())
+ ->setSubject($event);
+ try {
+ $this->activityManager->publish($activity);
+ } catch (BadMethodCallException $e) {
+ $this->logger->warning('could not publish backup code creation activity', ['app' => 'twofactor_backupcodes']);
+ $this->logger->logException($e, ['app' => 'twofactor_backupcodes']);
+ }
+ }
+
+ /**
* @param IUser $user
* @return bool
*/
diff --git a/apps/twofactor_backupcodes/settings/personal.php b/apps/twofactor_backupcodes/settings/personal.php
index 037516e39a3..0a018c0ff28 100644
--- a/apps/twofactor_backupcodes/settings/personal.php
+++ b/apps/twofactor_backupcodes/settings/personal.php
@@ -1,5 +1,6 @@
<?php
-
+// @codeCoverageIgnoreStart
$tmpl = new \OCP\Template('twofactor_backupcodes', 'personal');
return $tmpl->fetchPage();
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/tests/Unit/Activity/GenericFilterTest.php b/apps/twofactor_backupcodes/tests/Unit/Activity/GenericFilterTest.php
new file mode 100644
index 00000000000..ca24c0be647
--- /dev/null
+++ b/apps/twofactor_backupcodes/tests/Unit/Activity/GenericFilterTest.php
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Test\Unit\Activity;
+
+use OCA\TwoFactorBackupCodes\Activity\GenericFilter;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use Test\TestCase;
+
+class GenericFilterTest extends TestCase {
+
+ private $urlGenerator;
+ private $l10n;
+
+ /** @var GenericFilter */
+ private $filter;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->l10n = $this->createMock(IL10N::class);
+
+ $this->filter = new GenericFilter($this->urlGenerator, $this->l10n);
+ }
+
+ public function testAllowedApps() {
+ $this->assertEquals([], $this->filter->allowedApps());
+ }
+
+ public function testFilterTypes() {
+ $this->assertEquals(['twofactor'], $this->filter->filterTypes(['comments', 'twofactor']));
+ }
+
+ public function testGetIcon() {
+ $this->urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with('core', 'actions/password.svg')
+ ->will($this->returnValue('path/to/icon.svg'));
+ $this->urlGenerator->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('path/to/icon.svg')
+ ->will($this->returnValue('abs/path/to/icon.svg'));
+ $this->assertEquals('abs/path/to/icon.svg', $this->filter->getIcon());
+ }
+
+ public function testGetIdentifier() {
+ $this->assertEquals('twofactor', $this->filter->getIdentifier());
+ }
+
+ public function testGetName() {
+ $this->l10n->expects($this->once())
+ ->method('t')
+ ->with('Two-factor authentication')
+ ->will($this->returnValue('translated'));
+ $this->assertEquals('translated', $this->filter->getName());
+ }
+
+ public function testGetPriority() {
+ $this->assertEquals(30, $this->filter->getPriority());
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php b/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php
new file mode 100644
index 00000000000..242c4ab4e8d
--- /dev/null
+++ b/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * Two-factor backup codes
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Test\Unit\Activity;
+
+use InvalidArgumentException;
+use OCA\TwoFactorBackupCodes\Activity\GenericProvider;
+use OCP\Activity\IEvent;
+use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\L10N\IFactory;
+use PHPUnit_Framework_MockObject_MockObject;
+use Test\TestCase;
+
+class GenericProviderTest extends TestCase {
+
+ /** @var IL10N|PHPUnit_Framework_MockObject_MockObject */
+ private $l10n;
+
+ /** @var IURLGenerator|PHPUnit_Framework_MockObject_MockObject */
+ private $urlGenerator;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ /** @var GenericProvider */
+ private $provider;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->l10n = $this->createMock(IFactory::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->provider = new GenericProvider($this->l10n, $this->urlGenerator, $this->logger);
+ }
+
+ public function testParseUnrelated() {
+ $lang = 'ru';
+ $event = $this->createMock(IEvent::class);
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('comments');
+ $this->setExpectedException(InvalidArgumentException::class);
+
+ $this->provider->parse($lang, $event);
+ }
+
+ public function subjectData() {
+ return [
+ ['twofactor_success'],
+ ['twofactor_failed'],
+ ];
+ }
+
+ /**
+ * @dataProvider subjectData
+ */
+ public function testParse($subject) {
+ $lang = 'ru';
+ $event = $this->createMock(IEvent::class);
+ $l = $this->createMock(IL10N::class);
+
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('twofactor');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('core', $lang)
+ ->willReturn($l);
+ $this->urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with('core', 'actions/password.svg')
+ ->willReturn('path/to/image');
+ $this->urlGenerator->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('path/to/image')
+ ->willReturn('absolute/path/to/image');
+ $event->expects($this->once())
+ ->method('setIcon')
+ ->with('absolute/path/to/image');
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn($subject);
+ $event->expects($this->once())
+ ->method('setParsedSubject');
+
+ $this->provider->parse($lang, $event);
+ }
+
+ public function testParseInvalidSubject() {
+ $lang = 'ru';
+ $l = $this->createMock(IL10N::class);
+ $event = $this->createMock(IEvent::class);
+
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('twofactor');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('core', $lang)
+ ->willReturn($l);
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn('unrelated');
+
+ $this->expectException(InvalidArgumentException::class);
+ $this->provider->parse($lang, $event);
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php b/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php
new file mode 100644
index 00000000000..e1a13c89c10
--- /dev/null
+++ b/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php
@@ -0,0 +1,131 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * Two-factor backup codes
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Test\Unit\Activity;
+
+use InvalidArgumentException;
+use OCA\TwoFactorBackupCodes\Activity\Provider;
+use OCP\Activity\IEvent;
+use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\L10N\IFactory;
+use PHPUnit_Framework_MockObject_MockObject;
+use Test\TestCase;
+
+class ProviderTest extends TestCase {
+
+ /** @var IL10N|PHPUnit_Framework_MockObject_MockObject */
+ private $l10n;
+
+ /** @var IURLGenerator|PHPUnit_Framework_MockObject_MockObject */
+ private $urlGenerator;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ /** @var Provider */
+ private $provider;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->l10n = $this->createMock(IFactory::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->provider = new Provider($this->l10n, $this->urlGenerator, $this->logger);
+ }
+
+ public function testParseUnrelated() {
+ $lang = 'ru';
+ $event = $this->createMock(IEvent::class);
+ $event->expects($this->once())
+ ->method('getApp')
+ ->willReturn('comments');
+ $this->setExpectedException(InvalidArgumentException::class);
+
+ $this->provider->parse($lang, $event);
+ }
+
+ public function subjectData() {
+ return [
+ ['codes_generated'],
+ ];
+ }
+
+ /**
+ * @dataProvider subjectData
+ */
+ public function testParse($subject) {
+ $lang = 'ru';
+ $event = $this->createMock(IEvent::class);
+ $l = $this->createMock(IL10N::class);
+
+ $event->expects($this->once())
+ ->method('getApp')
+ ->willReturn('twofactor_backupcodes');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('twofactor_backupcodes', $lang)
+ ->willReturn($l);
+ $this->urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with('core', 'actions/password.svg')
+ ->willReturn('path/to/image');
+ $this->urlGenerator->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('path/to/image')
+ ->willReturn('absolute/path/to/image');
+ $event->expects($this->once())
+ ->method('setIcon')
+ ->with('absolute/path/to/image');
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn($subject);
+ $event->expects($this->once())
+ ->method('setParsedSubject');
+
+ $this->provider->parse($lang, $event);
+ }
+
+ public function testParseInvalidSubject() {
+ $lang = 'ru';
+ $l = $this->createMock(IL10N::class);
+ $event = $this->createMock(IEvent::class);
+
+ $event->expects($this->once())
+ ->method('getApp')
+ ->willReturn('twofactor_backupcodes');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('twofactor_backupcodes', $lang)
+ ->willReturn($l);
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn('unrelated');
+
+ $this->expectException(InvalidArgumentException::class);
+ $this->provider->parse($lang, $event);
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/tests/Unit/Activity/SettingTest.php b/apps/twofactor_backupcodes/tests/Unit/Activity/SettingTest.php
new file mode 100644
index 00000000000..2f6aed040f0
--- /dev/null
+++ b/apps/twofactor_backupcodes/tests/Unit/Activity/SettingTest.php
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * Two-factor backup codes
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Test\Unit\Activity;
+
+use OCA\TwoFactorBackupCodes\Activity\GenericSetting;
+use OCP\IL10N;
+use Test\TestCase;
+
+class SettingTest extends TestCase {
+
+ private $l10n;
+
+ /** @var GenericSetting */
+ private $setting;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->l10n = $this->createMock(IL10N::class);
+
+ $this->setting = new GenericSetting($this->l10n);
+ }
+
+ public function testCanChangeMail() {
+ $this->assertFalse($this->setting->canChangeMail());
+ }
+
+ public function testCanChangeStream() {
+ $this->assertFalse($this->setting->canChangeStream());
+ }
+
+ public function testGetIdentifier() {
+ $this->assertEquals('twofactor', $this->setting->getIdentifier());
+ }
+
+ public function testGetName() {
+ $this->l10n->expects($this->once())
+ ->method('t')
+ ->with('Two-factor authentication')
+ ->will($this->returnValue('Zwei-Faktor-Authentifizierung'));
+ $this->assertEquals('Zwei-Faktor-Authentifizierung', $this->setting->getName());
+ }
+
+ public function testGetPriority() {
+ $this->assertEquals(30, $this->setting->getPriority());
+ }
+
+ public function testIsDefaultEnabled() {
+ $this->assertTrue($this->setting->isDefaultEnabledMail());
+ $this->assertTrue($this->setting->isDefaultEnabledStream());
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
index 7a1132b064b..109db7f688c 100644
--- a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
+++ b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
@@ -25,46 +25,58 @@ namespace OCA\TwoFactorBackupCodes\Tests\Unit\Service;
use OCA\TwoFactorBackupCodes\Db\BackupCode;
use OCA\TwoFactorBackupCodes\Db\BackupCodeMapper;
use OCA\TwoFactorBackupCodes\Service\BackupCodeStorage;
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\ILogger;
use OCP\IUser;
use OCP\Security\IHasher;
use OCP\Security\ISecureRandom;
+use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase;
class BackupCodeStorageTest extends TestCase {
- /** @var BackupCodeMapper|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var BackupCodeMapper|PHPUnit_Framework_MockObject_MockObject */
private $mapper;
- /** @var ISecureRandom|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var ISecureRandom|PHPUnit_Framework_MockObject_MockObject */
private $random;
- /** @var IHasher|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IHasher|PHPUnit_Framework_MockObject_MockObject */
private $hasher;
+ /** @var IManager|PHPUnit_Framework_MockObject_MockObject */
+ private $activityManager;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
/** @var BackupCodeStorage */
private $storage;
protected function setUp() {
parent::setUp();
- $this->mapper = $this->getMockBuilder(BackupCodeMapper::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->random = $this->getMockBuilder(ISecureRandom::class)->getMock();
- $this->hasher = $this->getMockBuilder(IHasher::class)->getMock();
- $this->storage = new BackupCodeStorage($this->mapper, $this->random, $this->hasher);
+ $this->mapper = $this->createMock(BackupCodeMapper::class);
+ $this->random = $this->createMock(ISecureRandom::class);
+ $this->hasher = $this->createMock(IHasher::class);
+ $this->activityManager = $this->createMock(IManager::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->storage = new BackupCodeStorage($this->mapper, $this->random, $this->hasher, $this->activityManager, $this->logger);
}
public function testCreateCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$number = 5;
+ $event = $this->createMock(IEvent::class);
- $user->expects($this->once())
+ $user->expects($this->any())
->method('getUID')
->will($this->returnValue('fritz'));
$this->random->expects($this->exactly($number))
->method('generate')
- ->with(10, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
+ ->with(16, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
->will($this->returnValue('CODEABCDEF'));
$this->hasher->expects($this->exactly($number))
->method('hash')
@@ -77,6 +89,28 @@ class BackupCodeStorageTest extends TestCase {
$this->mapper->expects($this->exactly($number))
->method('insert')
->with($this->equalTo($row));
+ $this->activityManager->expects($this->once())
+ ->method('generateEvent')
+ ->will($this->returnValue($event));
+ $event->expects($this->once())
+ ->method('setApp')
+ ->with('twofactor_backupcodes')
+ ->will($this->returnSelf());
+ $event->expects($this->once())
+ ->method('setType')
+ ->with('twofactor')
+ ->will($this->returnSelf());
+ $event->expects($this->once())
+ ->method('setAuthor')
+ ->with('fritz')
+ ->will($this->returnSelf());
+ $event->expects($this->once())
+ ->method('setAffectedUser')
+ ->with('fritz')
+ ->will($this->returnSelf());
+ $this->activityManager->expects($this->once())
+ ->method('publish')
+ ->will($this->returnValue($event));
$codes = $this->storage->createCodes($user, $number);
$this->assertCount($number, $codes);
@@ -86,7 +120,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testHasBackupCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [
new BackupCode(),
new BackupCode(),
@@ -101,7 +135,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testHasBackupCodesNoCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [];
$this->mapper->expects($this->once())
@@ -113,7 +147,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testGetBackupCodeState() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code1 = new BackupCode();
$code1->setUsed(1);
@@ -138,7 +172,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testGetBackupCodeDisabled() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [];
@@ -156,7 +190,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateCode() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed(0);
$code->setCode('HASHEDVALUE');
@@ -182,7 +216,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateUsedCode() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed('1');
$code->setCode('HASHEDVALUE');
@@ -203,7 +237,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateCodeWithWrongHash() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed(0);
$code->setCode('HASHEDVALUE');
diff --git a/apps/updatenotification/appinfo/app.php b/apps/updatenotification/appinfo/app.php
index e3010d418bb..3e966fd1276 100644
--- a/apps/updatenotification/appinfo/app.php
+++ b/apps/updatenotification/appinfo/app.php
@@ -33,7 +33,8 @@ if(\OC::$server->getConfig()->getSystemValue('updatechecker', true) === true) {
$userObject = \OC::$server->getUserSession()->getUser();
if($userObject !== null) {
- if(\OC::$server->getGroupManager()->isAdmin($userObject->getUID())) {
+ if(\OC::$server->getGroupManager()->isAdmin($userObject->getUID()) &&
+ !\OC::$server->getAppManager()->isEnabledForUser('notifications')) {
if($updateChecker->getUpdateState() !== []) {
\OCP\Util::addScript('updatenotification', 'notification');
OC_Hook::connect('\OCP\Config', 'js', $updateChecker, 'getJavaScript');
diff --git a/apps/updatenotification/appinfo/info.xml b/apps/updatenotification/appinfo/info.xml
index 4cd84ac827b..d920e866f1c 100644
--- a/apps/updatenotification/appinfo/info.xml
+++ b/apps/updatenotification/appinfo/info.xml
@@ -5,11 +5,11 @@
<description>Displays update notifications for ownCloud and provides the SSO for the updater.</description>
<licence>AGPL</licence>
<author>Lukas Reschke</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>UpdateNotification</namespace>
<default_enable/>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<background-jobs>
diff --git a/apps/updatenotification/l10n/cs_CZ.js b/apps/updatenotification/l10n/cs_CZ.js
index 3b0e5f3bb67..b8fcc5a8e92 100644
--- a/apps/updatenotification/l10n/cs_CZ.js
+++ b/apps/updatenotification/l10n/cs_CZ.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Channel updated" : "Kanál aktualizován",
"Update to %1$s is available." : "Je dostupná aktualizace na %1$s.",
"Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.",
+ "Update for {app} to version %s is available." : "Pro {app} je dostupná aktualizace na verzi %s.",
"A new version is available: %s" : "Je dostupná nová verze: %s",
"Open updater" : "Otevřít aktualizátor",
"Download now" : "Stáhnout nyní",
@@ -18,6 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.",
"The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru.",
- "Updater" : "Automatické aktualizace"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Provozujete PHP %s. Abyste mohl provozovat Nextcloud 11 a vyšší, musíte mít aspoň PHP 5.6. Přijímat oznámení o těchto novějších verzích budete moct až po aktualizaci verze PHP."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/updatenotification/l10n/cs_CZ.json b/apps/updatenotification/l10n/cs_CZ.json
index 5d84942cd03..cdb176f8d0f 100644
--- a/apps/updatenotification/l10n/cs_CZ.json
+++ b/apps/updatenotification/l10n/cs_CZ.json
@@ -5,6 +5,7 @@
"Channel updated" : "Kanál aktualizován",
"Update to %1$s is available." : "Je dostupná aktualizace na %1$s.",
"Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.",
+ "Update for {app} to version %s is available." : "Pro {app} je dostupná aktualizace na verzi %s.",
"A new version is available: %s" : "Je dostupná nová verze: %s",
"Open updater" : "Otevřít aktualizátor",
"Download now" : "Stáhnout nyní",
@@ -16,6 +17,6 @@
"Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.",
"The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru.",
- "Updater" : "Automatické aktualizace"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Provozujete PHP %s. Abyste mohl provozovat Nextcloud 11 a vyšší, musíte mít aspoň PHP 5.6. Přijímat oznámení o těchto novějších verzích budete moct až po aktualizaci verze PHP."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/de.js b/apps/updatenotification/l10n/de.js
index a64b952e9a5..c848fea6422 100644
--- a/apps/updatenotification/l10n/de.js
+++ b/apps/updatenotification/l10n/de.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Du benutzt PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version wirst Du wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten.",
- "Updater" : "Updater"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Du benutzt PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version wirst Du wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/de.json b/apps/updatenotification/l10n/de.json
index 45b59ec2344..1f07e886c0d 100644
--- a/apps/updatenotification/l10n/de.json
+++ b/apps/updatenotification/l10n/de.json
@@ -17,7 +17,6 @@
"Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Du benutzt PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version wirst Du wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten.",
- "Updater" : "Updater"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Du benutzt PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version wirst Du wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/de_DE.js b/apps/updatenotification/l10n/de_DE.js
index b0fbbdebd22..9d59376c6b4 100644
--- a/apps/updatenotification/l10n/de_DE.js
+++ b/apps/updatenotification/l10n/de_DE.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"updatenotification",
{
"Update notifications" : "Update-Benachrichtigungen",
- "Could not start updater, please try the manual update" : "Aktualisierungsfunktion konnte nicht gestartet werden, bitte versuchen Sie ein mauelles Update",
+ "Could not start updater, please try the manual update" : "Der Updater konnte nicht gestartet werden, bitte versuchen Sie ein manuelles Update",
"{version} is available. Get more information on how to update." : "{version} ist verfügbar. Weitere Informationen zur Aktualisierung.",
"Channel updated" : "Kanal aktualisiert",
"Update to %1$s is available." : "Aktualisierung auf %1$s ist verfügbar.",
@@ -19,7 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Sie benutzen PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version werden Sie wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten.",
- "Updater" : "Updater"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Sie benutzen PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist mindestens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version werden Sie wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/de_DE.json b/apps/updatenotification/l10n/de_DE.json
index 89064c26eed..6daa24ad99a 100644
--- a/apps/updatenotification/l10n/de_DE.json
+++ b/apps/updatenotification/l10n/de_DE.json
@@ -1,6 +1,6 @@
{ "translations": {
"Update notifications" : "Update-Benachrichtigungen",
- "Could not start updater, please try the manual update" : "Aktualisierungsfunktion konnte nicht gestartet werden, bitte versuchen Sie ein mauelles Update",
+ "Could not start updater, please try the manual update" : "Der Updater konnte nicht gestartet werden, bitte versuchen Sie ein manuelles Update",
"{version} is available. Get more information on how to update." : "{version} ist verfügbar. Weitere Informationen zur Aktualisierung.",
"Channel updated" : "Kanal aktualisiert",
"Update to %1$s is available." : "Aktualisierung auf %1$s ist verfügbar.",
@@ -17,7 +17,6 @@
"Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Sie benutzen PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist wenigstens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version werden Sie wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten.",
- "Updater" : "Updater"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Sie benutzen PHP %s. Um die Aktualisierung auf Nextcloud 11 und höher zu ermöglichen ist mindestens PHP 5.6 erforderlich. Nach Aktualisierung der PHP-Version werden Sie wieder Benachrichtigungen über neuere Nextcloud-Versionen erhalten."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/es.js b/apps/updatenotification/l10n/es.js
index 00ffa0e9290..9c27e48fcda 100644
--- a/apps/updatenotification/l10n/es.js
+++ b/apps/updatenotification/l10n/es.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Solo están disponibles las notificaciones para actualizaciones de apps",
"The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace obsoletas las notificaciones dedicadas para el servidor.",
"The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Esta usando PHP %s. Para permitir actualizar a Nextcloud 11 y superior necesita usar al menos PHP 5.6. Una vez que haya actualizado su versión de PHP será capaz de recibir las notificaciones de actualización para estas nuevas versiones.",
- "Updater" : "Actualizador"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Esta usando PHP %s. Para permitir actualizar a Nextcloud 11 y superior necesita usar al menos PHP 5.6. Una vez que haya actualizado su versión de PHP será capaz de recibir las notificaciones de actualización para estas nuevas versiones."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/es.json b/apps/updatenotification/l10n/es.json
index 2c05dc19830..36180bc1a8b 100644
--- a/apps/updatenotification/l10n/es.json
+++ b/apps/updatenotification/l10n/es.json
@@ -17,7 +17,6 @@
"Only notification for app updates are available." : "Solo están disponibles las notificaciones para actualizaciones de apps",
"The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace obsoletas las notificaciones dedicadas para el servidor.",
"The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Esta usando PHP %s. Para permitir actualizar a Nextcloud 11 y superior necesita usar al menos PHP 5.6. Una vez que haya actualizado su versión de PHP será capaz de recibir las notificaciones de actualización para estas nuevas versiones.",
- "Updater" : "Actualizador"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Esta usando PHP %s. Para permitir actualizar a Nextcloud 11 y superior necesita usar al menos PHP 5.6. Una vez que haya actualizado su versión de PHP será capaz de recibir las notificaciones de actualización para estas nuevas versiones."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/fr.js b/apps/updatenotification/l10n/fr.js
index 6b035827049..8187ca3b0bf 100644
--- a/apps/updatenotification/l10n/fr.js
+++ b/apps/updatenotification/l10n/fr.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Seules les notifications pour les mises à jour d'applications sont diponibles.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de mise à jour sélectionné rend obsolètes les notifications dédiées au serveur.",
"The selected update channel does not support updates of the server." : "Le canal de mises à jour sélectionné ne supporte pas les mises à jour du serveur.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Vous utilisé PHP %s. Pour pouvoir mettre à jour vers Nextcloud 11 et supérieur, vous devez utiliser au minimum PHP 5.6. Une fois votre version PHP mis à jour, vous pourrez recevoir des notifications de mise à jour pour ces nouvelles versions. ",
- "Updater" : "Mises à jour"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Vous utilisé PHP %s. Pour pouvoir mettre à jour vers Nextcloud 11 et supérieur, vous devez utiliser au minimum PHP 5.6. Une fois votre version PHP mis à jour, vous pourrez recevoir des notifications de mise à jour pour ces nouvelles versions. "
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/updatenotification/l10n/fr.json b/apps/updatenotification/l10n/fr.json
index 63341f10185..2638d2e2f42 100644
--- a/apps/updatenotification/l10n/fr.json
+++ b/apps/updatenotification/l10n/fr.json
@@ -17,7 +17,6 @@
"Only notification for app updates are available." : "Seules les notifications pour les mises à jour d'applications sont diponibles.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de mise à jour sélectionné rend obsolètes les notifications dédiées au serveur.",
"The selected update channel does not support updates of the server." : "Le canal de mises à jour sélectionné ne supporte pas les mises à jour du serveur.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Vous utilisé PHP %s. Pour pouvoir mettre à jour vers Nextcloud 11 et supérieur, vous devez utiliser au minimum PHP 5.6. Une fois votre version PHP mis à jour, vous pourrez recevoir des notifications de mise à jour pour ces nouvelles versions. ",
- "Updater" : "Mises à jour"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Vous utilisé PHP %s. Pour pouvoir mettre à jour vers Nextcloud 11 et supérieur, vous devez utiliser au minimum PHP 5.6. Une fois votre version PHP mis à jour, vous pourrez recevoir des notifications de mise à jour pour ces nouvelles versions. "
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/hu_HU.js b/apps/updatenotification/l10n/hu_HU.js
index 31711425204..096b0466cc5 100644
--- a/apps/updatenotification/l10n/hu_HU.js
+++ b/apps/updatenotification/l10n/hu_HU.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
"The selected update channel makes dedicated notifications for the server obsolete." : "A kiválasztott frissítési csatorna dedikált értesítéseket jelenít meg a szerver elavulásakor.",
"The selected update channel does not support updates of the server." : "A kiválasztott frissítése csatorna nem támogatja a szerver frissítéseit.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "PHP %s verziót futtatod. A Nextcloud 11-re vagy újabbra frissítéshez legalább PHP 5.6-ra van szükség. Miután frissítetted a PHP-t értesítéseket fogsz kapni az újabb verziók frissítési lehetőségeiről.",
- "Updater" : "Frissítéskezelő"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "PHP %s verziót futtatod. A Nextcloud 11-re vagy újabbra frissítéshez legalább PHP 5.6-ra van szükség. Miután frissítetted a PHP-t értesítéseket fogsz kapni az újabb verziók frissítési lehetőségeiről."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/hu_HU.json b/apps/updatenotification/l10n/hu_HU.json
index 82dad2335a8..3e2f2a16427 100644
--- a/apps/updatenotification/l10n/hu_HU.json
+++ b/apps/updatenotification/l10n/hu_HU.json
@@ -17,7 +17,6 @@
"Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
"The selected update channel makes dedicated notifications for the server obsolete." : "A kiválasztott frissítési csatorna dedikált értesítéseket jelenít meg a szerver elavulásakor.",
"The selected update channel does not support updates of the server." : "A kiválasztott frissítése csatorna nem támogatja a szerver frissítéseit.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "PHP %s verziót futtatod. A Nextcloud 11-re vagy újabbra frissítéshez legalább PHP 5.6-ra van szükség. Miután frissítetted a PHP-t értesítéseket fogsz kapni az újabb verziók frissítési lehetőségeiről.",
- "Updater" : "Frissítéskezelő"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "PHP %s verziót futtatod. A Nextcloud 11-re vagy újabbra frissítéshez legalább PHP 5.6-ra van szükség. Miután frissítetted a PHP-t értesítéseket fogsz kapni az újabb verziók frissítési lehetőségeiről."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/it.js b/apps/updatenotification/l10n/it.js
index ed4e253e3aa..b14d4bc88a0 100644
--- a/apps/updatenotification/l10n/it.js
+++ b/apps/updatenotification/l10n/it.js
@@ -19,6 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Sono disponibili solo le notifiche per gli aggiornamenti delle applicazioni.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Il canale di aggiornamento selezionato rende obsolete le notifiche dedicate al server.",
"The selected update channel does not support updates of the server." : "Il canale di aggiornamento selezionato non supporta gli aggiornamenti del server.",
- "Updater" : "Strumento di aggiornamento"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Stai eseguendo PHP %s. Per consentirti di aggiornare a Nextcloud 11 e successivi, devi eseguire almeno PHP 5.6. Una volta aggiornata la tua versione di PHP, sarai in grado di ricevere notifiche di aggiornamento per questo versioni più recenti."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/it.json b/apps/updatenotification/l10n/it.json
index 5415f3ed40d..0a2eacaa298 100644
--- a/apps/updatenotification/l10n/it.json
+++ b/apps/updatenotification/l10n/it.json
@@ -17,6 +17,6 @@
"Only notification for app updates are available." : "Sono disponibili solo le notifiche per gli aggiornamenti delle applicazioni.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Il canale di aggiornamento selezionato rende obsolete le notifiche dedicate al server.",
"The selected update channel does not support updates of the server." : "Il canale di aggiornamento selezionato non supporta gli aggiornamenti del server.",
- "Updater" : "Strumento di aggiornamento"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Stai eseguendo PHP %s. Per consentirti di aggiornare a Nextcloud 11 e successivi, devi eseguire almeno PHP 5.6. Una volta aggiornata la tua versione di PHP, sarai in grado di ricevere notifiche di aggiornamento per questo versioni più recenti."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/ja.js b/apps/updatenotification/l10n/ja.js
index 6e12ada156f..e19ab909c1d 100644
--- a/apps/updatenotification/l10n/ja.js
+++ b/apps/updatenotification/l10n/ja.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Channel updated" : "チャンネルが更新されました",
"Update to %1$s is available." : "%1$s への更新が利用可能です。",
"Update for %1$s to version %2$s is available." : "%1$s に対するバージョン %2$s へアップデートが利用可能です。",
+ "Update for {app} to version %s is available." : " {app} に対するバージョン %s へアップデートが利用可能です。",
"A new version is available: %s" : "新しいバージョンが利用可能: %s",
"Open updater" : "アップデーターを開く",
"Download now" : "今すぐダウンロード",
@@ -18,6 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "アプリ更新情報があるときのみ通知する。",
"The selected update channel makes dedicated notifications for the server obsolete." : "選択した更新チャネルでは、廃止サーバーについて専用の通知を行います。",
"The selected update channel does not support updates of the server." : "選択したチャンネルでは、サーバーのアップデートをサポートしていません。",
- "Updater" : "アップデート"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "PHP %s が動いています。Nextcloud 11以上にバージョンアップする場合は、PHP 5.6以上を使う必要があります。PHPのバージョンをアップグレードしたら、新しいバージョンのアップデート通知を受信できるようになります。"
},
"nplurals=1; plural=0;");
diff --git a/apps/updatenotification/l10n/ja.json b/apps/updatenotification/l10n/ja.json
index ec032b1984c..ed355e5895a 100644
--- a/apps/updatenotification/l10n/ja.json
+++ b/apps/updatenotification/l10n/ja.json
@@ -5,6 +5,7 @@
"Channel updated" : "チャンネルが更新されました",
"Update to %1$s is available." : "%1$s への更新が利用可能です。",
"Update for %1$s to version %2$s is available." : "%1$s に対するバージョン %2$s へアップデートが利用可能です。",
+ "Update for {app} to version %s is available." : " {app} に対するバージョン %s へアップデートが利用可能です。",
"A new version is available: %s" : "新しいバージョンが利用可能: %s",
"Open updater" : "アップデーターを開く",
"Download now" : "今すぐダウンロード",
@@ -16,6 +17,6 @@
"Only notification for app updates are available." : "アプリ更新情報があるときのみ通知する。",
"The selected update channel makes dedicated notifications for the server obsolete." : "選択した更新チャネルでは、廃止サーバーについて専用の通知を行います。",
"The selected update channel does not support updates of the server." : "選択したチャンネルでは、サーバーのアップデートをサポートしていません。",
- "Updater" : "アップデート"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "PHP %s が動いています。Nextcloud 11以上にバージョンアップする場合は、PHP 5.6以上を使う必要があります。PHPのバージョンをアップグレードしたら、新しいバージョンのアップデート通知を受信できるようになります。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/lv.js b/apps/updatenotification/l10n/lv.js
new file mode 100644
index 00000000000..a242848e6d2
--- /dev/null
+++ b/apps/updatenotification/l10n/lv.js
@@ -0,0 +1,24 @@
+OC.L10N.register(
+ "updatenotification",
+ {
+ "Update notifications" : "Atjauninājumu paziņojumi",
+ "Could not start updater, please try the manual update" : "Nevar sākt atjauninājumu, lūdzu, mēģiniet manuālo atjauninājumu",
+ "{version} is available. Get more information on how to update." : "{version} ir pieejama. Iegūstiet vairāk informācijas par to, kā atjaunināt.",
+ "Channel updated" : "Kanāls atjaunots",
+ "Update to %1$s is available." : "Atjauninājums uz %1$s ir pieejams.",
+ "Update for %1$s to version %2$s is available." : "Atjauninājums %1$s uz versiju %2$s ir pieejams.",
+ "Update for {app} to version %s is available." : "Atjauninājums {app} uz versiju %s ir pieejams.",
+ "A new version is available: %s" : "Ir pieejama jauna versija: %s",
+ "Open updater" : "Atveriet atjauninātāju",
+ "Download now" : "Lejupielādēt tagad",
+ "Your version is up to date." : "Jums ir jaunākā versija.",
+ "Checked on %s" : "Pārbaudīts %s",
+ "Update channel:" : "Atjaunināt kanālu:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Jūs vienmēr varat atjaunināt to uz jaunāku versiju / eksperimentālo versiju. Bet nekad nevar atgriezties uz stabilāku versiju.",
+ "Notify members of the following groups about available updates:" : "Paziņot šo grupu locekļiem par pieejamajiem atjauninājumiem:",
+ "Only notification for app updates are available." : "Tikai paziņojumi par programmu atjauninājumiem ir pieejami.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Izvēlētais atjauninājumu kanāls rādīs īpašus paziņojumus ja serveris novecojis.",
+ "The selected update channel does not support updates of the server." : "Izvēlēto atjauninājumu kanāls neatbalsta servera atjauninājumus.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Jūs izmantojat PHP %s. Lai ļautu jums jaunināt uz Nextcloud 11 un augstāk, ir jāizmanto vismaz PHP 5.6. Kad būsiet jauninājis savas PHP versiju, tad jūs saņemsiet paziņojumus par atjauninājumiem un jaunākām versijām."
+},
+"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/updatenotification/l10n/lv.json b/apps/updatenotification/l10n/lv.json
new file mode 100644
index 00000000000..7ebca4b6de9
--- /dev/null
+++ b/apps/updatenotification/l10n/lv.json
@@ -0,0 +1,22 @@
+{ "translations": {
+ "Update notifications" : "Atjauninājumu paziņojumi",
+ "Could not start updater, please try the manual update" : "Nevar sākt atjauninājumu, lūdzu, mēģiniet manuālo atjauninājumu",
+ "{version} is available. Get more information on how to update." : "{version} ir pieejama. Iegūstiet vairāk informācijas par to, kā atjaunināt.",
+ "Channel updated" : "Kanāls atjaunots",
+ "Update to %1$s is available." : "Atjauninājums uz %1$s ir pieejams.",
+ "Update for %1$s to version %2$s is available." : "Atjauninājums %1$s uz versiju %2$s ir pieejams.",
+ "Update for {app} to version %s is available." : "Atjauninājums {app} uz versiju %s ir pieejams.",
+ "A new version is available: %s" : "Ir pieejama jauna versija: %s",
+ "Open updater" : "Atveriet atjauninātāju",
+ "Download now" : "Lejupielādēt tagad",
+ "Your version is up to date." : "Jums ir jaunākā versija.",
+ "Checked on %s" : "Pārbaudīts %s",
+ "Update channel:" : "Atjaunināt kanālu:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Jūs vienmēr varat atjaunināt to uz jaunāku versiju / eksperimentālo versiju. Bet nekad nevar atgriezties uz stabilāku versiju.",
+ "Notify members of the following groups about available updates:" : "Paziņot šo grupu locekļiem par pieejamajiem atjauninājumiem:",
+ "Only notification for app updates are available." : "Tikai paziņojumi par programmu atjauninājumiem ir pieejami.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Izvēlētais atjauninājumu kanāls rādīs īpašus paziņojumus ja serveris novecojis.",
+ "The selected update channel does not support updates of the server." : "Izvēlēto atjauninājumu kanāls neatbalsta servera atjauninājumus.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Jūs izmantojat PHP %s. Lai ļautu jums jaunināt uz Nextcloud 11 un augstāk, ir jāizmanto vismaz PHP 5.6. Kad būsiet jauninājis savas PHP versiju, tad jūs saņemsiet paziņojumus par atjauninājumiem un jaunākām versijām."
+},"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/updatenotification/l10n/nb_NO.js b/apps/updatenotification/l10n/nb_NO.js
index 6ea376e483a..f5839f09c7c 100644
--- a/apps/updatenotification/l10n/nb_NO.js
+++ b/apps/updatenotification/l10n/nb_NO.js
@@ -17,7 +17,6 @@ OC.L10N.register(
"Notify members of the following groups about available updates:" : "Informer medlemmene i følgende grupper om tilgjengelig oppdateringer:",
"Only notification for app updates are available." : "Kun varsler for app oppdateringer er tilgjengelig.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Den valgte oppdateringskanalen gjør at dedikerte varsler til denne serveren utdatert.",
- "The selected update channel does not support updates of the server." : "Den valgte oppdateringskanalen tilbyr ikke oppdateringer av tjeneren.",
- "Updater" : "Oppdaterer"
+ "The selected update channel does not support updates of the server." : "Den valgte oppdateringskanalen tilbyr ikke oppdateringer av tjeneren."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/nb_NO.json b/apps/updatenotification/l10n/nb_NO.json
index 36818a11d5c..14cd3a12a69 100644
--- a/apps/updatenotification/l10n/nb_NO.json
+++ b/apps/updatenotification/l10n/nb_NO.json
@@ -15,7 +15,6 @@
"Notify members of the following groups about available updates:" : "Informer medlemmene i følgende grupper om tilgjengelig oppdateringer:",
"Only notification for app updates are available." : "Kun varsler for app oppdateringer er tilgjengelig.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Den valgte oppdateringskanalen gjør at dedikerte varsler til denne serveren utdatert.",
- "The selected update channel does not support updates of the server." : "Den valgte oppdateringskanalen tilbyr ikke oppdateringer av tjeneren.",
- "Updater" : "Oppdaterer"
+ "The selected update channel does not support updates of the server." : "Den valgte oppdateringskanalen tilbyr ikke oppdateringer av tjeneren."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/nl.js b/apps/updatenotification/l10n/nl.js
index 884565391ab..f2124a3a5ae 100644
--- a/apps/updatenotification/l10n/nl.js
+++ b/apps/updatenotification/l10n/nl.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Er zijn alleen meldingen voor apps beschikbaar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Het geselecteerde updatekanaal maakt overbodig om serverspecifieke meldingen apart te genereren.",
"The selected update channel does not support updates of the server." : "Het geselecteerde updatekanaal ondersteunt geen updates voor de server.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Je draait PHP %s. Om te kunnen upgraden naar Nextcloud 11 of hoger, moet je minimaal PHP 5.6 draaien. Pas nadat je de PHP versie hebt bijgewerkt, zul je notificaties voor update naar de nieuwe versies ontvangen.",
- "Updater" : "Updater"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Je draait PHP %s. Om te kunnen upgraden naar Nextcloud 11 of hoger, moet je minimaal PHP 5.6 draaien. Pas nadat je de PHP versie hebt bijgewerkt, zul je notificaties voor update naar de nieuwe versies ontvangen."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/nl.json b/apps/updatenotification/l10n/nl.json
index 8e3f0caadcc..b792587480c 100644
--- a/apps/updatenotification/l10n/nl.json
+++ b/apps/updatenotification/l10n/nl.json
@@ -17,7 +17,6 @@
"Only notification for app updates are available." : "Er zijn alleen meldingen voor apps beschikbaar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Het geselecteerde updatekanaal maakt overbodig om serverspecifieke meldingen apart te genereren.",
"The selected update channel does not support updates of the server." : "Het geselecteerde updatekanaal ondersteunt geen updates voor de server.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Je draait PHP %s. Om te kunnen upgraden naar Nextcloud 11 of hoger, moet je minimaal PHP 5.6 draaien. Pas nadat je de PHP versie hebt bijgewerkt, zul je notificaties voor update naar de nieuwe versies ontvangen.",
- "Updater" : "Updater"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Je draait PHP %s. Om te kunnen upgraden naar Nextcloud 11 of hoger, moet je minimaal PHP 5.6 draaien. Pas nadat je de PHP versie hebt bijgewerkt, zul je notificaties voor update naar de nieuwe versies ontvangen."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/pl.js b/apps/updatenotification/l10n/pl.js
index 000b70c9749..3dbcd2bdfeb 100644
--- a/apps/updatenotification/l10n/pl.js
+++ b/apps/updatenotification/l10n/pl.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Channel updated" : "Zaktualizowany kanał",
"Update to %1$s is available." : "Aktualizacja do %1$s jest dostępna.",
"Update for %1$s to version %2$s is available." : "Jest dostępna aktualizacja dla %1$s do wersji %2$s",
+ "Update for {app} to version %s is available." : "aktualizacja dla {app} do wersji %s jest dostępna.",
"A new version is available: %s" : "Dostępna jest nowa wersja: %s",
"Open updater" : "Otwórz aktualizator",
"Download now" : "Pobierz teraz",
@@ -17,7 +18,6 @@ OC.L10N.register(
"Notify members of the following groups about available updates:" : "Powiadom członków następujących grup o dostępnych aktualizacjach: ",
"Only notification for app updates are available." : "Tylko powiadomienia o aktualizacjach aplikacji są dostępne.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Wybrany kanał aktualizacji dla dedykowanych powiadomień dla serwera jest nieaktualny.",
- "The selected update channel does not support updates of the server." : "Wybrany kanał aktualizacji nie obsługuje danego serwera.",
- "Updater" : "Aktualizator"
+ "The selected update channel does not support updates of the server." : "Wybrany kanał aktualizacji nie obsługuje danego serwera."
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/updatenotification/l10n/pl.json b/apps/updatenotification/l10n/pl.json
index 6e9c6b41e37..c0d554bb0de 100644
--- a/apps/updatenotification/l10n/pl.json
+++ b/apps/updatenotification/l10n/pl.json
@@ -5,6 +5,7 @@
"Channel updated" : "Zaktualizowany kanał",
"Update to %1$s is available." : "Aktualizacja do %1$s jest dostępna.",
"Update for %1$s to version %2$s is available." : "Jest dostępna aktualizacja dla %1$s do wersji %2$s",
+ "Update for {app} to version %s is available." : "aktualizacja dla {app} do wersji %s jest dostępna.",
"A new version is available: %s" : "Dostępna jest nowa wersja: %s",
"Open updater" : "Otwórz aktualizator",
"Download now" : "Pobierz teraz",
@@ -15,7 +16,6 @@
"Notify members of the following groups about available updates:" : "Powiadom członków następujących grup o dostępnych aktualizacjach: ",
"Only notification for app updates are available." : "Tylko powiadomienia o aktualizacjach aplikacji są dostępne.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Wybrany kanał aktualizacji dla dedykowanych powiadomień dla serwera jest nieaktualny.",
- "The selected update channel does not support updates of the server." : "Wybrany kanał aktualizacji nie obsługuje danego serwera.",
- "Updater" : "Aktualizator"
+ "The selected update channel does not support updates of the server." : "Wybrany kanał aktualizacji nie obsługuje danego serwera."
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/pt_BR.js b/apps/updatenotification/l10n/pt_BR.js
index f8288635fbd..9c6e351f5e9 100644
--- a/apps/updatenotification/l10n/pt_BR.js
+++ b/apps/updatenotification/l10n/pt_BR.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Só está disponível notificação para atualizações de aplicativos.",
"The selected update channel makes dedicated notifications for the server obsolete." : "O canal de atualização selecionado fornece notificações dedicadas para o servidor desatualizado.",
"The selected update channel does not support updates of the server." : "O canal de atualização selecionado não fornece suporte a atualizações do servidor.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Você está rodando o PHP %s. Para poder atualizar para Nextcloud11 ou maior é necessário a utilização a partir do PHP 5.6. Assim que você atualizar seu PHP será possível receber avisos de atualização para novas versões.",
- "Updater" : "Atualizador"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Você está rodando o PHP %s. Para poder atualizar para Nextcloud11 ou maior é necessário a utilização a partir do PHP 5.6. Assim que você atualizar seu PHP será possível receber avisos de atualização para novas versões."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/updatenotification/l10n/pt_BR.json b/apps/updatenotification/l10n/pt_BR.json
index 37cb75e43b4..607b7758e02 100644
--- a/apps/updatenotification/l10n/pt_BR.json
+++ b/apps/updatenotification/l10n/pt_BR.json
@@ -17,7 +17,6 @@
"Only notification for app updates are available." : "Só está disponível notificação para atualizações de aplicativos.",
"The selected update channel makes dedicated notifications for the server obsolete." : "O canal de atualização selecionado fornece notificações dedicadas para o servidor desatualizado.",
"The selected update channel does not support updates of the server." : "O canal de atualização selecionado não fornece suporte a atualizações do servidor.",
- "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Você está rodando o PHP %s. Para poder atualizar para Nextcloud11 ou maior é necessário a utilização a partir do PHP 5.6. Assim que você atualizar seu PHP será possível receber avisos de atualização para novas versões.",
- "Updater" : "Atualizador"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Você está rodando o PHP %s. Para poder atualizar para Nextcloud11 ou maior é necessário a utilização a partir do PHP 5.6. Assim que você atualizar seu PHP será possível receber avisos de atualização para novas versões."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/ru.js b/apps/updatenotification/l10n/ru.js
index e5c812edb6c..8d88caef272 100644
--- a/apps/updatenotification/l10n/ru.js
+++ b/apps/updatenotification/l10n/ru.js
@@ -19,6 +19,6 @@ OC.L10N.register(
"Only notification for app updates are available." : "Только уведомления об обновлении приложений доступны.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Выбранный канал обновлений высылает специальные уведомления, если сервер устарел.",
"The selected update channel does not support updates of the server." : "Выбранный канал обновлений не поддерживает обновление сервера.",
- "Updater" : "Обновление"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Вы используете PHP %s. Для обновления Nextcloud до версии 11 и старше, требуется, как минимум, версия PHP 5.6. После обновления установленной версии PHP вы будете получать уведомления о возможности обновления до новых версий Nextcloud."
},
"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/updatenotification/l10n/ru.json b/apps/updatenotification/l10n/ru.json
index 9d70e3f9982..391041acfb7 100644
--- a/apps/updatenotification/l10n/ru.json
+++ b/apps/updatenotification/l10n/ru.json
@@ -17,6 +17,6 @@
"Only notification for app updates are available." : "Только уведомления об обновлении приложений доступны.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Выбранный канал обновлений высылает специальные уведомления, если сервер устарел.",
"The selected update channel does not support updates of the server." : "Выбранный канал обновлений не поддерживает обновление сервера.",
- "Updater" : "Обновление"
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Вы используете PHP %s. Для обновления Nextcloud до версии 11 и старше, требуется, как минимум, версия PHP 5.6. После обновления установленной версии PHP вы будете получать уведомления о возможности обновления до новых версий Nextcloud."
},"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/updatenotification/l10n/sk_SK.js b/apps/updatenotification/l10n/sk_SK.js
index e81c3775dd9..6ec23bbed31 100644
--- a/apps/updatenotification/l10n/sk_SK.js
+++ b/apps/updatenotification/l10n/sk_SK.js
@@ -1,9 +1,24 @@
OC.L10N.register(
"updatenotification",
{
+ "Update notifications" : "Upozornenia aktualizácií",
+ "Could not start updater, please try the manual update" : "Nebolo možné spustiť aktualizátor, skúste prosím manuálnu aktualizáciu",
"{version} is available. Get more information on how to update." : "{version} je dostupná. Získajte viac informácií o postupe aktualizácie.",
- "Updater" : "Aktualizátor",
+ "Channel updated" : "Kanál bol aktualizovaný",
+ "Update to %1$s is available." : "Je dostupná aktualizácia na verziu %1$s.",
+ "Update for %1$s to version %2$s is available." : "Pre %1$s je dostupná aktualizácia na verziu %2$s.",
+ "Update for {app} to version %s is available." : "Pre {app} je dostupná aktualizácia na verziu %s.",
"A new version is available: %s" : "Je dostupná nová verzia: %s",
- "Update channel:" : "Aktualizačný kanál:"
+ "Open updater" : "Otvoriť aktualizátor",
+ "Download now" : "Stiahnuť teraz",
+ "Your version is up to date." : "Vaša verzia je atuálna.",
+ "Checked on %s" : "Skontrolované %s",
+ "Update channel:" : "Aktualizačný kanál:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Vždy je možné prejsť na novšiu verziu / experimentálny kanál. Ale následne nie je možné prejsť naspäť na staršiu verziu / stabilnejší kanál.",
+ "Notify members of the following groups about available updates:" : "Upozorňovať členov nasledujúcich skupín o dostupných aktualizáciach:",
+ "Only notification for app updates are available." : "Sú dostupné upozornenia iba pre aktualizácie aplikácií.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Pre vybraný aktualizačný kanál budú priradené upozornenia pre server zastarané.",
+ "The selected update channel does not support updates of the server." : "Vybraný aktualizačný kanál nepodporuje aktualizácie servera.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Momentálne používate PHP %s. Pre aktualizáciu na Nextcloud 11 je potrebné PHP verzie minimálne 5.6. Ako náhle aktualizujete verziu PHP budete dostávať upozornenia s možnosťou aktualizácie na novšie verzie."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/updatenotification/l10n/sk_SK.json b/apps/updatenotification/l10n/sk_SK.json
index f930f9e59a2..0a10a476301 100644
--- a/apps/updatenotification/l10n/sk_SK.json
+++ b/apps/updatenotification/l10n/sk_SK.json
@@ -1,7 +1,22 @@
{ "translations": {
+ "Update notifications" : "Upozornenia aktualizácií",
+ "Could not start updater, please try the manual update" : "Nebolo možné spustiť aktualizátor, skúste prosím manuálnu aktualizáciu",
"{version} is available. Get more information on how to update." : "{version} je dostupná. Získajte viac informácií o postupe aktualizácie.",
- "Updater" : "Aktualizátor",
+ "Channel updated" : "Kanál bol aktualizovaný",
+ "Update to %1$s is available." : "Je dostupná aktualizácia na verziu %1$s.",
+ "Update for %1$s to version %2$s is available." : "Pre %1$s je dostupná aktualizácia na verziu %2$s.",
+ "Update for {app} to version %s is available." : "Pre {app} je dostupná aktualizácia na verziu %s.",
"A new version is available: %s" : "Je dostupná nová verzia: %s",
- "Update channel:" : "Aktualizačný kanál:"
+ "Open updater" : "Otvoriť aktualizátor",
+ "Download now" : "Stiahnuť teraz",
+ "Your version is up to date." : "Vaša verzia je atuálna.",
+ "Checked on %s" : "Skontrolované %s",
+ "Update channel:" : "Aktualizačný kanál:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Vždy je možné prejsť na novšiu verziu / experimentálny kanál. Ale následne nie je možné prejsť naspäť na staršiu verziu / stabilnejší kanál.",
+ "Notify members of the following groups about available updates:" : "Upozorňovať členov nasledujúcich skupín o dostupných aktualizáciach:",
+ "Only notification for app updates are available." : "Sú dostupné upozornenia iba pre aktualizácie aplikácií.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Pre vybraný aktualizačný kanál budú priradené upozornenia pre server zastarané.",
+ "The selected update channel does not support updates of the server." : "Vybraný aktualizačný kanál nepodporuje aktualizácie servera.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Momentálne používate PHP %s. Pre aktualizáciu na Nextcloud 11 je potrebné PHP verzie minimálne 5.6. Ako náhle aktualizujete verziu PHP budete dostávať upozornenia s možnosťou aktualizácie na novšie verzie."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/sl.js b/apps/updatenotification/l10n/sl.js
index 5431e7404a6..0afc6b007eb 100644
--- a/apps/updatenotification/l10n/sl.js
+++ b/apps/updatenotification/l10n/sl.js
@@ -2,17 +2,19 @@ OC.L10N.register(
"updatenotification",
{
"Update notifications" : "Posodobi obvestila",
+ "Could not start updater, please try the manual update" : "Ne morem zagnati samodejne posodobitve, poskusi ročno",
"{version} is available. Get more information on how to update." : "Na voljo je nova različica {version}. Na voljo je več podrobnosti o nadgradnji.",
- "Updated channel" : "Posodobljen kanal",
- "Nextcloud core" : "Nextcloud jedro",
+ "Channel updated" : "Kanal posodobljen",
+ "Update to %1$s is available." : "Posodobitev na %1$s je na voljo.",
"Update for %1$s to version %2$s is available." : "Posodobitev %1$s na različico %2$s je na voljo.",
+ "Update for {app} to version %s is available." : "Posodobitev za {app} na verzijo %s je na voljo.",
"A new version is available: %s" : "Na voljo je nova različica: %s",
"Open updater" : "Odpri posodabljalnik",
+ "Download now" : "Prejmi zdaj",
"Your version is up to date." : "Nameščena je najnovejša različica.",
"Checked on %s" : "Zadnjič preverjeno %s",
"Update channel:" : "Posodobi kanal:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Nadgradnja na višjo različico ali preizkusni kanal je vedno mogoča, ne pa tudi povrnitev na predhodno, bolj stabilno različico.",
- "Notify members of the following groups about available updates:" : "Obvestite člane naslednjih skupin o posodobitvah, ki so na voljo:",
- "Updater" : "Posodabljalnik"
+ "Notify members of the following groups about available updates:" : "Obvestite člane naslednjih skupin o posodobitvah, ki so na voljo:"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/updatenotification/l10n/sl.json b/apps/updatenotification/l10n/sl.json
index 77bc54a9dc9..e3c9c8741a6 100644
--- a/apps/updatenotification/l10n/sl.json
+++ b/apps/updatenotification/l10n/sl.json
@@ -1,16 +1,18 @@
{ "translations": {
"Update notifications" : "Posodobi obvestila",
+ "Could not start updater, please try the manual update" : "Ne morem zagnati samodejne posodobitve, poskusi ročno",
"{version} is available. Get more information on how to update." : "Na voljo je nova različica {version}. Na voljo je več podrobnosti o nadgradnji.",
- "Updated channel" : "Posodobljen kanal",
- "Nextcloud core" : "Nextcloud jedro",
+ "Channel updated" : "Kanal posodobljen",
+ "Update to %1$s is available." : "Posodobitev na %1$s je na voljo.",
"Update for %1$s to version %2$s is available." : "Posodobitev %1$s na različico %2$s je na voljo.",
+ "Update for {app} to version %s is available." : "Posodobitev za {app} na verzijo %s je na voljo.",
"A new version is available: %s" : "Na voljo je nova različica: %s",
"Open updater" : "Odpri posodabljalnik",
+ "Download now" : "Prejmi zdaj",
"Your version is up to date." : "Nameščena je najnovejša različica.",
"Checked on %s" : "Zadnjič preverjeno %s",
"Update channel:" : "Posodobi kanal:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Nadgradnja na višjo različico ali preizkusni kanal je vedno mogoča, ne pa tudi povrnitev na predhodno, bolj stabilno različico.",
- "Notify members of the following groups about available updates:" : "Obvestite člane naslednjih skupin o posodobitvah, ki so na voljo:",
- "Updater" : "Posodabljalnik"
+ "Notify members of the following groups about available updates:" : "Obvestite člane naslednjih skupin o posodobitvah, ki so na voljo:"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/sq.js b/apps/updatenotification/l10n/sq.js
index 1f47697c051..c56d048bbc5 100644
--- a/apps/updatenotification/l10n/sq.js
+++ b/apps/updatenotification/l10n/sq.js
@@ -2,16 +2,23 @@ OC.L10N.register(
"updatenotification",
{
"Update notifications" : "Njoftime përditësimesh",
+ "Could not start updater, please try the manual update" : "Nuk mundi të filloj përditësuesi, ju lutemi të provoni përditësimin manual",
"{version} is available. Get more information on how to update." : "Është gati {version}. Merrni më tepër informacion se si ta përditësoni.",
- "Updated channel" : "Kanali u përditësua",
+ "Channel updated" : "Kanali u përditësua",
+ "Update to %1$s is available." : "Përditësimi te%1$s është në dispozicion.",
"Update for %1$s to version %2$s is available." : "Është gati përditësimi për %1$s në version %2$s.",
- "Updater" : "Përditësues",
+ "Update for {app} to version %s is available." : "Përditësimi për {app} në versionin %s është në dispozicion",
"A new version is available: %s" : "Ka gati një version të ri: %s",
- "Open updater" : "Hapni përditësuesin",
+ "Open updater" : "Hape përditësuesin",
+ "Download now" : "Shkarko tani",
"Your version is up to date." : "Versioni juaj është i përditësuar.",
"Checked on %s" : "Kontrolluar më %s",
"Update channel:" : "Kanal përditësimesh:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mundeni përherë ta përditësoni me një version të ri / kanal eksperimental. Por nuk mund ta ulni kurrë versionin në një version më të qëndrueshëm.",
- "Notify members of the following groups about available updates:" : "Njoftoji anëtarët e grupeve vijues për përditësime të gatshme:"
+ "Notify members of the following groups about available updates:" : "Njoftoji anëtarët e grupeve vijues për përditësime të gatshme:",
+ "Only notification for app updates are available." : "Vetëm njoftime për përditësime aplikacionesh janë të disponueshme.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Kanali i zgjedhur i përditësimit i bën njoftimet për shërbyesin të papërdorshme.",
+ "The selected update channel does not support updates of the server." : "Kanali i zgjdhur i përditësimit nuk mbështet përditësime të shvrbyesit.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Ju po përdorni PHP %s. Që të kaloni në versionin Nextcloud 11 ose më lartë ju keni nevojë që të përdorni të paktën PHP5.6. Sapo të kaloni në versionin e fundit të PHP do keni mundësinë që të merrni njoftime për versionet e reja."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/sq.json b/apps/updatenotification/l10n/sq.json
index 9f963dc1c4b..845efac8051 100644
--- a/apps/updatenotification/l10n/sq.json
+++ b/apps/updatenotification/l10n/sq.json
@@ -1,15 +1,22 @@
{ "translations": {
"Update notifications" : "Njoftime përditësimesh",
+ "Could not start updater, please try the manual update" : "Nuk mundi të filloj përditësuesi, ju lutemi të provoni përditësimin manual",
"{version} is available. Get more information on how to update." : "Është gati {version}. Merrni më tepër informacion se si ta përditësoni.",
- "Updated channel" : "Kanali u përditësua",
+ "Channel updated" : "Kanali u përditësua",
+ "Update to %1$s is available." : "Përditësimi te%1$s është në dispozicion.",
"Update for %1$s to version %2$s is available." : "Është gati përditësimi për %1$s në version %2$s.",
- "Updater" : "Përditësues",
+ "Update for {app} to version %s is available." : "Përditësimi për {app} në versionin %s është në dispozicion",
"A new version is available: %s" : "Ka gati një version të ri: %s",
- "Open updater" : "Hapni përditësuesin",
+ "Open updater" : "Hape përditësuesin",
+ "Download now" : "Shkarko tani",
"Your version is up to date." : "Versioni juaj është i përditësuar.",
"Checked on %s" : "Kontrolluar më %s",
"Update channel:" : "Kanal përditësimesh:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mundeni përherë ta përditësoni me një version të ri / kanal eksperimental. Por nuk mund ta ulni kurrë versionin në një version më të qëndrueshëm.",
- "Notify members of the following groups about available updates:" : "Njoftoji anëtarët e grupeve vijues për përditësime të gatshme:"
+ "Notify members of the following groups about available updates:" : "Njoftoji anëtarët e grupeve vijues për përditësime të gatshme:",
+ "Only notification for app updates are available." : "Vetëm njoftime për përditësime aplikacionesh janë të disponueshme.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Kanali i zgjedhur i përditësimit i bën njoftimet për shërbyesin të papërdorshme.",
+ "The selected update channel does not support updates of the server." : "Kanali i zgjdhur i përditësimit nuk mbështet përditësime të shvrbyesit.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Ju po përdorni PHP %s. Që të kaloni në versionin Nextcloud 11 ose më lartë ju keni nevojë që të përdorni të paktën PHP5.6. Sapo të kaloni në versionin e fundit të PHP do keni mundësinë që të merrni njoftime për versionet e reja."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/sv.js b/apps/updatenotification/l10n/sv.js
index 45cf8e2476f..86a3cf7d587 100644
--- a/apps/updatenotification/l10n/sv.js
+++ b/apps/updatenotification/l10n/sv.js
@@ -1,14 +1,24 @@
OC.L10N.register(
"updatenotification",
{
+ "Update notifications" : "Uppdateringsnotifikationer",
+ "Could not start updater, please try the manual update" : "Kunde inte starta uppdateraren, vänligen försök uppdatera manuellt",
"{version} is available. Get more information on how to update." : "{version} är tillgänglig. Få mer information om hur du uppdaterar.",
- "Updated channel" : "Uppdaterad kanal",
- "Updater" : "Uppdaterare",
+ "Channel updated" : "Uppdateringskanal uppdaterad",
+ "Update to %1$s is available." : "Uppdatering till %1$s är tillgänglig.",
+ "Update for %1$s to version %2$s is available." : "Uppdatering för %1$s till version %2$s är tillgänglig.",
+ "Update for {app} to version %s is available." : "Uppdatering för {app} till version %s är tillgänglig.",
"A new version is available: %s" : "En ny version är tillgänglig: %s",
"Open updater" : "Öppna uppdateraren",
+ "Download now" : "Ladda ned nu",
"Your version is up to date." : "Din version är uppdaterad.",
"Checked on %s" : "Senast kontrollerad %s",
"Update channel:" : "Uppdateringskanal:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid uppdatera till en nyare version / experimentell kanal. Men du kan aldrig nedgradera till en mer stabil kanal."
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid uppdatera till en nyare version / experimentell kanal. Men du kan aldrig nedgradera till en mer stabil kanal.",
+ "Notify members of the following groups about available updates:" : "Notifiera medlemmar i följande grupper om tillgängliga uppdateraingar:",
+ "Only notification for app updates are available." : "Endast notifikation för app-uppdateringar är tillgängliga.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Den valda uppdateringskanalen gör dedikerade notiser för servern förlegade.",
+ "The selected update channel does not support updates of the server." : "Den valda uppdateringskanalen stödjer inte uppdateringar för servern.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Du använder PHP %s. För att kunna uppgradera till Nextcloud 11 och högre så behöver du minst använda PHP 5.6 . När du har uppgraderat din PHP version kommer du att kunna ta emot uppdateringsnotifikationer för de nyare versionerna."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/sv.json b/apps/updatenotification/l10n/sv.json
index d52684ecf31..a3a0e95079a 100644
--- a/apps/updatenotification/l10n/sv.json
+++ b/apps/updatenotification/l10n/sv.json
@@ -1,12 +1,22 @@
{ "translations": {
+ "Update notifications" : "Uppdateringsnotifikationer",
+ "Could not start updater, please try the manual update" : "Kunde inte starta uppdateraren, vänligen försök uppdatera manuellt",
"{version} is available. Get more information on how to update." : "{version} är tillgänglig. Få mer information om hur du uppdaterar.",
- "Updated channel" : "Uppdaterad kanal",
- "Updater" : "Uppdaterare",
+ "Channel updated" : "Uppdateringskanal uppdaterad",
+ "Update to %1$s is available." : "Uppdatering till %1$s är tillgänglig.",
+ "Update for %1$s to version %2$s is available." : "Uppdatering för %1$s till version %2$s är tillgänglig.",
+ "Update for {app} to version %s is available." : "Uppdatering för {app} till version %s är tillgänglig.",
"A new version is available: %s" : "En ny version är tillgänglig: %s",
"Open updater" : "Öppna uppdateraren",
+ "Download now" : "Ladda ned nu",
"Your version is up to date." : "Din version är uppdaterad.",
"Checked on %s" : "Senast kontrollerad %s",
"Update channel:" : "Uppdateringskanal:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid uppdatera till en nyare version / experimentell kanal. Men du kan aldrig nedgradera till en mer stabil kanal."
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid uppdatera till en nyare version / experimentell kanal. Men du kan aldrig nedgradera till en mer stabil kanal.",
+ "Notify members of the following groups about available updates:" : "Notifiera medlemmar i följande grupper om tillgängliga uppdateraingar:",
+ "Only notification for app updates are available." : "Endast notifikation för app-uppdateringar är tillgängliga.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Den valda uppdateringskanalen gör dedikerade notiser för servern förlegade.",
+ "The selected update channel does not support updates of the server." : "Den valda uppdateringskanalen stödjer inte uppdateringar för servern.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Du använder PHP %s. För att kunna uppgradera till Nextcloud 11 och högre så behöver du minst använda PHP 5.6 . När du har uppgraderat din PHP version kommer du att kunna ta emot uppdateringsnotifikationer för de nyare versionerna."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/tr.js b/apps/updatenotification/l10n/tr.js
index 260099bcce2..b5160c7b6b3 100644
--- a/apps/updatenotification/l10n/tr.js
+++ b/apps/updatenotification/l10n/tr.js
@@ -18,7 +18,6 @@ OC.L10N.register(
"Notify members of the following groups about available updates:" : "Yayınlanan güncellemeler şu grupların üyelerine bildirilsin:",
"Only notification for app updates are available." : "Yalnız uygulama güncellemeleri kullanılabilir.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Seçilmiş güncelleme kanalı kullanımdan kalkmış sunucu bildirimleri için kullanılıyor.",
- "The selected update channel does not support updates of the server." : "Seçilmiş güncelleme kanalı sunucunun güncellemelerini desteklemiyor.",
- "Updater" : "Güncelleyici"
+ "The selected update channel does not support updates of the server." : "Seçilmiş güncelleme kanalı sunucunun güncellemelerini desteklemiyor."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/updatenotification/l10n/tr.json b/apps/updatenotification/l10n/tr.json
index b37ca429e74..7eba40df793 100644
--- a/apps/updatenotification/l10n/tr.json
+++ b/apps/updatenotification/l10n/tr.json
@@ -16,7 +16,6 @@
"Notify members of the following groups about available updates:" : "Yayınlanan güncellemeler şu grupların üyelerine bildirilsin:",
"Only notification for app updates are available." : "Yalnız uygulama güncellemeleri kullanılabilir.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Seçilmiş güncelleme kanalı kullanımdan kalkmış sunucu bildirimleri için kullanılıyor.",
- "The selected update channel does not support updates of the server." : "Seçilmiş güncelleme kanalı sunucunun güncellemelerini desteklemiyor.",
- "Updater" : "Güncelleyici"
+ "The selected update channel does not support updates of the server." : "Seçilmiş güncelleme kanalı sunucunun güncellemelerini desteklemiyor."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/zh_CN.js b/apps/updatenotification/l10n/zh_CN.js
index 3c18f5981a3..9c224667f6b 100644
--- a/apps/updatenotification/l10n/zh_CN.js
+++ b/apps/updatenotification/l10n/zh_CN.js
@@ -1,14 +1,24 @@
OC.L10N.register(
"updatenotification",
{
+ "Update notifications" : "升级通知",
+ "Could not start updater, please try the manual update" : "无法启动自动更新,请尝试手动更新",
"{version} is available. Get more information on how to update." : "新版本 {version} 已可以使用。获取更多升级相关信息。",
- "Updated channel" : "更新通道",
- "Updater" : "更新管理器",
+ "Channel updated" : "更新通道",
+ "Update to %1$s is available." : " 可以更新到 %1$s 。",
+ "Update for %1$s to version %2$s is available." : "可以从 %1$s 版本更新到 %2$s 版本。",
+ "Update for {app} to version %s is available." : "可以将您的 {app} 更新到版本 %s 。",
"A new version is available: %s" : "有可用的新版本: %s",
- "Open updater" : "打开更新管理器",
+ "Open updater" : "打开更新器",
+ "Download now" : "开始下载",
"Your version is up to date." : "您的版本已是最新。",
"Checked on %s" : "检查于 %s",
"Update channel:" : "更新通道:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "您可以随时更新到新版本 / 实验通道。但你永远不能降级到更稳定的通道。"
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "您可以随时更新到新版本 / 实验通道。但你永远不能降级到更稳定的通道。",
+ "Notify members of the following groups about available updates:" : "提醒一下组群的用户关于可用的更新:",
+ "Only notification for app updates are available." : "仅提醒应用更新就绪。",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "被选中的升级通道将会通知未更新的服务器",
+ "The selected update channel does not support updates of the server." : "选中的更新通道不支持服务器升级。",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "您在使用PHP %s. 如果要使用 Nextcloud 11 您至少要使用 PHP 5.6。如果您升级了您的 PHP 版本您将不会收到这些提示您更新更高版本的信息提示。"
},
"nplurals=1; plural=0;");
diff --git a/apps/updatenotification/l10n/zh_CN.json b/apps/updatenotification/l10n/zh_CN.json
index 47bba0c492b..4ffaf9f9e96 100644
--- a/apps/updatenotification/l10n/zh_CN.json
+++ b/apps/updatenotification/l10n/zh_CN.json
@@ -1,12 +1,22 @@
{ "translations": {
+ "Update notifications" : "升级通知",
+ "Could not start updater, please try the manual update" : "无法启动自动更新,请尝试手动更新",
"{version} is available. Get more information on how to update." : "新版本 {version} 已可以使用。获取更多升级相关信息。",
- "Updated channel" : "更新通道",
- "Updater" : "更新管理器",
+ "Channel updated" : "更新通道",
+ "Update to %1$s is available." : " 可以更新到 %1$s 。",
+ "Update for %1$s to version %2$s is available." : "可以从 %1$s 版本更新到 %2$s 版本。",
+ "Update for {app} to version %s is available." : "可以将您的 {app} 更新到版本 %s 。",
"A new version is available: %s" : "有可用的新版本: %s",
- "Open updater" : "打开更新管理器",
+ "Open updater" : "打开更新器",
+ "Download now" : "开始下载",
"Your version is up to date." : "您的版本已是最新。",
"Checked on %s" : "检查于 %s",
"Update channel:" : "更新通道:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "您可以随时更新到新版本 / 实验通道。但你永远不能降级到更稳定的通道。"
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "您可以随时更新到新版本 / 实验通道。但你永远不能降级到更稳定的通道。",
+ "Notify members of the following groups about available updates:" : "提醒一下组群的用户关于可用的更新:",
+ "Only notification for app updates are available." : "仅提醒应用更新就绪。",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "被选中的升级通道将会通知未更新的服务器",
+ "The selected update channel does not support updates of the server." : "选中的更新通道不支持服务器升级。",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "您在使用PHP %s. 如果要使用 Nextcloud 11 您至少要使用 PHP 5.6。如果您升级了您的 PHP 版本您将不会收到这些提示您更新更高版本的信息提示。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/zh_TW.js b/apps/updatenotification/l10n/zh_TW.js
index 64a0e002d5b..a7e225e3413 100644
--- a/apps/updatenotification/l10n/zh_TW.js
+++ b/apps/updatenotification/l10n/zh_TW.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "您可以隨時更新至較新的版本 / 實驗通道,但您不能降版至更穩定的通道。",
"Notify members of the following groups about available updates:" : "有可用更新時通知這些群組:",
"Only notification for app updates are available." : "僅提供應用程式更新的通知",
- "The selected update channel does not support updates of the server." : "所選的更新頻道不提供伺服器軟體的更新",
- "Updater" : "更新者"
+ "The selected update channel does not support updates of the server." : "所選的更新頻道不提供伺服器軟體的更新"
},
"nplurals=1; plural=0;");
diff --git a/apps/updatenotification/l10n/zh_TW.json b/apps/updatenotification/l10n/zh_TW.json
index 7e8edb9820e..7386d753e94 100644
--- a/apps/updatenotification/l10n/zh_TW.json
+++ b/apps/updatenotification/l10n/zh_TW.json
@@ -14,7 +14,6 @@
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "您可以隨時更新至較新的版本 / 實驗通道,但您不能降版至更穩定的通道。",
"Notify members of the following groups about available updates:" : "有可用更新時通知這些群組:",
"Only notification for app updates are available." : "僅提供應用程式更新的通知",
- "The selected update channel does not support updates of the server." : "所選的更新頻道不提供伺服器軟體的更新",
- "Updater" : "更新者"
+ "The selected update channel does not support updates of the server." : "所選的更新頻道不提供伺服器軟體的更新"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/updatenotification/lib/Notification/BackgroundJob.php b/apps/updatenotification/lib/Notification/BackgroundJob.php
index 7bcc0e86905..83a9bdb599a 100644
--- a/apps/updatenotification/lib/Notification/BackgroundJob.php
+++ b/apps/updatenotification/lib/Notification/BackgroundJob.php
@@ -30,8 +30,6 @@ use OCP\Http\Client\IClientService;
use OCP\IConfig;
use OCP\IGroup;
use OCP\IGroupManager;
-use OCP\IURLGenerator;
-use OCP\IUser;
use OCP\Notification\IManager;
class BackgroundJob extends TimedJob {
@@ -51,10 +49,7 @@ class BackgroundJob extends TimedJob {
/** @var IClientService */
protected $client;
- /** @var IURLGenerator */
- protected $urlGenerator;
-
- /** @var IUser[] */
+ /** @var string[] */
protected $users;
/**
@@ -65,9 +60,8 @@ class BackgroundJob extends TimedJob {
* @param IGroupManager $groupManager
* @param IAppManager $appManager
* @param IClientService $client
- * @param IURLGenerator $urlGenerator
*/
- public function __construct(IConfig $config, IManager $notificationManager, IGroupManager $groupManager, IAppManager $appManager, IClientService $client, IURLGenerator $urlGenerator) {
+ public function __construct(IConfig $config, IManager $notificationManager, IGroupManager $groupManager, IAppManager $appManager, IClientService $client) {
// Run once a day
$this->setInterval(60 * 60 * 24);
@@ -76,7 +70,6 @@ class BackgroundJob extends TimedJob {
$this->groupManager = $groupManager;
$this->appManager = $appManager;
$this->client = $client;
- $this->urlGenerator = $urlGenerator;
}
protected function run($argument) {
@@ -97,8 +90,7 @@ class BackgroundJob extends TimedJob {
$status = $updater->check();
if (isset($status['version'])) {
- $url = $this->urlGenerator->linkToRouteAbsolute('settings.AdminSettings.index') . '#updater';
- $this->createNotifications('core', $status['version'], $url, $status['versionstring']);
+ $this->createNotifications('core', $status['version'], $status['versionstring']);
}
}
@@ -110,8 +102,7 @@ class BackgroundJob extends TimedJob {
foreach ($apps as $app) {
$update = $this->isUpdateAvailable($app);
if ($update !== false) {
- $url = $this->urlGenerator->linkToRouteAbsolute('settings.AppSettings.viewApps') . '#app-' . $app;
- $this->createNotifications($app, $update, $url);
+ $this->createNotifications($app, $update);
}
}
}
@@ -121,10 +112,9 @@ class BackgroundJob extends TimedJob {
*
* @param string $app
* @param string $version
- * @param string $url
* @param string $visibleVersion
*/
- protected function createNotifications($app, $version, $url, $visibleVersion = '') {
+ protected function createNotifications($app, $version, $visibleVersion = '') {
$lastNotification = $this->config->getAppValue('updatenotification', $app, false);
if ($lastNotification === $version) {
// We already notified about this update
@@ -138,8 +128,7 @@ class BackgroundJob extends TimedJob {
$notification = $this->notificationManager->createNotification();
$notification->setApp('updatenotification')
->setDateTime(new \DateTime())
- ->setObject($app, $version)
- ->setLink($url);
+ ->setObject($app, $version);
if ($visibleVersion !== '') {
$notification->setSubject('update_available', ['version' => $visibleVersion]);
diff --git a/apps/updatenotification/lib/Notification/Notifier.php b/apps/updatenotification/lib/Notification/Notifier.php
index 00cc94095ca..079ec4c5e0a 100644
--- a/apps/updatenotification/lib/Notification/Notifier.php
+++ b/apps/updatenotification/lib/Notification/Notifier.php
@@ -24,7 +24,10 @@
namespace OCA\UpdateNotification\Notification;
+use OCP\IGroupManager;
use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Notification\IManager;
use OCP\Notification\INotification;
@@ -41,6 +44,12 @@ class Notifier implements INotifier {
/** @var IFactory */
protected $l10NFactory;
+ /** @var IUserSession */
+ protected $userSession;
+
+ /** @var IGroupManager */
+ protected $groupManager;
+
/** @var string[] */
protected $appVersions;
@@ -50,11 +59,15 @@ class Notifier implements INotifier {
* @param IURLGenerator $url
* @param IManager $notificationManager
* @param IFactory $l10NFactory
+ * @param IUserSession $userSession
+ * @param IGroupManager $groupManager
*/
- public function __construct(IURLGenerator $url, IManager $notificationManager, IFactory $l10NFactory) {
+ public function __construct(IURLGenerator $url, IManager $notificationManager, IFactory $l10NFactory, IUserSession $userSession, IGroupManager $groupManager) {
$this->url = $url;
$this->notificationManager = $notificationManager;
$this->l10NFactory = $l10NFactory;
+ $this->userSession = $userSession;
+ $this->groupManager = $groupManager;
$this->appVersions = $this->getAppVersions();
}
@@ -76,6 +89,10 @@ class Notifier implements INotifier {
$parameters = $notification->getSubjectParameters();
$notification->setParsedSubject($l->t('Update to %1$s is available.', [$parameters['version']]));
+
+ if ($this->isAdmin()) {
+ $notification->setLink($this->url->linkToRouteAbsolute('settings.AdminSettings.index') . '#updater');
+ }
} else {
$appInfo = $this->getAppInfo($notification->getObjectType());
$appName = ($appInfo === null) ? $notification->getObjectType() : $appInfo['name'];
@@ -92,6 +109,10 @@ class Notifier implements INotifier {
'name' => $appName,
]
]);
+
+ if ($this->isAdmin()) {
+ $notification->setLink($this->url->linkToRouteAbsolute('settings.AppSettings.viewApps') . '#app-' . $notification->getObjectType());
+ }
}
$notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('updatenotification', 'notification.svg')));
@@ -113,6 +134,19 @@ class Notifier implements INotifier {
}
}
+ /**
+ * @return bool
+ */
+ protected function isAdmin() {
+ $user = $this->userSession->getUser();
+
+ if ($user instanceof IUser) {
+ return $this->groupManager->isAdmin($user->getUID());
+ }
+
+ return false;
+ }
+
protected function getCoreVersions() {
return implode('.', \OCP\Util::getVersion());
}
diff --git a/apps/updatenotification/tests/Notification/BackgroundJobTest.php b/apps/updatenotification/tests/Notification/BackgroundJobTest.php
index 911b1cc8e2f..57771ec0ae9 100644
--- a/apps/updatenotification/tests/Notification/BackgroundJobTest.php
+++ b/apps/updatenotification/tests/Notification/BackgroundJobTest.php
@@ -45,18 +45,15 @@ class BackgroundJobTest extends TestCase {
protected $appManager;
/** @var IClientService|\PHPUnit_Framework_MockObject_MockObject */
protected $client;
- /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
- protected $urlGenerator;
public function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('OCP\IConfig')->getMock();
- $this->notificationManager = $this->getMockBuilder('OCP\Notification\IManager')->getMock();
- $this->groupManager = $this->getMockBuilder('OCP\IGroupManager')->getMock();
- $this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock();
- $this->client = $this->getMockBuilder('OCP\Http\Client\IClientService')->getMock();
- $this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->getMock();
+ $this->config = $this->createMock(\OCP\IConfig::class);
+ $this->notificationManager = $this->createMock(\OCP\Notification\IManager::class);
+ $this->groupManager = $this->createMock(\OCP\IGroupManager::class);
+ $this->appManager = $this->createMock(\OCP\App\IAppManager::class);
+ $this->client = $this->createMock(\OCP\Http\Client\IClientService::class);
}
/**
@@ -70,8 +67,7 @@ class BackgroundJobTest extends TestCase {
$this->notificationManager,
$this->groupManager,
$this->appManager,
- $this->client,
- $this->urlGenerator
+ $this->client
);
} {
return $this->getMockBuilder('OCA\UpdateNotification\Notification\BackgroundJob')
@@ -81,7 +77,6 @@ class BackgroundJobTest extends TestCase {
$this->groupManager,
$this->appManager,
$this->client,
- $this->urlGenerator,
])
->setMethods($methods)
->getMock();
@@ -160,20 +155,12 @@ class BackgroundJobTest extends TestCase {
}
if ($notification === null) {
- $this->urlGenerator->expects($this->never())
- ->method('linkToRouteAbsolute');
-
$job->expects($this->never())
->method('createNotifications');
} else {
- $this->urlGenerator->expects($this->once())
- ->method('linkToRouteAbsolute')
- ->with('settings.AdminSettings.index')
- ->willReturn('admin-url');
-
$job->expects($this->once())
->method('createNotifications')
- ->willReturn('core', $notification, 'admin-url#updater', $readableVersion);
+ ->willReturn('core', $notification, $readableVersion);
}
$this->invokePrivate($job, 'checkCoreUpdate');
@@ -188,7 +175,7 @@ class BackgroundJobTest extends TestCase {
['app2', '1.9.2'],
],
[
- ['app2', '1.9.2', 'apps-url#app-app2'],
+ ['app2', '1.9.2'],
],
],
];
@@ -215,11 +202,6 @@ class BackgroundJobTest extends TestCase {
->method('isUpdateAvailable')
->willReturnMap($isUpdateAvailable);
- $this->urlGenerator->expects($this->exactly(sizeof($notifications)))
- ->method('linkToRouteAbsolute')
- ->with('settings.AppSettings.viewApps')
- ->willReturn('apps-url');
-
$mockedMethod = $job->expects($this->exactly(sizeof($notifications)))
->method('createNotifications');
call_user_func_array([$mockedMethod, 'withConsecutive'], $notifications);
@@ -229,9 +211,9 @@ class BackgroundJobTest extends TestCase {
public function dataCreateNotifications() {
return [
- ['app1', '1.0.0', 'link1', '1.0.0', false, false, null, null],
- ['app2', '1.0.1', 'link2', '1.0.0', '1.0.0', true, ['user1'], [['user1']]],
- ['app3', '1.0.1', 'link3', false, false, true, ['user2', 'user3'], [['user2'], ['user3']]],
+ ['app1', '1.0.0', '1.0.0', false, false, null, null],
+ ['app2', '1.0.1', '1.0.0', '1.0.0', true, ['user1'], [['user1']]],
+ ['app3', '1.0.1', false, false, true, ['user2', 'user3'], [['user2'], ['user3']]],
];
}
@@ -240,14 +222,13 @@ class BackgroundJobTest extends TestCase {
*
* @param string $app
* @param string $version
- * @param string $url
* @param string|false $lastNotification
* @param string|false $callDelete
* @param bool $createNotification
* @param string[]|null $users
* @param array|null $userNotifications
*/
- public function testCreateNotifications($app, $version, $url, $lastNotification, $callDelete, $createNotification, $users, $userNotifications) {
+ public function testCreateNotifications($app, $version, $lastNotification, $callDelete, $createNotification, $users, $userNotifications) {
$job = $this->getJob([
'deleteOutdatedNotifications',
'getUsersToNotify',
@@ -299,10 +280,6 @@ class BackgroundJobTest extends TestCase {
->method('setSubject')
->with('update_available')
->willReturnSelf();
- $notification->expects($this->once())
- ->method('setLink')
- ->with($url)
- ->willReturnSelf();
if ($userNotifications !== null) {
$mockedMethod = $notification->expects($this->exactly(sizeof($userNotifications)))
@@ -323,7 +300,7 @@ class BackgroundJobTest extends TestCase {
->method('createNotification');
}
- $this->invokePrivate($job, 'createNotifications', [$app, $version, $url]);
+ $this->invokePrivate($job, 'createNotifications', [$app, $version]);
}
public function dataGetUsersToNotify() {
diff --git a/apps/updatenotification/tests/Notification/NotifierTest.php b/apps/updatenotification/tests/Notification/NotifierTest.php
index 421fcada689..e809ce11635 100644
--- a/apps/updatenotification/tests/Notification/NotifierTest.php
+++ b/apps/updatenotification/tests/Notification/NotifierTest.php
@@ -24,7 +24,9 @@ namespace OCA\UpdateNotification\Tests\Notification;
use OCA\UpdateNotification\Notification\Notifier;
+use OCP\IGroupManager;
use OCP\IURLGenerator;
+use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Notification\IManager;
use OCP\Notification\INotification;
@@ -38,6 +40,10 @@ class NotifierTest extends TestCase {
protected $notificationManager;
/** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */
protected $l10nFactory;
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ protected $userSession;
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $groupManager;
public function setUp() {
parent::setUp();
@@ -45,6 +51,8 @@ class NotifierTest extends TestCase {
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->notificationManager = $this->createMock(IManager::class);
$this->l10nFactory = $this->createMock(IFactory::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->groupManager = $this->createMock(IGroupManager::class);
}
/**
@@ -56,7 +64,9 @@ class NotifierTest extends TestCase {
return new Notifier(
$this->urlGenerator,
$this->notificationManager,
- $this->l10nFactory
+ $this->l10nFactory,
+ $this->userSession,
+ $this->groupManager
);
} {
return $this->getMockBuilder(Notifier::class)
@@ -64,6 +74,8 @@ class NotifierTest extends TestCase {
$this->urlGenerator,
$this->notificationManager,
$this->l10nFactory,
+ $this->userSession,
+ $this->groupManager,
])
->setMethods($methods)
->getMock();
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index 87eb61a0fba..7535790fa57 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -9,7 +9,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce
</description>
<licence>AGPL</licence>
<author>Dominik Schmidt and Arthur Schiwon</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<types>
<authentication/>
</types>
@@ -18,7 +18,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce
</documentation>
<dependencies>
<lib>ldap</lib>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<namespace>User_LDAP</namespace>
diff --git a/apps/user_ldap/appinfo/routes.php b/apps/user_ldap/appinfo/routes.php
index c01a3c11472..45b43c21409 100644
--- a/apps/user_ldap/appinfo/routes.php
+++ b/apps/user_ldap/appinfo/routes.php
@@ -36,3 +36,13 @@ $this->create('user_ldap_ajax_testConfiguration', 'ajax/testConfiguration.php')
->actionInclude('user_ldap/ajax/testConfiguration.php');
$this->create('user_ldap_ajax_wizard', 'ajax/wizard.php')
->actionInclude('user_ldap/ajax/wizard.php');
+
+$application = new \OCP\AppFramework\App('user_ldap');
+$application->registerRoutes($this, [
+ 'ocs' => [
+ ['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'],
+ ['name' => 'ConfigAPI#show', 'url' => '/api/v1/config/{configID}', 'verb' => 'GET'],
+ ['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'],
+ ['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'],
+ ]
+]);
diff --git a/apps/user_ldap/img/app-dark.svg b/apps/user_ldap/img/app-dark.svg
new file mode 100644
index 00000000000..54939fab4f2
--- /dev/null
+++ b/apps/user_ldap/img/app-dark.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" viewBox="0 0 16 16">
+ <path style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" fill="#000" d="m8.4036 1c-1.7312 0-3.1998 1.2661-3.1998 2.9 0.012287 0.51643 0.058473 1.1532 0.36664 2.5v0.033333l0.033328 0.033333c0.098928 0.28338 0.24289 0.44549 0.4333 0.66666s0.41742 0.48149 0.63328 0.69999c0.025397 0.025708 0.041676 0.041633 0.066656 0.066677 0.04281 0.18631 0.094672 0.38681 0.13332 0.56666 0.10284 0.47851 0.092296 0.81737 0.066668 0.93332-0.74389 0.26121-1.6694 0.57228-2.4998 0.93332-0.46622 0.2027-0.8881 0.3837-1.2332 0.59999-0.34513 0.2163-0.68837 0.37971-0.79994 0.86666-0.16004 0.63293-0.19866 0.7539-0.39997 1.5333-0.027212 0.20914 0.083011 0.42961 0.26665 0.53333 1.5078 0.81451 3.824 1.1423 6.1329 1.1333s4.6066-0.35609 6.0662-1.1333c0.11739-0.07353 0.14304-0.10869 0.13332-0.2333-0.04365-0.68908-0.08154-1.3669-0.13332-1.7666-0.01807-0.09908-0.06492-0.19275-0.13332-0.26666-0.46366-0.5537-1.1564-0.89218-1.9665-1.2333-0.7396-0.31144-1.6067-0.63486-2.4665-0.99999-0.048123-0.10721-0.095926-0.41912 0-0.89999 0.025759-0.12912 0.066096-0.26742 0.099994-0.4 0.0808-0.090507 0.14378-0.16447 0.23332-0.26666 0.19096-0.21796 0.39614-0.44661 0.56662-0.66666s0.30996-0.40882 0.39997-0.66666l0.03333-0.033333c0.34839-1.4062 0.34857-1.9929 0.36664-2.5v-0.033333c0-1.6339-1.4686-2.9-3.1998-2.9z"/>
+</svg>
diff --git a/apps/user_ldap/js/wizard/wizardTabLoginFilter.js b/apps/user_ldap/js/wizard/wizardTabLoginFilter.js
index 7b9a408784a..d08a744f9ee 100644
--- a/apps/user_ldap/js/wizard/wizardTabLoginFilter.js
+++ b/apps/user_ldap/js/wizard/wizardTabLoginFilter.js
@@ -148,7 +148,7 @@ OCA = OCA || {};
} else if(usersFound === 1) {
message = t('user_ldap', 'User found and settings verified.');
} else if(usersFound > 1) {
- message = t('user_ldap', 'Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter.');
+ message = t('user_ldap', 'Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter.');
}
} else {
message = t('user_ldap', 'An unspecified error occurred. Please check the settings and the log.');
diff --git a/apps/user_ldap/l10n/ast.js b/apps/user_ldap/l10n/ast.js
index 26f04fa976e..2f3d17d1101 100644
--- a/apps/user_ldap/l10n/ast.js
+++ b/apps/user_ldap/l10n/ast.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "Esbillar atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Nun s'alcuentra l'usuariu. Encamiéntase consultar los atributos d'accesu y nome d'usuariu. Filtru efectivu (copiar y pegar pa la validación de llínea de comandos): <br/>",
"User found and settings verified." : "Usuariu atopáu y la configuración verificada.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Axustes verificaos, pero atopose un usuariu . Namá'l primeru d'ellos va ser capaz d'empecipiar sesión. Considere un filtru más acutáu.",
"An unspecified error occurred. Please check the settings and the log." : "Asocedió un erru. Por favor, compruebe la configuración y el rexistru.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtru de busca nun ye válidu , probablemente por cuenta de problemes de sintaxis como'l númberu impar de soportes abiertos y zarraos. Por favor revisalo.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Asocedió un erru de conexón a LDAP / AD, por favor, comprueba'l host, el puertu y les credenciales.",
@@ -157,6 +156,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Asignación del Nome d'usuariu LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los nomes d'usuariu usense p'atroxar (meta) datos. En cuenta d'identificar y reconocer usuarios, cada usuariu de LDAP tendrá'l so nome d'usuariu internu polo que rique un mapéu dende'l so nome d'usuariu al usuariu de LDAP. El nome d'usuariu creáu mapeáse al UUID del usuariu de LDAP. Amás cacheamos tamién la DN p'amenorgar la intecractividá de LDAP, pero ensin usala pa la identificación. Si la DN camuda, atoparanse los cambios. L'usu internu del nome d'usuariu ye perdayures. ",
"Clear Username-LDAP User Mapping" : "Llimpiar l'asignación de los Nomes d'usuariu de los usuarios LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP"
+ "Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Axustes verificaos, pero atopose un usuariu . Namá'l primeru d'ellos va ser capaz d'empecipiar sesión. Considere un filtru más acutáu."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/ast.json b/apps/user_ldap/l10n/ast.json
index 512a7ae9913..8d00dbad5cf 100644
--- a/apps/user_ldap/l10n/ast.json
+++ b/apps/user_ldap/l10n/ast.json
@@ -38,7 +38,6 @@
"Select attributes" : "Esbillar atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Nun s'alcuentra l'usuariu. Encamiéntase consultar los atributos d'accesu y nome d'usuariu. Filtru efectivu (copiar y pegar pa la validación de llínea de comandos): <br/>",
"User found and settings verified." : "Usuariu atopáu y la configuración verificada.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Axustes verificaos, pero atopose un usuariu . Namá'l primeru d'ellos va ser capaz d'empecipiar sesión. Considere un filtru más acutáu.",
"An unspecified error occurred. Please check the settings and the log." : "Asocedió un erru. Por favor, compruebe la configuración y el rexistru.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtru de busca nun ye válidu , probablemente por cuenta de problemes de sintaxis como'l númberu impar de soportes abiertos y zarraos. Por favor revisalo.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Asocedió un erru de conexón a LDAP / AD, por favor, comprueba'l host, el puertu y les credenciales.",
@@ -155,6 +154,7 @@
"Username-LDAP User Mapping" : "Asignación del Nome d'usuariu LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los nomes d'usuariu usense p'atroxar (meta) datos. En cuenta d'identificar y reconocer usuarios, cada usuariu de LDAP tendrá'l so nome d'usuariu internu polo que rique un mapéu dende'l so nome d'usuariu al usuariu de LDAP. El nome d'usuariu creáu mapeáse al UUID del usuariu de LDAP. Amás cacheamos tamién la DN p'amenorgar la intecractividá de LDAP, pero ensin usala pa la identificación. Si la DN camuda, atoparanse los cambios. L'usu internu del nome d'usuariu ye perdayures. ",
"Clear Username-LDAP User Mapping" : "Llimpiar l'asignación de los Nomes d'usuariu de los usuarios LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP"
+ "Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Axustes verificaos, pero atopose un usuariu . Namá'l primeru d'ellos va ser capaz d'empecipiar sesión. Considere un filtru más acutáu."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js
index 59a716743d1..c9fc3c62586 100644
--- a/apps/user_ldap/l10n/cs_CZ.js
+++ b/apps/user_ldap/l10n/cs_CZ.js
@@ -40,13 +40,14 @@ OC.L10N.register(
"Select attributes" : "Vyberte atributy",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>",
"User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, nalezen jeden uživatel. Pouze první se bude moci přihlásit. Zvažte nasazení užšího filtru.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, ale byl nalezen víc než jeden uživatel. Jen ten první se bude moci přihlásit. Zvažte užší filtr.",
"An unspecified error occurred. Please check the settings and the log." : "Došlo k nespecifikované chybě. Zkontrolujte prosím nastavení a soubor logu.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chybí zástupný znak %uid. Bude nahrazen přihlašovacím jménem při dotazování LDAP / AD.",
"Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.",
+ "Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ",
"LDAP / AD integration" : "LDAP / AD propojení",
"_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"],
"_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"],
@@ -142,6 +143,9 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které obsahují jiné skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN.)",
"Paging chunksize" : "Velikost bloku stránkování",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, které může vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)",
+ "Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro každého uživatele",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super Administrátorům a skupinovým Administrátorům změnu hesel jejich LDAP uživatelů. Funguje pouze, pokud jsou na LDAP serveru příslušně nakonfigurovány seznamy řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čisté podobě, musí být použito šifrování při transportu a na LDAP serveru by mělo být nakonfigurováno hashování hesel.",
+ "(New password is sent as plain text to LDAP)" : "(Nové heslo je LDAPu zasláno jako prostý text)",
"Special Attributes" : "Speciální atributy",
"Quota Field" : "Pole pro kvótu",
"Quota Default" : "Výchozí kvóta",
@@ -160,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména jsou používána pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý LDAP uživatel interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. DN informace je navíc udržována v paměti pro snížení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické pro každou konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, ale pouze v testovací nebo experimentální fázi.",
"Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu",
"Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu",
- "Limit %s access to users meeting these criteria:" : "Přístup ke %s je omezen na uživatele odpovídající těmto kritériím:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Pro dosažení podobného chování jako před ownCloud 5, zadejte atribut uživatelského jména do následujícího pole. Ponechte jej prázdné, chcete-li zachovat výchozí nastavení. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, nalezen jeden uživatel. Pouze první se bude moci přihlásit. Zvažte nasazení užšího filtru."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json
index 1ffce96b2d8..6f374d73d7f 100644
--- a/apps/user_ldap/l10n/cs_CZ.json
+++ b/apps/user_ldap/l10n/cs_CZ.json
@@ -38,13 +38,14 @@
"Select attributes" : "Vyberte atributy",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>",
"User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, nalezen jeden uživatel. Pouze první se bude moci přihlásit. Zvažte nasazení užšího filtru.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, ale byl nalezen víc než jeden uživatel. Jen ten první se bude moci přihlásit. Zvažte užší filtr.",
"An unspecified error occurred. Please check the settings and the log." : "Došlo k nespecifikované chybě. Zkontrolujte prosím nastavení a soubor logu.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chybí zástupný znak %uid. Bude nahrazen přihlašovacím jménem při dotazování LDAP / AD.",
"Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.",
+ "Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ",
"LDAP / AD integration" : "LDAP / AD propojení",
"_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"],
"_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"],
@@ -140,6 +141,9 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které obsahují jiné skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN.)",
"Paging chunksize" : "Velikost bloku stránkování",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, které může vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)",
+ "Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro každého uživatele",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super Administrátorům a skupinovým Administrátorům změnu hesel jejich LDAP uživatelů. Funguje pouze, pokud jsou na LDAP serveru příslušně nakonfigurovány seznamy řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čisté podobě, musí být použito šifrování při transportu a na LDAP serveru by mělo být nakonfigurováno hashování hesel.",
+ "(New password is sent as plain text to LDAP)" : "(Nové heslo je LDAPu zasláno jako prostý text)",
"Special Attributes" : "Speciální atributy",
"Quota Field" : "Pole pro kvótu",
"Quota Default" : "Výchozí kvóta",
@@ -158,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména jsou používána pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý LDAP uživatel interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. DN informace je navíc udržována v paměti pro snížení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické pro každou konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, ale pouze v testovací nebo experimentální fázi.",
"Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu",
"Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu",
- "Limit %s access to users meeting these criteria:" : "Přístup ke %s je omezen na uživatele odpovídající těmto kritériím:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Pro dosažení podobného chování jako před ownCloud 5, zadejte atribut uživatelského jména do následujícího pole. Ponechte jej prázdné, chcete-li zachovat výchozí nastavení. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, nalezen jeden uživatel. Pouze první se bude moci přihlásit. Zvažte nasazení užšího filtru."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/da.js b/apps/user_ldap/l10n/da.js
index 9faadadb45b..1f9227c5a0a 100644
--- a/apps/user_ldap/l10n/da.js
+++ b/apps/user_ldap/l10n/da.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"Select attributes" : "Vælg attributter",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Bruger blev ikke fundet. Tjek venligst dine login-attributter og brugernavnet. Gældende filter (til kopiér-og-indsæt for validering via kommandolinje): <br/>",
"User found and settings verified." : "Bruger blev fundetog indstillingerne bekræftet.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Indstillingerne blev verificieret, men én bruger blev fundet. Kun den første, vil kunne logge ind. Overvej et mere begrænset filter.",
"An unspecified error occurred. Please check the settings and the log." : "Der opstod en uspecificeret fejl. Tjek venligst indstillingerne og loggen.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søgefilteret er ugyldigt - sandsynligvis på grund af problemer med syntaksen, såsom et ulige antal åbne og lukkede parenteser. Gennemse venligst. ",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Der opstod en forbindelsesfejl til LDAP/AD - tjek venligst vært, port og brugeroplysninger.",
@@ -151,6 +150,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Kortlægning mellem brugernavn og LDAP-bruger",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brugernavne bruges til at lagre og tildele (meta)data. For at kunne identificere og genkende brugere præcist, så vil hver LDAP-bruger have et internt brugernavn. Det oprettede brugernavn kortlægges til UUID'et for LDAP-brugeren. I tillæg mellemlagres DN'et for at mindske LDAP-interaktioner, men det benyttes ikke til identifikation. Hvis DN'et ændres, så vil ændringerne blive registreret. Det interne brugernavn anvendes overalt. Hvis kortlægningerne ryddes, så vil der være rester overalt. Rydning af kortlægningerne er ikke konfigurationssensitivt - det påvirker alle LDAP-konfigurationer! Ryd aldrig kortlægningerne i et produktionsmiljø, kun i et teststadie eller eksperimentelt stadie.",
"Clear Username-LDAP User Mapping" : "Ryd kortlægning mellem brugernavn og LDAP-bruger",
- "Clear Groupname-LDAP Group Mapping" : "Ryd kortlægning mellem gruppenavn og LDAP-gruppe"
+ "Clear Groupname-LDAP Group Mapping" : "Ryd kortlægning mellem gruppenavn og LDAP-gruppe",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Indstillingerne blev verificieret, men én bruger blev fundet. Kun den første, vil kunne logge ind. Overvej et mere begrænset filter."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/da.json b/apps/user_ldap/l10n/da.json
index 68c31f42be7..b7aab6fbbe8 100644
--- a/apps/user_ldap/l10n/da.json
+++ b/apps/user_ldap/l10n/da.json
@@ -37,7 +37,6 @@
"Select attributes" : "Vælg attributter",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Bruger blev ikke fundet. Tjek venligst dine login-attributter og brugernavnet. Gældende filter (til kopiér-og-indsæt for validering via kommandolinje): <br/>",
"User found and settings verified." : "Bruger blev fundetog indstillingerne bekræftet.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Indstillingerne blev verificieret, men én bruger blev fundet. Kun den første, vil kunne logge ind. Overvej et mere begrænset filter.",
"An unspecified error occurred. Please check the settings and the log." : "Der opstod en uspecificeret fejl. Tjek venligst indstillingerne og loggen.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søgefilteret er ugyldigt - sandsynligvis på grund af problemer med syntaksen, såsom et ulige antal åbne og lukkede parenteser. Gennemse venligst. ",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Der opstod en forbindelsesfejl til LDAP/AD - tjek venligst vært, port og brugeroplysninger.",
@@ -149,6 +148,7 @@
"Username-LDAP User Mapping" : "Kortlægning mellem brugernavn og LDAP-bruger",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brugernavne bruges til at lagre og tildele (meta)data. For at kunne identificere og genkende brugere præcist, så vil hver LDAP-bruger have et internt brugernavn. Det oprettede brugernavn kortlægges til UUID'et for LDAP-brugeren. I tillæg mellemlagres DN'et for at mindske LDAP-interaktioner, men det benyttes ikke til identifikation. Hvis DN'et ændres, så vil ændringerne blive registreret. Det interne brugernavn anvendes overalt. Hvis kortlægningerne ryddes, så vil der være rester overalt. Rydning af kortlægningerne er ikke konfigurationssensitivt - det påvirker alle LDAP-konfigurationer! Ryd aldrig kortlægningerne i et produktionsmiljø, kun i et teststadie eller eksperimentelt stadie.",
"Clear Username-LDAP User Mapping" : "Ryd kortlægning mellem brugernavn og LDAP-bruger",
- "Clear Groupname-LDAP Group Mapping" : "Ryd kortlægning mellem gruppenavn og LDAP-gruppe"
+ "Clear Groupname-LDAP Group Mapping" : "Ryd kortlægning mellem gruppenavn og LDAP-gruppe",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Indstillingerne blev verificieret, men én bruger blev fundet. Kun den første, vil kunne logge ind. Overvej et mere begrænset filter."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index 10578537b85..9cc44cb3724 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Select attributes" : "Attribute auswählen",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfe Deine Loginattribute und Deinen Benutzernamen. Gültige Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>",
"User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen überprüft, aber einen Nutzer gefunden. Nur der Erste kann sich anmelden. Verwende möglicherweise einen engeren Filter.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen geprüft, es wurde mehr als ein Nutzer gefunden. Nur. der ersten Nutzer wird in der Lage sein, sich anzumelden. Verwende einen weiter einschränkenenden Filter.",
"An unspecified error occurred. Please check the settings and the log." : "Ein nicht näher spezifizierter Fehler ist aufgetreten. Bitte prüfe die Einstellungen und die Logdatei.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte Host, Port und Anmeldeinformationen überprüfen.",
@@ -164,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta-)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.",
"Clear Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung löschen",
"Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen",
- "Limit %s access to users meeting these criteria:" : "Zugriff auf %s auf Benutzer beschränken die folgende Kriterien erfüllen:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwandt, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lasse das Eingabefeld leer. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. "
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen überprüft, aber einen Nutzer gefunden. Nur der Erste kann sich anmelden. Verwende möglicherweise einen engeren Filter."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index 2ebd5d878e1..265c252579f 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -38,7 +38,7 @@
"Select attributes" : "Attribute auswählen",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfe Deine Loginattribute und Deinen Benutzernamen. Gültige Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>",
"User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen überprüft, aber einen Nutzer gefunden. Nur der Erste kann sich anmelden. Verwende möglicherweise einen engeren Filter.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen geprüft, es wurde mehr als ein Nutzer gefunden. Nur. der ersten Nutzer wird in der Lage sein, sich anzumelden. Verwende einen weiter einschränkenenden Filter.",
"An unspecified error occurred. Please check the settings and the log." : "Ein nicht näher spezifizierter Fehler ist aufgetreten. Bitte prüfe die Einstellungen und die Logdatei.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte Host, Port und Anmeldeinformationen überprüfen.",
@@ -162,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta-)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.",
"Clear Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung löschen",
"Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen",
- "Limit %s access to users meeting these criteria:" : "Zugriff auf %s auf Benutzer beschränken die folgende Kriterien erfüllen:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwandt, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lasse das Eingabefeld leer. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. "
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen überprüft, aber einen Nutzer gefunden. Nur der Erste kann sich anmelden. Verwende möglicherweise einen engeren Filter."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js
index 725abb1776c..3c0de5ea9a5 100644
--- a/apps/user_ldap/l10n/de_DE.js
+++ b/apps/user_ldap/l10n/de_DE.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Select attributes" : "Attribute auswählen",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfen Sie Ihre Loginattribute und Ihren Benutzernamen. Gültiger Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>",
"User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen überprüft, aber einen Nutzer gefunden. Nur der Erste kann sich anmelden. Verwenden Sie möglicherweise einen engeren Filter.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen geprüft, es wurde mehr als ein Nutzer gefunden. Nur. der ersten Nutzer wird in der Lage sein, sich anzumelden. Verwenden Sie einen weiter einschränkenenden Filter.",
"An unspecified error occurred. Please check the settings and the log." : "Ein nicht näher spezifizierter Fehler ist aufgetreten. Bitte überprüfe die Einstellungen und die Logdatei.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte überprüfen Sie Host, Port und Anmeldeinformationen.",
@@ -48,7 +48,7 @@ OC.L10N.register(
"Please provide a login name to test against" : "Bitte geben Sie einen Benutzernamen an, um gegen diesen zu testen",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.",
"Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:",
- "LDAP / AD integration" : "LDAP / AD Integration",
+ "LDAP / AD integration" : "LDAP/AD-Integration",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte geben Sie es in den erweiterten LDAP-Einstellungen selber an.",
@@ -164,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Benutzernamen dienen zum Speichern und Zuweisen von (Meta-)Daten. Um Benutzer eindeutig zu identifizieren und zu erkennen, besitzt jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des jeweiligen Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzers zugeordnet. Darüber hinaus wird der DN auch zwischengespeichert, um die Interaktion über LDAP zu reduzieren, was aber nicht zur Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird durchgängig verwendet. Ein Löschen der Zuordnungen führt zum systemweiten Verbleib von Restdaten. Es bleibt nicht auf eine einzelne Konfiguration beschränkt, sondern wirkt sich auf alle LDAP-Konfigurationen aus! Löschen Sie die Zuordnungen nie innerhalb einer Produktivumgebung, sondern nur in einer Test- oder Experimentierumgebung.",
"Clear Username-LDAP User Mapping" : "Lösche LDAP-Benutzernamenzuordnung",
"Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung",
- "Limit %s access to users meeting these criteria:" : "Zugriff auf %s auf Benutzer beschränken die folgende Kriterien erfüllen:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwandt, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lassen Sie das Eingabefeld leer. \nUm ein ähnliches Verhalten wie vor Owncloud 5 zu erreichen, geben Sie das Benutzer-Anzeige-Attribut in das folgende Feld ein. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen überprüft, aber einen Nutzer gefunden. Nur der Erste kann sich anmelden. Verwenden Sie möglicherweise einen engeren Filter."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json
index d919c195053..2bee5da66de 100644
--- a/apps/user_ldap/l10n/de_DE.json
+++ b/apps/user_ldap/l10n/de_DE.json
@@ -38,7 +38,7 @@
"Select attributes" : "Attribute auswählen",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfen Sie Ihre Loginattribute und Ihren Benutzernamen. Gültiger Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>",
"User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen überprüft, aber einen Nutzer gefunden. Nur der Erste kann sich anmelden. Verwenden Sie möglicherweise einen engeren Filter.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen geprüft, es wurde mehr als ein Nutzer gefunden. Nur. der ersten Nutzer wird in der Lage sein, sich anzumelden. Verwenden Sie einen weiter einschränkenenden Filter.",
"An unspecified error occurred. Please check the settings and the log." : "Ein nicht näher spezifizierter Fehler ist aufgetreten. Bitte überprüfe die Einstellungen und die Logdatei.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten, bitte überprüfen Sie Host, Port und Anmeldeinformationen.",
@@ -46,7 +46,7 @@
"Please provide a login name to test against" : "Bitte geben Sie einen Benutzernamen an, um gegen diesen zu testen",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.",
"Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:",
- "LDAP / AD integration" : "LDAP / AD Integration",
+ "LDAP / AD integration" : "LDAP/AD-Integration",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte geben Sie es in den erweiterten LDAP-Einstellungen selber an.",
@@ -162,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Benutzernamen dienen zum Speichern und Zuweisen von (Meta-)Daten. Um Benutzer eindeutig zu identifizieren und zu erkennen, besitzt jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des jeweiligen Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzers zugeordnet. Darüber hinaus wird der DN auch zwischengespeichert, um die Interaktion über LDAP zu reduzieren, was aber nicht zur Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird durchgängig verwendet. Ein Löschen der Zuordnungen führt zum systemweiten Verbleib von Restdaten. Es bleibt nicht auf eine einzelne Konfiguration beschränkt, sondern wirkt sich auf alle LDAP-Konfigurationen aus! Löschen Sie die Zuordnungen nie innerhalb einer Produktivumgebung, sondern nur in einer Test- oder Experimentierumgebung.",
"Clear Username-LDAP User Mapping" : "Lösche LDAP-Benutzernamenzuordnung",
"Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung",
- "Limit %s access to users meeting these criteria:" : "Zugriff auf %s auf Benutzer beschränken die folgende Kriterien erfüllen:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwandt, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lassen Sie das Eingabefeld leer. \nUm ein ähnliches Verhalten wie vor Owncloud 5 zu erreichen, geben Sie das Benutzer-Anzeige-Attribut in das folgende Feld ein. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Einstellungen überprüft, aber einen Nutzer gefunden. Nur der Erste kann sich anmelden. Verwenden Sie möglicherweise einen engeren Filter."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/el.js b/apps/user_ldap/l10n/el.js
index 1ffe7b2ca8e..8898e065d8e 100644
--- a/apps/user_ldap/l10n/el.js
+++ b/apps/user_ldap/l10n/el.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "Επιλογή χαρακτηριστικών",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Δεν βρέθηκε ο χρήστης. Παρακαλούμε ελέγξτε ότι τις ιδιότητες σύνδεσης και το όνομα χρήστη. Ενεργό φίλτρο (για αντιγραφή και επικόλληση για επικύρωση σε γραμμή εντολών): ",
"User found and settings verified." : "Ο χρήστης βρέθηκε και οι ρυθμίσεις επιβεβαιώθηκαν.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Οι ρυθμίσεις επαληθεύτηκαν αλλά βρέθηκε ένας χρήστης. Μόνο ο πρώτος θα μπορέσει να συνδεθεί. Εξετάστε τη χρήση πιο επιλεκτικού φίλτρου.",
"An unspecified error occurred. Please check the settings and the log." : "Προέκυψε ένα απροσδιόριστο σφάλμα. Παρακαλούμε ελέγξτε τις ρυθμίσεςι και το αρχείο ακταγραφής.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Το φίλτρο αναζήτησης δεν είναι έγκυρο, πιθανώς λόγω συντακτικών προβλημάτων όπως μη ταίριασμα ανοίγματος και κλεισίματος αγκυλών. Παρακαλούμε διορθώστε.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Προέκυψε σφάλμα σύνδεσης στο LDAP / AD, παρακαλούμε ελέγξτε διακομιστή θύρα και διαπιστευτήρια.",
@@ -152,6 +151,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Αντιστοίχιση Χρηστών Όνομα Χρήστη-LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Τα ονόματα χρηστών χρησιμοποιούνται για την αποθήκευση και τον προσδιορισμό των (μετα) δεδομένων. Προκειμένου να προσδιοριστούν με ακρίβεια και να αναγνωριστούν οι χρήστες, κάθε χρήστης LDAP θα έχει ένα εσωτερικό όνομα. Αυτό απαιτεί μια αντιστοίχιση του ονόματος χρήστη με το χρήστη LDAP. Το όνομα χρήστη που δημιουργήθηκαν αντιστοιχίζεται στην UUID του χρήστη LDAP. Επιπροσθέτως, το DN αποθηκεύεται προσωρινά (cache) ώστε να μειωθεί η αλληλεπίδραση LDAP, αλλά δεν χρησιμοποιείται για την ταυτοποίηση. Αν το DN αλλάξει, οι αλλαγές θα εντοπιστούν. Το εσωτερικό όνομα χρήστη χρησιμοποιείται παντού. Η εκκαθάριση των αντιστοιχίσεων θα αφήσει υπολείμματα παντού. Η εκκαθάριση των αντιστοιχίσεων δεν επηρεάζεται από τη διαμόρφωση, επηρεάζει όλες τις διαμορφώσεις LDAP! Μην διαγράψετε ποτέ τις αντιστοιχίσεις σε ένα λειτουργικό περιβάλλον παρά μόνο σε δοκιμές ή σε πειραματικό στάδιο.",
"Clear Username-LDAP User Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Χρήστη LDAP-Χρήστη",
- "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας"
+ "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Οι ρυθμίσεις επαληθεύτηκαν αλλά βρέθηκε ένας χρήστης. Μόνο ο πρώτος θα μπορέσει να συνδεθεί. Εξετάστε τη χρήση πιο επιλεκτικού φίλτρου."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/el.json b/apps/user_ldap/l10n/el.json
index 0751237abbc..01e90a84c3a 100644
--- a/apps/user_ldap/l10n/el.json
+++ b/apps/user_ldap/l10n/el.json
@@ -38,7 +38,6 @@
"Select attributes" : "Επιλογή χαρακτηριστικών",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Δεν βρέθηκε ο χρήστης. Παρακαλούμε ελέγξτε ότι τις ιδιότητες σύνδεσης και το όνομα χρήστη. Ενεργό φίλτρο (για αντιγραφή και επικόλληση για επικύρωση σε γραμμή εντολών): ",
"User found and settings verified." : "Ο χρήστης βρέθηκε και οι ρυθμίσεις επιβεβαιώθηκαν.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Οι ρυθμίσεις επαληθεύτηκαν αλλά βρέθηκε ένας χρήστης. Μόνο ο πρώτος θα μπορέσει να συνδεθεί. Εξετάστε τη χρήση πιο επιλεκτικού φίλτρου.",
"An unspecified error occurred. Please check the settings and the log." : "Προέκυψε ένα απροσδιόριστο σφάλμα. Παρακαλούμε ελέγξτε τις ρυθμίσεςι και το αρχείο ακταγραφής.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Το φίλτρο αναζήτησης δεν είναι έγκυρο, πιθανώς λόγω συντακτικών προβλημάτων όπως μη ταίριασμα ανοίγματος και κλεισίματος αγκυλών. Παρακαλούμε διορθώστε.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Προέκυψε σφάλμα σύνδεσης στο LDAP / AD, παρακαλούμε ελέγξτε διακομιστή θύρα και διαπιστευτήρια.",
@@ -150,6 +149,7 @@
"Username-LDAP User Mapping" : "Αντιστοίχιση Χρηστών Όνομα Χρήστη-LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Τα ονόματα χρηστών χρησιμοποιούνται για την αποθήκευση και τον προσδιορισμό των (μετα) δεδομένων. Προκειμένου να προσδιοριστούν με ακρίβεια και να αναγνωριστούν οι χρήστες, κάθε χρήστης LDAP θα έχει ένα εσωτερικό όνομα. Αυτό απαιτεί μια αντιστοίχιση του ονόματος χρήστη με το χρήστη LDAP. Το όνομα χρήστη που δημιουργήθηκαν αντιστοιχίζεται στην UUID του χρήστη LDAP. Επιπροσθέτως, το DN αποθηκεύεται προσωρινά (cache) ώστε να μειωθεί η αλληλεπίδραση LDAP, αλλά δεν χρησιμοποιείται για την ταυτοποίηση. Αν το DN αλλάξει, οι αλλαγές θα εντοπιστούν. Το εσωτερικό όνομα χρήστη χρησιμοποιείται παντού. Η εκκαθάριση των αντιστοιχίσεων θα αφήσει υπολείμματα παντού. Η εκκαθάριση των αντιστοιχίσεων δεν επηρεάζεται από τη διαμόρφωση, επηρεάζει όλες τις διαμορφώσεις LDAP! Μην διαγράψετε ποτέ τις αντιστοιχίσεις σε ένα λειτουργικό περιβάλλον παρά μόνο σε δοκιμές ή σε πειραματικό στάδιο.",
"Clear Username-LDAP User Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Χρήστη LDAP-Χρήστη",
- "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας"
+ "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Οι ρυθμίσεις επαληθεύτηκαν αλλά βρέθηκε ένας χρήστης. Μόνο ο πρώτος θα μπορέσει να συνδεθεί. Εξετάστε τη χρήση πιο επιλεκτικού φίλτρου."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js
index 581b29c090e..19dfa39b3a0 100644
--- a/apps/user_ldap/l10n/en_GB.js
+++ b/apps/user_ldap/l10n/en_GB.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "Select attributes",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>",
"User found and settings verified." : "User found and settings verified.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter.",
"An unspecified error occurred. Please check the settings and the log." : "An unspecified error occurred. Please check the settings and the log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like an uneven number of opened and closed brackets. Please revise.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "A connection error to LDAP / AD occurred, please check host, port and credentials.",
@@ -158,6 +157,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Username-LDAP User Mapping",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Usernames are used to store and assign (meta) data. In order to precisely identify and recognise users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.",
"Clear Username-LDAP User Mapping" : "Clear Username-LDAP User Mapping",
- "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping"
+ "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json
index 603567e9dd2..b32fc2c9e9e 100644
--- a/apps/user_ldap/l10n/en_GB.json
+++ b/apps/user_ldap/l10n/en_GB.json
@@ -38,7 +38,6 @@
"Select attributes" : "Select attributes",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>",
"User found and settings verified." : "User found and settings verified.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter.",
"An unspecified error occurred. Please check the settings and the log." : "An unspecified error occurred. Please check the settings and the log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like an uneven number of opened and closed brackets. Please revise.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "A connection error to LDAP / AD occurred, please check host, port and credentials.",
@@ -156,6 +155,7 @@
"Username-LDAP User Mapping" : "Username-LDAP User Mapping",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Usernames are used to store and assign (meta) data. In order to precisely identify and recognise users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.",
"Clear Username-LDAP User Mapping" : "Clear Username-LDAP User Mapping",
- "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping"
+ "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js
index 8394ca780cc..5a6271b18bc 100644
--- a/apps/user_ldap/l10n/es.js
+++ b/apps/user_ldap/l10n/es.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Select attributes" : "Seleccionar atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Usuario no encontrado. Por favor verifique los atributos de inicio de sesión y nombre de usuario. Filtro eficaz (copie-y-pegue para validar desde la línea de comando):<br/>",
"User found and settings verified." : "Usuario encontrado y configuración verificada.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Configuración verificada, pero no se encuentra ningún usuario. Sólo el primero podrá iniciar sesión. Considere un filtro más estrecho.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Ajustes verificados, pero más de un usuario encontrado. Solo el primero será capaz de iniciar sesión. Considere un filtro más fino.",
"An unspecified error occurred. Please check the settings and the log." : "Un error no especificado ocurrió. Por favor verifique las configuraciones y el registro.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de búsqueda es inválido, probablemente debido a problemas de sintáxis tales como números impares de paréntesis abiertos y cerrados. Por favor revíselos.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Un error de conexión a LDAP / AD ocurrió, por favor verifique host, puerto y credenciales.",
@@ -164,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.",
"Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP",
"Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP",
- "Limit %s access to users meeting these criteria:" : "Limitado %s acceso a los usuarios del encuentro con este criterio.",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "De manera predeterminada el nombre de usuario interno será creado desde el atributo UUID. Eso asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. El nombre de usuario interno tiene la única restricción de que solo estos caracteres son válidos: [ a-zA-Z0-9_.@- ]. Otros caracteres son reemplazados con su ASCII correspondiente o simplemente omitidos. De existir colisiones un numero será agregado. El nombre de usuario interno es usado para identificar a un usuario internamente. También es el nombre por defecto para la carpeta de inicio. También es parte de los URLs remotos, por ejemplo para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser sobrescrito. Para lograr un comportamiento como antes de ownCloud 5 ingrese el nombre del atributo del usuario en el siguiente campo. Déjelo vacío para el comportamiento predefinido. Los cambios solo tendrán efecto en usuarios LDAP recientemente agregados (mapeados)."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Configuración verificada, pero no se encuentra ningún usuario. Sólo el primero podrá iniciar sesión. Considere un filtro más estrecho."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json
index cf2d433965b..7fc554ce122 100644
--- a/apps/user_ldap/l10n/es.json
+++ b/apps/user_ldap/l10n/es.json
@@ -38,7 +38,7 @@
"Select attributes" : "Seleccionar atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Usuario no encontrado. Por favor verifique los atributos de inicio de sesión y nombre de usuario. Filtro eficaz (copie-y-pegue para validar desde la línea de comando):<br/>",
"User found and settings verified." : "Usuario encontrado y configuración verificada.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Configuración verificada, pero no se encuentra ningún usuario. Sólo el primero podrá iniciar sesión. Considere un filtro más estrecho.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Ajustes verificados, pero más de un usuario encontrado. Solo el primero será capaz de iniciar sesión. Considere un filtro más fino.",
"An unspecified error occurred. Please check the settings and the log." : "Un error no especificado ocurrió. Por favor verifique las configuraciones y el registro.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de búsqueda es inválido, probablemente debido a problemas de sintáxis tales como números impares de paréntesis abiertos y cerrados. Por favor revíselos.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Un error de conexión a LDAP / AD ocurrió, por favor verifique host, puerto y credenciales.",
@@ -162,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.",
"Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP",
"Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP",
- "Limit %s access to users meeting these criteria:" : "Limitado %s acceso a los usuarios del encuentro con este criterio.",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "De manera predeterminada el nombre de usuario interno será creado desde el atributo UUID. Eso asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. El nombre de usuario interno tiene la única restricción de que solo estos caracteres son válidos: [ a-zA-Z0-9_.@- ]. Otros caracteres son reemplazados con su ASCII correspondiente o simplemente omitidos. De existir colisiones un numero será agregado. El nombre de usuario interno es usado para identificar a un usuario internamente. También es el nombre por defecto para la carpeta de inicio. También es parte de los URLs remotos, por ejemplo para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser sobrescrito. Para lograr un comportamiento como antes de ownCloud 5 ingrese el nombre del atributo del usuario en el siguiente campo. Déjelo vacío para el comportamiento predefinido. Los cambios solo tendrán efecto en usuarios LDAP recientemente agregados (mapeados)."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Configuración verificada, pero no se encuentra ningún usuario. Sólo el primero podrá iniciar sesión. Considere un filtro más estrecho."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index 037adac7ac3..3f77a537d03 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -5,12 +5,12 @@ OC.L10N.register(
"Failed to delete the server configuration" : "Échec de la suppression de la configuration du serveur",
"The configuration is invalid: anonymous bind is not allowed." : "La configuration n'est pas valide : le lien anonyme n'est pas autorisé.",
"The configuration is valid and the connection could be established!" : "La configuration est valide et la connexion peut être établie !",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le Bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
"The configuration is invalid. Please have a look at the logs for further details." : "La configuration n'est pas valable. Veuillez consulter les logs pour plus de détails.",
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
- " Could not set configuration %s" : "Impossible de spécifier la configuration %s",
+ " Could not set configuration %s" : "Impossible d'appliquer la configuration %s",
"Action does not exist" : "L'action n'existe pas",
"The Base DN appears to be wrong" : "Le DN de base est erroné",
"Testing configuration…" : "Test de configuration",
@@ -20,9 +20,9 @@ OC.L10N.register(
"Select groups" : "Sélectionnez les groupes",
"Select object classes" : "Sélectionner les classes d'objet",
"Please check the credentials, they seem to be wrong." : "Veuillez vérifier vos informations d'identification",
- "Please specify the port, it could not be auto-detected." : "Veuillez spécifier le port, il n'a pu être détecté automatiquement",
+ "Please specify the port, it could not be auto-detected." : "Veuillez indiquer le port, il n'a pu être détecté automatiquement.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Le DN de base n'a pu être détecté automatiquement. Vérifiez les informations d'identification, l'hôte et le port.",
- "Could not detect Base DN, please enter it manually." : "Impossible de détecter le DN de base, veuillez le spécifier manuellement",
+ "Could not detect Base DN, please enter it manually." : "Impossible de détecter le DN de base, veuillez le saisir manuellement.",
"{nthServer}. Server" : "{nthServer}. Serveur",
"No object found in the given Base DN. Please revise." : "Aucun objet trouvé dans le DN de base spécifié. Veuillez le vérifier.",
"More than 1,000 directory entries available." : "Il y a plus de 1 000 entrées de répertoire disponibles.",
@@ -36,11 +36,11 @@ OC.L10N.register(
"LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?",
- "Mode switch" : "Changer de mode",
+ "Mode switch" : "Basculer de mode",
"Select attributes" : "Sélectionner les attributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>",
"User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Les paramètres ont été vérifiés, mais la recherche retourne plus d'un utilisateur. Seul le premier trouvé pourra se connecter. Nous vous conseillons d'utiliser un filtre plus restrictif.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Paramètres vérifiés, mais plus d'un utilisateur trouvé. Seul le premier pourra se connecter. Considérez un filtre plus restreint.",
"An unspecified error occurred. Please check the settings and the log." : "Une erreur inconnue s'est produite. Veuillez vérifier les paramètres et le log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Le filtre de recherche n'est pas valide, probablement à cause de problèmes de syntaxe tels que des parenthèses manquantes. Veuillez le corriger.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Une erreur s'est produite lors de la connexion au LDAP / AD. Veuillez vérifier l'hôte, le port et les informations d'identification.",
@@ -89,7 +89,7 @@ OC.L10N.register(
"Password" : "Mot de passe",
"For anonymous access, leave DN and Password empty." : "Pour un accès anonyme, laisser le DN utilisateur et le mot de passe vides.",
"One Base DN per line" : "Un DN de base par ligne",
- "You can specify Base DN for users and groups in the Advanced tab" : "Vous pouvez spécifier les DN de base de vos utilisateurs et groupes via l'onglet Avancé",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Vous pouvez indiquer le DN de base de vos utilisateurs et groupes via l'onglet Avancé",
"Detect Base DN" : "Détecter le DN de base",
"Test Base DN" : "Tester le DN de base",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Évite les requêtes LDAP automatiques. Mieux pour les installations de grande ampleur, mais demande des connaissances en LDAP.",
@@ -122,7 +122,7 @@ OC.L10N.register(
"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." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.",
"Cache Time-To-Live" : "Durée de vie du cache (TTL)",
"in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.",
- "Directory Settings" : "Paramètres du répertoire",
+ "Directory Settings" : "Paramètres du dossier",
"User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur",
"The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.",
"2nd User Display Name Field" : "Second attribut pour le nom d'affichage",
@@ -164,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Les noms d'utilisateurs sont utilisés pour le stockage et l'assignation de (meta) données. Pour identifier et reconnaître précisément les utilisateurs, chaque utilisateur LDAP aura un nom interne spécifique. Cela requiert l'association d'un nom d'utilisateur ownCloud à un nom d'utilisateur LDAP. Le nom d'utilisateur créé est associé à l'attribut UUID de l'utilisateur LDAP. Par ailleurs, le DN est mémorisé en cache pour limiter les interactions LDAP mais il n'est pas utilisé pour l'identification. Si le DN est modifié, ces modifications seront retrouvées. Seul le nom interne à ownCloud est utilisé au sein du produit. Supprimer les associations créera des orphelins et l'action affectera toutes les configurations LDAP. NE JAMAIS SUPPRIMER LES ASSOCIATIONS EN ENVIRONNEMENT DE PRODUCTION, mais uniquement sur des environnements de tests et d'expérimentations.",
"Clear Username-LDAP User Mapping" : "Supprimer l'association utilisateur interne-utilisateur LDAP",
"Clear Groupname-LDAP Group Mapping" : "Supprimer l'association nom de groupe-groupe LDAP",
- "Limit %s access to users meeting these criteria:" : "Limiter l'accès à %s aux utilisateurs validant ces critères :",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé depuis l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi parti des URLs distantes, par exemple pour tous les services *DAV. Avec ce paramètre, le comportement par défaut peut être écrasé. Pour avoir un comportement similaire à ownCloud 5, entrez le nom d'affichage de l'utilisateur dans le champ suivant. Laissez le vide pour utiliser le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés)."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Les paramètres ont été vérifiés, mais la recherche retourne plus d'un utilisateur. Seul le premier trouvé pourra se connecter. Nous vous conseillons d'utiliser un filtre plus restrictif."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index 89d9190fa32..7f402c10a50 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -3,12 +3,12 @@
"Failed to delete the server configuration" : "Échec de la suppression de la configuration du serveur",
"The configuration is invalid: anonymous bind is not allowed." : "La configuration n'est pas valide : le lien anonyme n'est pas autorisé.",
"The configuration is valid and the connection could be established!" : "La configuration est valide et la connexion peut être établie !",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuration est valable, mais le Bind a échoué. Veuillez vérifier les paramètres du serveur ainsi que vos identifiants de connexion.",
"The configuration is invalid. Please have a look at the logs for further details." : "La configuration n'est pas valable. Veuillez consulter les logs pour plus de détails.",
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
- " Could not set configuration %s" : "Impossible de spécifier la configuration %s",
+ " Could not set configuration %s" : "Impossible d'appliquer la configuration %s",
"Action does not exist" : "L'action n'existe pas",
"The Base DN appears to be wrong" : "Le DN de base est erroné",
"Testing configuration…" : "Test de configuration",
@@ -18,9 +18,9 @@
"Select groups" : "Sélectionnez les groupes",
"Select object classes" : "Sélectionner les classes d'objet",
"Please check the credentials, they seem to be wrong." : "Veuillez vérifier vos informations d'identification",
- "Please specify the port, it could not be auto-detected." : "Veuillez spécifier le port, il n'a pu être détecté automatiquement",
+ "Please specify the port, it could not be auto-detected." : "Veuillez indiquer le port, il n'a pu être détecté automatiquement.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Le DN de base n'a pu être détecté automatiquement. Vérifiez les informations d'identification, l'hôte et le port.",
- "Could not detect Base DN, please enter it manually." : "Impossible de détecter le DN de base, veuillez le spécifier manuellement",
+ "Could not detect Base DN, please enter it manually." : "Impossible de détecter le DN de base, veuillez le saisir manuellement.",
"{nthServer}. Server" : "{nthServer}. Serveur",
"No object found in the given Base DN. Please revise." : "Aucun objet trouvé dans le DN de base spécifié. Veuillez le vérifier.",
"More than 1,000 directory entries available." : "Il y a plus de 1 000 entrées de répertoire disponibles.",
@@ -34,11 +34,11 @@
"LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?",
- "Mode switch" : "Changer de mode",
+ "Mode switch" : "Basculer de mode",
"Select attributes" : "Sélectionner les attributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>",
"User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Les paramètres ont été vérifiés, mais la recherche retourne plus d'un utilisateur. Seul le premier trouvé pourra se connecter. Nous vous conseillons d'utiliser un filtre plus restrictif.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Paramètres vérifiés, mais plus d'un utilisateur trouvé. Seul le premier pourra se connecter. Considérez un filtre plus restreint.",
"An unspecified error occurred. Please check the settings and the log." : "Une erreur inconnue s'est produite. Veuillez vérifier les paramètres et le log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Le filtre de recherche n'est pas valide, probablement à cause de problèmes de syntaxe tels que des parenthèses manquantes. Veuillez le corriger.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Une erreur s'est produite lors de la connexion au LDAP / AD. Veuillez vérifier l'hôte, le port et les informations d'identification.",
@@ -87,7 +87,7 @@
"Password" : "Mot de passe",
"For anonymous access, leave DN and Password empty." : "Pour un accès anonyme, laisser le DN utilisateur et le mot de passe vides.",
"One Base DN per line" : "Un DN de base par ligne",
- "You can specify Base DN for users and groups in the Advanced tab" : "Vous pouvez spécifier les DN de base de vos utilisateurs et groupes via l'onglet Avancé",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Vous pouvez indiquer le DN de base de vos utilisateurs et groupes via l'onglet Avancé",
"Detect Base DN" : "Détecter le DN de base",
"Test Base DN" : "Tester le DN de base",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Évite les requêtes LDAP automatiques. Mieux pour les installations de grande ampleur, mais demande des connaissances en LDAP.",
@@ -120,7 +120,7 @@
"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." : "Non recommandé, à utiliser à des fins de tests uniquement. Si la connexion ne fonctionne qu'avec cette option, importez le certificat SSL du serveur LDAP dans le serveur %s.",
"Cache Time-To-Live" : "Durée de vie du cache (TTL)",
"in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.",
- "Directory Settings" : "Paramètres du répertoire",
+ "Directory Settings" : "Paramètres du dossier",
"User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur",
"The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.",
"2nd User Display Name Field" : "Second attribut pour le nom d'affichage",
@@ -162,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Les noms d'utilisateurs sont utilisés pour le stockage et l'assignation de (meta) données. Pour identifier et reconnaître précisément les utilisateurs, chaque utilisateur LDAP aura un nom interne spécifique. Cela requiert l'association d'un nom d'utilisateur ownCloud à un nom d'utilisateur LDAP. Le nom d'utilisateur créé est associé à l'attribut UUID de l'utilisateur LDAP. Par ailleurs, le DN est mémorisé en cache pour limiter les interactions LDAP mais il n'est pas utilisé pour l'identification. Si le DN est modifié, ces modifications seront retrouvées. Seul le nom interne à ownCloud est utilisé au sein du produit. Supprimer les associations créera des orphelins et l'action affectera toutes les configurations LDAP. NE JAMAIS SUPPRIMER LES ASSOCIATIONS EN ENVIRONNEMENT DE PRODUCTION, mais uniquement sur des environnements de tests et d'expérimentations.",
"Clear Username-LDAP User Mapping" : "Supprimer l'association utilisateur interne-utilisateur LDAP",
"Clear Groupname-LDAP Group Mapping" : "Supprimer l'association nom de groupe-groupe LDAP",
- "Limit %s access to users meeting these criteria:" : "Limiter l'accès à %s aux utilisateurs validant ces critères :",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé depuis l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi parti des URLs distantes, par exemple pour tous les services *DAV. Avec ce paramètre, le comportement par défaut peut être écrasé. Pour avoir un comportement similaire à ownCloud 5, entrez le nom d'affichage de l'utilisateur dans le champ suivant. Laissez le vide pour utiliser le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés)."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Les paramètres ont été vérifiés, mais la recherche retourne plus d'un utilisateur. Seul le premier trouvé pourra se connecter. Nous vous conseillons d'utiliser un filtre plus restrictif."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js
index 3925451ea9f..9cc55ca97cf 100644
--- a/apps/user_ldap/l10n/gl.js
+++ b/apps/user_ldap/l10n/gl.js
@@ -38,7 +38,6 @@ OC.L10N.register(
"Select attributes" : "Seleccione os atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Non se atopou o usuario. Recomendase consultar os atributos de acceso e o nome de usuario. Filtro eficaz (copiar e pegar para a validación en liña de ordes): <br/>",
"User found and settings verified." : "Atopouse o usuario e verificáronse os axustes.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Os axustes foron verificados, mais atopou un usuario. Só o primeiro deles será quen de iniciar sesión. Considere o so dun filtro máis preciso.",
"An unspecified error occurred. Please check the settings and the log." : "Produciuse un erro non agardado. Comprobe os axustes e o rexistro.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de busca é incorrecto, probabelmente por mor de erros de sintaxe como un número impar de chaves de apertura/peche. Revíseo.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Produciuse un erro de conexión no LDAP / AD, comprobe a máquina o porto e as credenciais.",
@@ -150,6 +149,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario LDAP»",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Os nomes de usuario empréganse para almacenar e asignar (meta) datos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome de usuario interno. Isto require unha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun entorno de produción. Limpar as asignacións só en fases de proba ou experimentais.",
"Clear Username-LDAP User Mapping" : "Limpar a asignación do usuario ao «nome de usuario LDAP»",
- "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»"
+ "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Os axustes foron verificados, mais atopou un usuario. Só o primeiro deles será quen de iniciar sesión. Considere o so dun filtro máis preciso."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json
index 4ba0f687666..794296dd32b 100644
--- a/apps/user_ldap/l10n/gl.json
+++ b/apps/user_ldap/l10n/gl.json
@@ -36,7 +36,6 @@
"Select attributes" : "Seleccione os atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Non se atopou o usuario. Recomendase consultar os atributos de acceso e o nome de usuario. Filtro eficaz (copiar e pegar para a validación en liña de ordes): <br/>",
"User found and settings verified." : "Atopouse o usuario e verificáronse os axustes.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Os axustes foron verificados, mais atopou un usuario. Só o primeiro deles será quen de iniciar sesión. Considere o so dun filtro máis preciso.",
"An unspecified error occurred. Please check the settings and the log." : "Produciuse un erro non agardado. Comprobe os axustes e o rexistro.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de busca é incorrecto, probabelmente por mor de erros de sintaxe como un número impar de chaves de apertura/peche. Revíseo.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Produciuse un erro de conexión no LDAP / AD, comprobe a máquina o porto e as credenciais.",
@@ -148,6 +147,7 @@
"Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario LDAP»",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Os nomes de usuario empréganse para almacenar e asignar (meta) datos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome de usuario interno. Isto require unha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun entorno de produción. Limpar as asignacións só en fases de proba ou experimentais.",
"Clear Username-LDAP User Mapping" : "Limpar a asignación do usuario ao «nome de usuario LDAP»",
- "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»"
+ "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Os axustes foron verificados, mais atopou un usuario. Só o primeiro deles será quen de iniciar sesión. Considere o so dun filtro máis preciso."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/he.js b/apps/user_ldap/l10n/he.js
index 67e716f2fce..cd053463861 100644
--- a/apps/user_ldap/l10n/he.js
+++ b/apps/user_ldap/l10n/he.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "בחירת מאפיינים",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "משתמש לא אותר. יש לבדוק את מאפייני ההתחברות ושם המשתמש. מסנן אפקטיבי (העתקה והדבקה לאימות שורת פקודה):<br/>",
"User found and settings verified." : "משתמש אותר והגדרות אומתו.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "הגדרות אומתו, אך רק משתמש אחד אותר. רק הראשון יוכל להתחבר. יש לבחון שימוש בסינון צר יותר.",
"An unspecified error occurred. Please check the settings and the log." : "אירעה שגיאה לא מזוהה. יש לבדוק את ההגדרות ואת הלוג.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "סינון החיפוש אינו חוקי. ככל הנראה בשל שיאה תחבירית כגון מספר לא שווה של פתח-סוגריים וסגור-סוגריים. יש לתקן.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "אירעה שגיאת חיבור ל- LDAP / AD, יש לבדוק את השרת, שער החיבור - פורט ופרטי הכניסה. ",
@@ -149,6 +148,7 @@ OC.L10N.register(
"UUID Attribute for Groups:" : "מאפייני UUID לקבוצות:",
"Username-LDAP User Mapping" : "מיפוי שם משתמש LDAP:",
"Clear Username-LDAP User Mapping" : "ניקוי מיפוי שם משתמש LDAP:",
- "Clear Groupname-LDAP Group Mapping" : "ניקוי מיפוי שם משתמש קבוצה LDAP:"
+ "Clear Groupname-LDAP Group Mapping" : "ניקוי מיפוי שם משתמש קבוצה LDAP:",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "הגדרות אומתו, אך רק משתמש אחד אותר. רק הראשון יוכל להתחבר. יש לבחון שימוש בסינון צר יותר."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/he.json b/apps/user_ldap/l10n/he.json
index 77942e51e58..53e2c2c5a8d 100644
--- a/apps/user_ldap/l10n/he.json
+++ b/apps/user_ldap/l10n/he.json
@@ -38,7 +38,6 @@
"Select attributes" : "בחירת מאפיינים",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "משתמש לא אותר. יש לבדוק את מאפייני ההתחברות ושם המשתמש. מסנן אפקטיבי (העתקה והדבקה לאימות שורת פקודה):<br/>",
"User found and settings verified." : "משתמש אותר והגדרות אומתו.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "הגדרות אומתו, אך רק משתמש אחד אותר. רק הראשון יוכל להתחבר. יש לבחון שימוש בסינון צר יותר.",
"An unspecified error occurred. Please check the settings and the log." : "אירעה שגיאה לא מזוהה. יש לבדוק את ההגדרות ואת הלוג.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "סינון החיפוש אינו חוקי. ככל הנראה בשל שיאה תחבירית כגון מספר לא שווה של פתח-סוגריים וסגור-סוגריים. יש לתקן.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "אירעה שגיאת חיבור ל- LDAP / AD, יש לבדוק את השרת, שער החיבור - פורט ופרטי הכניסה. ",
@@ -147,6 +146,7 @@
"UUID Attribute for Groups:" : "מאפייני UUID לקבוצות:",
"Username-LDAP User Mapping" : "מיפוי שם משתמש LDAP:",
"Clear Username-LDAP User Mapping" : "ניקוי מיפוי שם משתמש LDAP:",
- "Clear Groupname-LDAP Group Mapping" : "ניקוי מיפוי שם משתמש קבוצה LDAP:"
+ "Clear Groupname-LDAP Group Mapping" : "ניקוי מיפוי שם משתמש קבוצה LDAP:",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "הגדרות אומתו, אך רק משתמש אחד אותר. רק הראשון יוכל להתחבר. יש לבחון שימוש בסינון צר יותר."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/hu_HU.js b/apps/user_ldap/l10n/hu_HU.js
index 4873d82aac6..0b1327503ac 100644
--- a/apps/user_ldap/l10n/hu_HU.js
+++ b/apps/user_ldap/l10n/hu_HU.js
@@ -37,7 +37,6 @@ OC.L10N.register(
"Mode switch" : "Üzemmód váltás",
"Select attributes" : "Attribútumok kiválasztása",
"User found and settings verified." : "Felhasználó megtalálva, beállítások ellenőrizve.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Beállítások ellenőrizve, de egy felhasználó található. Csak az első léphet be automatikusan. Próbálj egy pontosabb szűrőt.",
"An unspecified error occurred. Please check the settings and the log." : "Meghatározatlan hiba történt. Kérlek ellenőrizd a beállításokat és a naplót.",
"Password change rejected. Hint: " : "Jelszó módosítás elutasítva. Tipp:",
"LDAP / AD integration" : "LDAP / AD integráció",
@@ -130,6 +129,7 @@ OC.L10N.register(
"UUID Attribute for Groups:" : "A csoportok UUID attribútuma:",
"Username-LDAP User Mapping" : "Felhasználó - LDAP felhasználó hozzárendelés",
"Clear Username-LDAP User Mapping" : "A felhasználó - LDAP felhasználó hozzárendelés törlése",
- "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése"
+ "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Beállítások ellenőrizve, de egy felhasználó található. Csak az első léphet be automatikusan. Próbálj egy pontosabb szűrőt."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/hu_HU.json b/apps/user_ldap/l10n/hu_HU.json
index 889a5c79ebd..a76c333add7 100644
--- a/apps/user_ldap/l10n/hu_HU.json
+++ b/apps/user_ldap/l10n/hu_HU.json
@@ -35,7 +35,6 @@
"Mode switch" : "Üzemmód váltás",
"Select attributes" : "Attribútumok kiválasztása",
"User found and settings verified." : "Felhasználó megtalálva, beállítások ellenőrizve.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Beállítások ellenőrizve, de egy felhasználó található. Csak az első léphet be automatikusan. Próbálj egy pontosabb szűrőt.",
"An unspecified error occurred. Please check the settings and the log." : "Meghatározatlan hiba történt. Kérlek ellenőrizd a beállításokat és a naplót.",
"Password change rejected. Hint: " : "Jelszó módosítás elutasítva. Tipp:",
"LDAP / AD integration" : "LDAP / AD integráció",
@@ -128,6 +127,7 @@
"UUID Attribute for Groups:" : "A csoportok UUID attribútuma:",
"Username-LDAP User Mapping" : "Felhasználó - LDAP felhasználó hozzárendelés",
"Clear Username-LDAP User Mapping" : "A felhasználó - LDAP felhasználó hozzárendelés törlése",
- "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése"
+ "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Beállítások ellenőrizve, de egy felhasználó található. Csak az első léphet be automatikusan. Próbálj egy pontosabb szűrőt."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js
index 252fb9bd4ef..7f256c26649 100644
--- a/apps/user_ldap/l10n/id.js
+++ b/apps/user_ldap/l10n/id.js
@@ -40,13 +40,15 @@ OC.L10N.register(
"Select attributes" : "Pilih atribut",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Pengguna tidak ditemukan. Mohon periksa atribut login dan nama pengguna Anda. Penyaring efektif (salin dan tempel berikut untuk validasi baris perintah):\n<br/>",
"User found and settings verified." : "Pengguna ditemukan dan pengaturan terverifikasi.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Setelan terverifikasi, tapi ditemukan satu pengguna. Hanya yang pertama yang dapat login. Pertimbangkan dengan penyaringan yang lebih sempit.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Pengaturan terverifikasi, tapi lebih dari satu pengguna ditemukan. Hanya pengguna pertama yang dapat masuk log. Pertimbangkan lebih mempersempit penyaringan.",
"An unspecified error occurred. Please check the settings and the log." : "Terjadi kesalahan yang tidak disebutkan. Mohon periksa pengaturan dan log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Penyaring pencarian tidak sah, kemungkinan karena masalah sintaks seperti jumlah kurung buka dan tutup tidak sama. Mohon diperiksa.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Terjadi kesalahan sambungan ke LDAP / AD, mohon periksa host, port dan kredensial.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Placeholder %uid tidak ada. Placeholder akan digantikan dengan nama login saat melakukan kueri LDAP / AD.",
"Please provide a login name to test against" : "Mohon berikan nama login untuk mengujinya kembali",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kotak grup telah dinonaktifkan, karena server LDAP / AD tidak mendukung keanggotaan.",
+ "Password change rejected. Hint: " : "Perubahan sandi ditolak. Petunjuk:",
+ "LDAP / AD integration" : "Integrasi LDAP / AD",
"_%s group found_::_%s groups found_" : ["%s grup ditemukan"],
"_%s user found_::_%s users found_" : ["%s pengguna ditemukan"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Tidak mendeteksi atribut nama tampilan pengguna. Silakan menentukannya sendiri di pengaturan ldap lanjutan.",
@@ -141,6 +143,9 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ketika dihidupkan, grup yang berisi grup akan didukung. (Hanya bekerja jika atribut anggota grup berisi DN.)",
"Paging chunksize" : "Paging chunksize",
"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.)" : "Chunksize digunakan untuk pencarian paged LDAP yang mengembalikan hasil secara massal seperti enumerasi pengguna dan grup. (Atur dengan nilai 0 untuk menonaktifkan pencarian paged LDAP dalam situasi tersebut.)",
+ "Enable LDAP password changes per user" : "Aktifkan perubahan sandi LDAP per pengguna",
+ "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." : "Perbolehkan pengguna LDAP mengubah sandi mereka dan perbolehkan Administrator Super dan Administrator Grup untuk mengubah sandi pengguna LDAP mereka. Hanya bekerja ketika kebijaksanaan akses kontrol terconfigurasi berdasarkan server LDAP. Sebagaimana sandi dikirim dalam plain teks ke server LDAP, pengiriman enkripsi harus digunakan dan hashing sandi harus terkonfigurasi di server LDAP.",
+ "(New password is sent as plain text to LDAP)" : "(Sandi baru dikirim sebagai plain teks ke LDAP)",
"Special Attributes" : "Atribut Khusus",
"Quota Field" : "Kolom Kuota",
"Quota Default" : "Kuota Baku",
@@ -158,6 +163,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Pemetaan Pengguna LDAP-Nama pengguna",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nama pengguna digunakan untuk menyimpan dan menetapkan (meta) data. Dalam rangka untuk mengidentifikasi dan mengenali pengguna secara tepat, setiap pengguna LDAP akan memiliki nama pengguna internal. Hal ini memerlukan sebuah pemetaan dari nama pengguna ke pengguna LDAP. Nama pengguna yang dibuat akan dipetakan pada UUID pengguna LDAP. Selain itu, DN akan di cache untuk mengurangi interaksi LDAP, tetapi tidak digunakan untuk identifikasi. Jika DN berubah, perubahan akan ditemukan. Nama pengguna internal digunakan secara menyeluruh. Membersihkan pemetaan akan mempengaruhi semua konfigurasi LDAP! JANGAN PERNAH MENGHAPUS PEMETAAN PADA LINGKUNGAN PRODUKSI, hanya gunakan dalam tahap uji coba dan pengujian.",
"Clear Username-LDAP User Mapping" : "Bersihkan Pemetaan Pengguna LDAP-Nama pengguna",
- "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup"
+ "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Setelan terverifikasi, tapi ditemukan satu pengguna. Hanya yang pertama yang dapat login. Pertimbangkan dengan penyaringan yang lebih sempit."
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json
index e4675c1c0fc..7fc32321558 100644
--- a/apps/user_ldap/l10n/id.json
+++ b/apps/user_ldap/l10n/id.json
@@ -38,13 +38,15 @@
"Select attributes" : "Pilih atribut",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Pengguna tidak ditemukan. Mohon periksa atribut login dan nama pengguna Anda. Penyaring efektif (salin dan tempel berikut untuk validasi baris perintah):\n<br/>",
"User found and settings verified." : "Pengguna ditemukan dan pengaturan terverifikasi.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Setelan terverifikasi, tapi ditemukan satu pengguna. Hanya yang pertama yang dapat login. Pertimbangkan dengan penyaringan yang lebih sempit.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Pengaturan terverifikasi, tapi lebih dari satu pengguna ditemukan. Hanya pengguna pertama yang dapat masuk log. Pertimbangkan lebih mempersempit penyaringan.",
"An unspecified error occurred. Please check the settings and the log." : "Terjadi kesalahan yang tidak disebutkan. Mohon periksa pengaturan dan log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Penyaring pencarian tidak sah, kemungkinan karena masalah sintaks seperti jumlah kurung buka dan tutup tidak sama. Mohon diperiksa.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Terjadi kesalahan sambungan ke LDAP / AD, mohon periksa host, port dan kredensial.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Placeholder %uid tidak ada. Placeholder akan digantikan dengan nama login saat melakukan kueri LDAP / AD.",
"Please provide a login name to test against" : "Mohon berikan nama login untuk mengujinya kembali",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kotak grup telah dinonaktifkan, karena server LDAP / AD tidak mendukung keanggotaan.",
+ "Password change rejected. Hint: " : "Perubahan sandi ditolak. Petunjuk:",
+ "LDAP / AD integration" : "Integrasi LDAP / AD",
"_%s group found_::_%s groups found_" : ["%s grup ditemukan"],
"_%s user found_::_%s users found_" : ["%s pengguna ditemukan"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Tidak mendeteksi atribut nama tampilan pengguna. Silakan menentukannya sendiri di pengaturan ldap lanjutan.",
@@ -139,6 +141,9 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ketika dihidupkan, grup yang berisi grup akan didukung. (Hanya bekerja jika atribut anggota grup berisi DN.)",
"Paging chunksize" : "Paging chunksize",
"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.)" : "Chunksize digunakan untuk pencarian paged LDAP yang mengembalikan hasil secara massal seperti enumerasi pengguna dan grup. (Atur dengan nilai 0 untuk menonaktifkan pencarian paged LDAP dalam situasi tersebut.)",
+ "Enable LDAP password changes per user" : "Aktifkan perubahan sandi LDAP per pengguna",
+ "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." : "Perbolehkan pengguna LDAP mengubah sandi mereka dan perbolehkan Administrator Super dan Administrator Grup untuk mengubah sandi pengguna LDAP mereka. Hanya bekerja ketika kebijaksanaan akses kontrol terconfigurasi berdasarkan server LDAP. Sebagaimana sandi dikirim dalam plain teks ke server LDAP, pengiriman enkripsi harus digunakan dan hashing sandi harus terkonfigurasi di server LDAP.",
+ "(New password is sent as plain text to LDAP)" : "(Sandi baru dikirim sebagai plain teks ke LDAP)",
"Special Attributes" : "Atribut Khusus",
"Quota Field" : "Kolom Kuota",
"Quota Default" : "Kuota Baku",
@@ -156,6 +161,7 @@
"Username-LDAP User Mapping" : "Pemetaan Pengguna LDAP-Nama pengguna",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nama pengguna digunakan untuk menyimpan dan menetapkan (meta) data. Dalam rangka untuk mengidentifikasi dan mengenali pengguna secara tepat, setiap pengguna LDAP akan memiliki nama pengguna internal. Hal ini memerlukan sebuah pemetaan dari nama pengguna ke pengguna LDAP. Nama pengguna yang dibuat akan dipetakan pada UUID pengguna LDAP. Selain itu, DN akan di cache untuk mengurangi interaksi LDAP, tetapi tidak digunakan untuk identifikasi. Jika DN berubah, perubahan akan ditemukan. Nama pengguna internal digunakan secara menyeluruh. Membersihkan pemetaan akan mempengaruhi semua konfigurasi LDAP! JANGAN PERNAH MENGHAPUS PEMETAAN PADA LINGKUNGAN PRODUKSI, hanya gunakan dalam tahap uji coba dan pengujian.",
"Clear Username-LDAP User Mapping" : "Bersihkan Pemetaan Pengguna LDAP-Nama pengguna",
- "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup"
+ "Clear Groupname-LDAP Group Mapping" : "Bersihkan Pemetaan Grup LDAP-Nama grup",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Setelan terverifikasi, tapi ditemukan satu pengguna. Hanya yang pertama yang dapat login. Pertimbangkan dengan penyaringan yang lebih sempit."
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js
index 75c862abe94..17f9a67b2a0 100644
--- a/apps/user_ldap/l10n/it.js
+++ b/apps/user_ldap/l10n/it.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Select attributes" : "Seleziona gli attributi",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utente non trovato. Controlla i tuoi attributi di accesso e il nome utente.\nFiltro effettivo (copiare e incollare per la convalida della riga di comando):<br/>",
"User found and settings verified." : "Utente trovato e impostazioni verificate.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Le impostazioni sono state verificate, ma è stato trovato un utente. Solo il primo sarà in grado di accedere. Considera un filtro più restrittivo.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Le impostazioni sono state verificate, ma è stato trovato più di un utente. Solo il primo sarà in grado di accedere. Considera un filtro più restrittivo.",
"An unspecified error occurred. Please check the settings and the log." : "Si è non specificato un errore sconosciuto. Controlla le impostazioni e il file di log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Il filtro di ricerca non è valido, probabilmente a causa di problemi di sintassi come un numero dispari di parentesi aperte e chiuse. Controlla.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Si è verificato un errore di connessione a LDAP / AD, controlla l'host, la porta e le credenziali.",
@@ -164,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "I nomi utente sono utilizzati per archiviare e assegnare i (meta) dati. Per identificare con precisione e riconoscere gli utenti, ogni utente LDAP avrà un nome utente interno. Ciò richiede un'associazione tra il nome utente e l'utente LDAP. In aggiunta, il DN viene mantenuto in cache per ridurre l'interazione con LDAP, ma non è utilizzato per l'identificazione. Se il DN cambia, le modifiche saranno rilevate. Il nome utente interno è utilizzato dappertutto. La cancellazione delle associazioni lascerà tracce residue ovunque e interesserà tutta la configurazione LDAP. Non cancellare mai le associazioni in un ambiente di produzione, ma solo in una fase sperimentale o di test.",
"Clear Username-LDAP User Mapping" : "Cancella associazione Nome utente-Utente LDAP",
"Clear Groupname-LDAP Group Mapping" : "Cancella associazione Nome gruppo-Gruppo LDAP",
- "Limit %s access to users meeting these criteria:" : "Limita l'accesso a %s agli utenti che verificano questi criteri:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "In modo predefinito, il nome utente interno sarà creato dall'attributo UUID. Ciò assicura che il nome utente sia univoco e che non sia necessario convertire i caratteri. Il nome utente interno consente l'uso di determinati caratteri: [ a-zA-Z0-9_.@- ]. Altri caratteri sono sostituiti con il corrispondente ASCII o sono semplicemente omessi. In caso di conflitto, sarà aggiunto/incrementato un numero. Il nome utente interno è utilizzato per identificare un utente internamente. Rappresenta, inoltre, il nome predefinito per la cartella home dell'utente. Costituisce anche una parte di URL remoti, ad esempio per tutti i servizi *DAV. Con questa impostazione, il comportamento predefinito può essere scavalcato. Per ottenere una comportamento simile alle versioni precedenti ownCloud 5, digita il nome visualizzato dell'utente nel campo seguente. Lascialo vuoto per ottenere il comportamento predefinito. Le modifiche avranno effetto solo sui nuovo utenti LDAP associati (aggiunti)."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Le impostazioni sono state verificate, ma è stato trovato un utente. Solo il primo sarà in grado di accedere. Considera un filtro più restrittivo."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json
index 56c744c28ce..1b3fd64bd99 100644
--- a/apps/user_ldap/l10n/it.json
+++ b/apps/user_ldap/l10n/it.json
@@ -38,7 +38,7 @@
"Select attributes" : "Seleziona gli attributi",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utente non trovato. Controlla i tuoi attributi di accesso e il nome utente.\nFiltro effettivo (copiare e incollare per la convalida della riga di comando):<br/>",
"User found and settings verified." : "Utente trovato e impostazioni verificate.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Le impostazioni sono state verificate, ma è stato trovato un utente. Solo il primo sarà in grado di accedere. Considera un filtro più restrittivo.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Le impostazioni sono state verificate, ma è stato trovato più di un utente. Solo il primo sarà in grado di accedere. Considera un filtro più restrittivo.",
"An unspecified error occurred. Please check the settings and the log." : "Si è non specificato un errore sconosciuto. Controlla le impostazioni e il file di log.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Il filtro di ricerca non è valido, probabilmente a causa di problemi di sintassi come un numero dispari di parentesi aperte e chiuse. Controlla.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Si è verificato un errore di connessione a LDAP / AD, controlla l'host, la porta e le credenziali.",
@@ -162,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "I nomi utente sono utilizzati per archiviare e assegnare i (meta) dati. Per identificare con precisione e riconoscere gli utenti, ogni utente LDAP avrà un nome utente interno. Ciò richiede un'associazione tra il nome utente e l'utente LDAP. In aggiunta, il DN viene mantenuto in cache per ridurre l'interazione con LDAP, ma non è utilizzato per l'identificazione. Se il DN cambia, le modifiche saranno rilevate. Il nome utente interno è utilizzato dappertutto. La cancellazione delle associazioni lascerà tracce residue ovunque e interesserà tutta la configurazione LDAP. Non cancellare mai le associazioni in un ambiente di produzione, ma solo in una fase sperimentale o di test.",
"Clear Username-LDAP User Mapping" : "Cancella associazione Nome utente-Utente LDAP",
"Clear Groupname-LDAP Group Mapping" : "Cancella associazione Nome gruppo-Gruppo LDAP",
- "Limit %s access to users meeting these criteria:" : "Limita l'accesso a %s agli utenti che verificano questi criteri:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "In modo predefinito, il nome utente interno sarà creato dall'attributo UUID. Ciò assicura che il nome utente sia univoco e che non sia necessario convertire i caratteri. Il nome utente interno consente l'uso di determinati caratteri: [ a-zA-Z0-9_.@- ]. Altri caratteri sono sostituiti con il corrispondente ASCII o sono semplicemente omessi. In caso di conflitto, sarà aggiunto/incrementato un numero. Il nome utente interno è utilizzato per identificare un utente internamente. Rappresenta, inoltre, il nome predefinito per la cartella home dell'utente. Costituisce anche una parte di URL remoti, ad esempio per tutti i servizi *DAV. Con questa impostazione, il comportamento predefinito può essere scavalcato. Per ottenere una comportamento simile alle versioni precedenti ownCloud 5, digita il nome visualizzato dell'utente nel campo seguente. Lascialo vuoto per ottenere il comportamento predefinito. Le modifiche avranno effetto solo sui nuovo utenti LDAP associati (aggiunti)."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Le impostazioni sono state verificate, ma è stato trovato un utente. Solo il primo sarà in grado di accedere. Considera un filtro più restrittivo."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js
index 8673de7a067..0f337bd0b65 100644
--- a/apps/user_ldap/l10n/ja.js
+++ b/apps/user_ldap/l10n/ja.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Select attributes" : "属性を選択",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "ユーザーは見つかりませんでした。ログインの属性とユーザー名をチェックしてください。適用されているフィルター(コピーペーストしてコマンドラインでの確認できます): <br/>",
"User found and settings verified." : "ユーザーが見つかり、設定が検証できました。",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "設定は検証できましたが、ユーザーが1名見つかりました。最初の1名だけログインできます。より厳しいフィルターを検討してください。",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "設定は検証できましたが、ユーザーが複数見つかりました。最初の1名だけログインできます。より厳しいフィルターを検討してください。",
"An unspecified error occurred. Please check the settings and the log." : "不明なエラーが発生しました。設定とログを確認してください。",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "検索フィルターが不正です。恐らく文法の問題で、開き括弧と閉じ括弧がマッチしていません。修正をお願いします。",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD の接続エラーが発生しました。ホスト名、ポート、権限をチェックしてください。",
@@ -164,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザは内部ユーザ名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザ名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストもしくは実験の段階でのみマッピングのクリアを行なってください。",
"Clear Username-LDAP User Mapping" : "ユーザー名とLDAPユーザーのマッピングをクリアする",
"Clear Groupname-LDAP Group Mapping" : "グループ名とLDAPグループのマッピングをクリアする",
- "Limit %s access to users meeting these criteria:" : "次の条件を満たしているユーザーに %s アクセスを限定:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "デフォルトでは、内部ユーザー名はUUID属性から作成されます。 これによりユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[a-zA-Z0-9_.@-]という文字のみが使用できるという制限があります。その他の文字は対応するASCII文字に置き換えられるか、単に省略されます。内部名が衝突するとサフィックスの数値が増減します。 内部ユーザー名は、内部的にユーザーを識別するために使用されます。 また、ユーザーホームフォルダの既定の名前です。 また、*DAVサービスなどのすべてのリモートURLの一部です。 この設定では、デフォルトの動作を再定義することができます。 以前のownCloud5 と同様の動作を実現するには、次のフィールドにユーザーの表示名属性を入力します。 デフォルト動作では空のままにします。 変更は新しくマッピング(追加)されたLDAPユーザーにのみ有効です。"
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "設定は検証できましたが、ユーザーが1名見つかりました。最初の1名だけログインできます。より厳しいフィルターを検討してください。"
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json
index 7469282e200..767727d2d4a 100644
--- a/apps/user_ldap/l10n/ja.json
+++ b/apps/user_ldap/l10n/ja.json
@@ -38,7 +38,7 @@
"Select attributes" : "属性を選択",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "ユーザーは見つかりませんでした。ログインの属性とユーザー名をチェックしてください。適用されているフィルター(コピーペーストしてコマンドラインでの確認できます): <br/>",
"User found and settings verified." : "ユーザーが見つかり、設定が検証できました。",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "設定は検証できましたが、ユーザーが1名見つかりました。最初の1名だけログインできます。より厳しいフィルターを検討してください。",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "設定は検証できましたが、ユーザーが複数見つかりました。最初の1名だけログインできます。より厳しいフィルターを検討してください。",
"An unspecified error occurred. Please check the settings and the log." : "不明なエラーが発生しました。設定とログを確認してください。",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "検索フィルターが不正です。恐らく文法の問題で、開き括弧と閉じ括弧がマッチしていません。修正をお願いします。",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD の接続エラーが発生しました。ホスト名、ポート、権限をチェックしてください。",
@@ -162,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザは内部ユーザ名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザ名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストもしくは実験の段階でのみマッピングのクリアを行なってください。",
"Clear Username-LDAP User Mapping" : "ユーザー名とLDAPユーザーのマッピングをクリアする",
"Clear Groupname-LDAP Group Mapping" : "グループ名とLDAPグループのマッピングをクリアする",
- "Limit %s access to users meeting these criteria:" : "次の条件を満たしているユーザーに %s アクセスを限定:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "デフォルトでは、内部ユーザー名はUUID属性から作成されます。 これによりユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[a-zA-Z0-9_.@-]という文字のみが使用できるという制限があります。その他の文字は対応するASCII文字に置き換えられるか、単に省略されます。内部名が衝突するとサフィックスの数値が増減します。 内部ユーザー名は、内部的にユーザーを識別するために使用されます。 また、ユーザーホームフォルダの既定の名前です。 また、*DAVサービスなどのすべてのリモートURLの一部です。 この設定では、デフォルトの動作を再定義することができます。 以前のownCloud5 と同様の動作を実現するには、次のフィールドにユーザーの表示名属性を入力します。 デフォルト動作では空のままにします。 変更は新しくマッピング(追加)されたLDAPユーザーにのみ有効です。"
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "設定は検証できましたが、ユーザーが1名見つかりました。最初の1名だけログインできます。より厳しいフィルターを検討してください。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/ko.js b/apps/user_ldap/l10n/ko.js
index 05745a69532..cf783656e5d 100644
--- a/apps/user_ldap/l10n/ko.js
+++ b/apps/user_ldap/l10n/ko.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "속성 선택",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "사용자를 찾을 수 없습니다. 로그인 속성과 사용자 이름을 확인하십시오. 적용되는 필터(명령행에 붙여넣어 검증 가능):",
"User found and settings verified." : "사용자를 찾았고 설정을 확인했습니다.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "설정을 확인하였으나 한 명의 사용자만 찾았습니다. 첫 사용자만 로그인할 수 있습니다. 더 좁은 필터를 지정하십시오.",
"An unspecified error occurred. Please check the settings and the log." : "알 수 없는 오류가 발생했습니다. 설정과 로그를 확인하십시오.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "검색 필터가 잘못되었습니다. 열고 닫는 괄호 쌍이 맞지 않을 수도 있습니다. 확인 후 수정하십시오.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/AD 연결 오류가 발생했습니다. 호스트, 포트, 인증 정보를 확인하십시오.",
@@ -156,6 +155,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "사용자 이름은 (메타)데이터를 저장하고 할당하는 데 사용됩니다. 사용자를 정확히 식별하기 위해서 모든 LDAP 사용자는 내부 사용자 이름을 갖고 있습니다. 이 정보에 접근하려면 사용자 이름과 LDAP 사용자 사이의 연결을 알아야 합니다. 생성된 사용자 이름은 LDAP 사용자의 UUID에 연결됩니다. LDAP에 연결하는 횟수를 줄이기 위하여 DN을 캐시에 저장하지만, 식별에는 사용하지 않습니다. DN이 변경되었을 때 변경 사항이 적용됩니다. 내부 사용자 이름은 항상 사용됩니다. 매핑을 비우면 과거 매핑의 흔적이 남습니다. 매핑을 비우는 것은 설정에 관계 없이 적용되므로 모든 LDAP 설정에 영향을 줍니다! 테스트 및 실험 단계에서만 매핑을 비우고, 상용 환경에서는 매핑을 비우지 마십시오.",
"Clear Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑 비우기",
- "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기"
+ "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "설정을 확인하였으나 한 명의 사용자만 찾았습니다. 첫 사용자만 로그인할 수 있습니다. 더 좁은 필터를 지정하십시오."
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/ko.json b/apps/user_ldap/l10n/ko.json
index be2f22f54d0..f96c599960a 100644
--- a/apps/user_ldap/l10n/ko.json
+++ b/apps/user_ldap/l10n/ko.json
@@ -38,7 +38,6 @@
"Select attributes" : "속성 선택",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "사용자를 찾을 수 없습니다. 로그인 속성과 사용자 이름을 확인하십시오. 적용되는 필터(명령행에 붙여넣어 검증 가능):",
"User found and settings verified." : "사용자를 찾았고 설정을 확인했습니다.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "설정을 확인하였으나 한 명의 사용자만 찾았습니다. 첫 사용자만 로그인할 수 있습니다. 더 좁은 필터를 지정하십시오.",
"An unspecified error occurred. Please check the settings and the log." : "알 수 없는 오류가 발생했습니다. 설정과 로그를 확인하십시오.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "검색 필터가 잘못되었습니다. 열고 닫는 괄호 쌍이 맞지 않을 수도 있습니다. 확인 후 수정하십시오.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/AD 연결 오류가 발생했습니다. 호스트, 포트, 인증 정보를 확인하십시오.",
@@ -154,6 +153,7 @@
"Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "사용자 이름은 (메타)데이터를 저장하고 할당하는 데 사용됩니다. 사용자를 정확히 식별하기 위해서 모든 LDAP 사용자는 내부 사용자 이름을 갖고 있습니다. 이 정보에 접근하려면 사용자 이름과 LDAP 사용자 사이의 연결을 알아야 합니다. 생성된 사용자 이름은 LDAP 사용자의 UUID에 연결됩니다. LDAP에 연결하는 횟수를 줄이기 위하여 DN을 캐시에 저장하지만, 식별에는 사용하지 않습니다. DN이 변경되었을 때 변경 사항이 적용됩니다. 내부 사용자 이름은 항상 사용됩니다. 매핑을 비우면 과거 매핑의 흔적이 남습니다. 매핑을 비우는 것은 설정에 관계 없이 적용되므로 모든 LDAP 설정에 영향을 줍니다! 테스트 및 실험 단계에서만 매핑을 비우고, 상용 환경에서는 매핑을 비우지 마십시오.",
"Clear Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑 비우기",
- "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기"
+ "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "설정을 확인하였으나 한 명의 사용자만 찾았습니다. 첫 사용자만 로그인할 수 있습니다. 더 좁은 필터를 지정하십시오."
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/nb_NO.js b/apps/user_ldap/l10n/nb_NO.js
index 7207e24b31e..17289116064 100644
--- a/apps/user_ldap/l10n/nb_NO.js
+++ b/apps/user_ldap/l10n/nb_NO.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"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.",
- "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.",
"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.",
"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.",
@@ -159,6 +158,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brukernavn brukes til å lagre og tilordne (meta)data. For at brukere skal identifiseres og gjenkjennes presist, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en tilknytning fra brukernavn til LDAP-bruker. Brukernavn som opprettes blir knyttet til LDAP-brukerens UUID. I tillegg mellomlagres DN for å redusere LDAP-kommunikasjon, men det brukes ikke til identifisering. Hvis DN endres vil endringene bli oppdaget. Det interne brukernavnet brukes alle steder. Nullstilling av tilknytningene vil etterlate seg rester overalt. Nullstilling av tilknytningene skjer ikke pr. konfigurasjon, det påvirker alle LDAP-konfigurasjoner! Nullstill aldri tilknytningene i et produksjonsmiljø, kun ved testing eller eksperimentering.",
"Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker",
"Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe",
- "Limit %s access to users meeting these criteria:" : "Begrens tilgang til %s for brukere som møter følgende kriterier:"
+ "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."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/nb_NO.json b/apps/user_ldap/l10n/nb_NO.json
index 2f3cbd3ba4b..18f1cdd8838 100644
--- a/apps/user_ldap/l10n/nb_NO.json
+++ b/apps/user_ldap/l10n/nb_NO.json
@@ -38,7 +38,6 @@
"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.",
- "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.",
"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.",
"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.",
@@ -157,6 +156,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brukernavn brukes til å lagre og tilordne (meta)data. For at brukere skal identifiseres og gjenkjennes presist, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en tilknytning fra brukernavn til LDAP-bruker. Brukernavn som opprettes blir knyttet til LDAP-brukerens UUID. I tillegg mellomlagres DN for å redusere LDAP-kommunikasjon, men det brukes ikke til identifisering. Hvis DN endres vil endringene bli oppdaget. Det interne brukernavnet brukes alle steder. Nullstilling av tilknytningene vil etterlate seg rester overalt. Nullstilling av tilknytningene skjer ikke pr. konfigurasjon, det påvirker alle LDAP-konfigurasjoner! Nullstill aldri tilknytningene i et produksjonsmiljø, kun ved testing eller eksperimentering.",
"Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker",
"Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe",
- "Limit %s access to users meeting these criteria:" : "Begrens tilgang til %s for brukere som møter følgende kriterier:"
+ "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."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js
index 81a39454479..b8caaf20ed3 100644
--- a/apps/user_ldap/l10n/nl.js
+++ b/apps/user_ldap/l10n/nl.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Select attributes" : "Selecteer attributen",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Gebruiker niet gevonden. Verifieer je inloggegevens en gebruikersnaam. Geldig filter (kopiëren en plakken voor commandoregel validatie): <br/>",
"User found and settings verified." : "Gebruiker gevonden en instellingen geverifieerd.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter.",
"An unspecified error occurred. Please check the settings and the log." : "Er trad een ongedefinieerde fout op. Controleer de instellingen en de logging.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Het zoekfilter is ongeldig, waarschijnlijk door syntax problemen zoals een ongelijk aantal open- en sluithaakjes. Graag aanpassen.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Er trad een verbindingsfout naar LDAP / AD op, verifieer servernaam, poort en inloggegevens.",
@@ -164,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een ​​LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.",
"Clear Username-LDAP User Mapping" : "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling",
"Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling",
- "Limit %s access to users meeting these criteria:" : "Beperk %s toegang tot gebruikers die voldoen aan deze criteria:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standaard wordt de interne gebruikersnaam afgeleid van het UUID attribuut. dat zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft de beperking dat alleen deze tekens zijn toegestaan: [ a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun overeenkomstige ASCII-waarde of simpelweg weggelaten. Bij conflicten wordt een nummer toegevoegd/verhoogd. De interne gebruikersnaam wordt gebruikt om een gebruiker intern te identificeren. Het is ook de standaardnaam voor de thuis-map van de gebruiker. Het is ook onderdeel van de externe URLs, bijvoorbeeld voor alle *DAV services. Met deze instelling kan het standaardgedrag worden overschreven.\nOm dezelfde werkwijze als vóór ownCloud 5 te krijgen, geef je de weergavenaam van de gebruiker op in het volgend veld. Laat het leeg voor de standaardwerkwijze. Wijzigingen hebben alleen effect voor nieuw gekoppelde (toegevoegde) LDAP gebruikers."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json
index f6d87fa76c4..79816be4075 100644
--- a/apps/user_ldap/l10n/nl.json
+++ b/apps/user_ldap/l10n/nl.json
@@ -38,7 +38,7 @@
"Select attributes" : "Selecteer attributen",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Gebruiker niet gevonden. Verifieer je inloggegevens en gebruikersnaam. Geldig filter (kopiëren en plakken voor commandoregel validatie): <br/>",
"User found and settings verified." : "Gebruiker gevonden en instellingen geverifieerd.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter.",
"An unspecified error occurred. Please check the settings and the log." : "Er trad een ongedefinieerde fout op. Controleer de instellingen en de logging.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Het zoekfilter is ongeldig, waarschijnlijk door syntax problemen zoals een ongelijk aantal open- en sluithaakjes. Graag aanpassen.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Er trad een verbindingsfout naar LDAP / AD op, verifieer servernaam, poort en inloggegevens.",
@@ -162,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een ​​LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.",
"Clear Username-LDAP User Mapping" : "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling",
"Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling",
- "Limit %s access to users meeting these criteria:" : "Beperk %s toegang tot gebruikers die voldoen aan deze criteria:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standaard wordt de interne gebruikersnaam afgeleid van het UUID attribuut. dat zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft de beperking dat alleen deze tekens zijn toegestaan: [ a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun overeenkomstige ASCII-waarde of simpelweg weggelaten. Bij conflicten wordt een nummer toegevoegd/verhoogd. De interne gebruikersnaam wordt gebruikt om een gebruiker intern te identificeren. Het is ook de standaardnaam voor de thuis-map van de gebruiker. Het is ook onderdeel van de externe URLs, bijvoorbeeld voor alle *DAV services. Met deze instelling kan het standaardgedrag worden overschreven.\nOm dezelfde werkwijze als vóór ownCloud 5 te krijgen, geef je de weergavenaam van de gebruiker op in het volgend veld. Laat het leeg voor de standaardwerkwijze. Wijzigingen hebben alleen effect voor nieuw gekoppelde (toegevoegde) LDAP gebruikers."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/pl.js b/apps/user_ldap/l10n/pl.js
index 0c2955c2881..37ebe04de02 100644
--- a/apps/user_ldap/l10n/pl.js
+++ b/apps/user_ldap/l10n/pl.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"The configuration is invalid: anonymous bind is not allowed." : "Konfiguracja jest nieprawidłowa: anonimowe złączenie nie jest dozwolone.",
"The configuration is valid and the connection could be established!" : "Konfiguracja jest prawidłowa i można ustanowić połączenie!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Konfiguracja jest prawidłowa, ale Bind nie. Sprawdź ustawienia serwera i poświadczenia.",
- "The configuration is invalid. Please have a look at the logs for further details." : "Konfiguracja jest nieprawidłowa. Proszę rzucić okiem na dzienniki dalszych szczegółów.",
+ "The configuration is invalid. Please have a look at the logs for further details." : "Konfiguracja jest nieprawidłowa. Proszę rzucić okiem na dzienniki dla dalszych szczegółów.",
"No action specified" : "Nie określono akcji",
"No configuration specified" : "Nie określono konfiguracji",
"No data specified" : "Nie określono danych",
@@ -32,17 +32,25 @@ OC.L10N.register(
"Confirm Deletion" : "Potwierdź usunięcie",
"Mappings cleared successfully!" : "Mapowanie wyczyszczone!",
"Error while clearing the mappings." : "Błąd podczas czyszczenia mapowania.",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonimowe połączenie nie jest dozwolone. Proszę podać DN użytkownika i hasło.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Błąd operacji LDAP. Anonimowe połączenie nie jest dozwolone.",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Zapis się nie udał. Proszę upewnij się, że baza danych jest uruchomiona. Przeładuj przed kontynuowaniem.",
"Mode switch" : "Przełącznik trybów",
"Select attributes" : "Wybierz atrybuty",
"User found and settings verified." : "Użytkownik nie znalazł ustawienia zweryfikowanego.",
- "_%s group found_::_%s groups found_" : ["%s znaleziona grupa","%s znalezionych grup","%s znalezionych grup"],
- "_%s user found_::_%s users found_" : ["%s znaleziony użytkownik","%s znalezionych użytkowników","%s znalezionych użytkowników"],
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Ustawienia są poprawne, ale znaleziono więcej niż jednego użytkownika. Tylko pierwszy będzie mógł się zalogować. Rozważ większe zawężenie filtrami.",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Błąd połączenia do LDAP / AD, proszę sprawdzić adres hosta, port i poświadczenia.",
+ "Password change rejected. Hint: " : "Zmiana hasła odrzucona: Wskazówka:",
+ "LDAP / AD integration" : "Integracja z LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["%s znaleziona grupa","%s znalezionych grup","%s znalezionych grup","%s znalezionych grup"],
+ "_%s user found_::_%s users found_" : ["%s znaleziony użytkownik","%s znalezionych użytkowników","%s znalezionych użytkowników","%s znalezionych użytkowników"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nie udało się wykryć atrybutu wyświetlanej nazwy użytkownika. Określ ją w zaawansowanych ustawieniach LDAP.",
"Could not find the desired feature" : "Nie można znaleźć żądanej funkcji",
"Invalid Host" : "Niepoprawny Host",
"Test Configuration" : "Konfiguracja testowa",
"Help" : "Pomoc",
"Groups meeting these criteria are available in %s:" : "Przyłączenie do grupy z tymi ustawieniami dostępne jest w %s:",
+ "Only these object classes:" : "Tylko te klasy obiektów:",
"Only from these groups:" : "Tylko z tych grup:",
"Search groups" : "Przeszukaj grupy",
"Available groups" : "Dostępne grupy",
@@ -54,11 +62,14 @@ OC.L10N.register(
"When logging in, %s will find the user based on the following attributes:" : "Podczas logowania, %s znajdzie użytkownika na podstawie następujących atrybutów:",
"LDAP / AD Username:" : "Nazwa użytkownika LDAP / AD:",
"LDAP / AD Email Address:" : "Adres email LDAP/AD:",
+ "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Pozwól na logowanie poprzez atrybut email. Mail i mailPrimaryAddress będą dozwolone.",
"Other Attributes:" : "Inne atrybuty:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Określa jakiego filtru użyć podczas próby zalogowania. %%uid zastępuje nazwę użytkownika w procesie logowania. Przykład: \"uid=%%uid\"",
+ "Test Loginname" : "Testowa nazwa użytkownika",
"Verify settings" : "Weryfikuj ustawienia",
"1. Server" : "1. Serwer",
"%s. Server:" : "%s. Serwer:",
+ "Add a new and blank configuration" : "Dodaj nową pustą konfigurację",
"Copy current configuration into new directory binding" : "Kopiuje aktualną konfigurację do nowej lokalizacji",
"Delete the current configuration" : "Usuwa aktualną konfigurację",
"Host" : "Host",
@@ -71,9 +82,13 @@ OC.L10N.register(
"For anonymous access, leave DN and Password empty." : "Dla dostępu anonimowego pozostawić DN i hasło puste.",
"One Base DN per line" : "Jedna baza DN na linię",
"You can specify Base DN for users and groups in the Advanced tab" : "Bazę DN można określić dla użytkowników i grup w karcie Zaawansowane",
+ "Detect Base DN" : "Wykryj DN bazy danych LDAP / AD",
+ "Test Base DN" : "Sprawdź DN bazy danych LDAP / AD",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zapobiega automatycznym zapytaniom LDAP. Lepsze dla większych instalacji, lecz wymaga pewnej wiedzy o LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Ręcznie wprowadzaj filtry LDAP (zalecane dla dużych katalogów)",
+ "%s access is limited to users meeting these criteria:" : "%s dostęp jest ograniczony dla użytkowników spełniających te warunki:",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtr określa, którzy użytkownicy LDAP powinni mieć dostęp do instancji %s.",
+ "Verify settings and count users" : "Sprawdź ustawienia i policz użytkowników",
"Saving" : "Zapisuję",
"Back" : "Wróć",
"Continue" : "Kontynuuj ",
@@ -101,6 +116,8 @@ OC.L10N.register(
"Directory Settings" : "Ustawienia katalogów",
"User Display Name Field" : "Pole wyświetlanej nazwy użytkownika",
"The LDAP attribute to use to generate the user's display name." : "Atrybut LDAP służący do generowania wyświetlanej nazwy użytkownika ownCloud.",
+ "2nd User Display Name Field" : "Drugie pole wyświetlanej nazwy użytkownika",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcjonalnie. Atrybut LDAP, który będzie w nawiasach dodany do wyświetlanej nazwy użytkownika. Przykładowy wynik: »John Doe (john.doe@example.org)«.",
"Base User Tree" : "Drzewo bazy użytkowników",
"One User Base DN per line" : "Jeden użytkownik Bazy DN na linię",
"User Search Attributes" : "Szukaj atrybutów",
@@ -116,6 +133,8 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kiedy włączone, grupy, które zawierają grupy, są wspierane. (Działa tylko, jeśli członek grupy ma ustawienie DNs)",
"Paging chunksize" : "Wielkość stronicowania",
"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.)" : "Długość łańcucha jest używana do stronicowanych wyszukiwań LDAP, które mogą zwracać duże zbiory jak lista grup, czy użytkowników. (Ustawienie na 0 wyłącza stronicowane wyszukiwania w takich sytuacjach.)",
+ "Enable LDAP password changes per user" : "Włącz zmianę hasła LDAP przez użytkownika",
+ "(New password is sent as plain text to LDAP)" : "(Nowe hasło jest wysyłane do LDAP-a czystym tekstem)",
"Special Attributes" : "Specjalne atrybuty",
"Quota Field" : "Pole przydziału",
"Quota Default" : "Przydział domyślny",
diff --git a/apps/user_ldap/l10n/pl.json b/apps/user_ldap/l10n/pl.json
index 9f73cc4c753..6c9f4d2aeef 100644
--- a/apps/user_ldap/l10n/pl.json
+++ b/apps/user_ldap/l10n/pl.json
@@ -4,7 +4,7 @@
"The configuration is invalid: anonymous bind is not allowed." : "Konfiguracja jest nieprawidłowa: anonimowe złączenie nie jest dozwolone.",
"The configuration is valid and the connection could be established!" : "Konfiguracja jest prawidłowa i można ustanowić połączenie!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Konfiguracja jest prawidłowa, ale Bind nie. Sprawdź ustawienia serwera i poświadczenia.",
- "The configuration is invalid. Please have a look at the logs for further details." : "Konfiguracja jest nieprawidłowa. Proszę rzucić okiem na dzienniki dalszych szczegółów.",
+ "The configuration is invalid. Please have a look at the logs for further details." : "Konfiguracja jest nieprawidłowa. Proszę rzucić okiem na dzienniki dla dalszych szczegółów.",
"No action specified" : "Nie określono akcji",
"No configuration specified" : "Nie określono konfiguracji",
"No data specified" : "Nie określono danych",
@@ -30,17 +30,25 @@
"Confirm Deletion" : "Potwierdź usunięcie",
"Mappings cleared successfully!" : "Mapowanie wyczyszczone!",
"Error while clearing the mappings." : "Błąd podczas czyszczenia mapowania.",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonimowe połączenie nie jest dozwolone. Proszę podać DN użytkownika i hasło.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Błąd operacji LDAP. Anonimowe połączenie nie jest dozwolone.",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Zapis się nie udał. Proszę upewnij się, że baza danych jest uruchomiona. Przeładuj przed kontynuowaniem.",
"Mode switch" : "Przełącznik trybów",
"Select attributes" : "Wybierz atrybuty",
"User found and settings verified." : "Użytkownik nie znalazł ustawienia zweryfikowanego.",
- "_%s group found_::_%s groups found_" : ["%s znaleziona grupa","%s znalezionych grup","%s znalezionych grup"],
- "_%s user found_::_%s users found_" : ["%s znaleziony użytkownik","%s znalezionych użytkowników","%s znalezionych użytkowników"],
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Ustawienia są poprawne, ale znaleziono więcej niż jednego użytkownika. Tylko pierwszy będzie mógł się zalogować. Rozważ większe zawężenie filtrami.",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Błąd połączenia do LDAP / AD, proszę sprawdzić adres hosta, port i poświadczenia.",
+ "Password change rejected. Hint: " : "Zmiana hasła odrzucona: Wskazówka:",
+ "LDAP / AD integration" : "Integracja z LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["%s znaleziona grupa","%s znalezionych grup","%s znalezionych grup","%s znalezionych grup"],
+ "_%s user found_::_%s users found_" : ["%s znaleziony użytkownik","%s znalezionych użytkowników","%s znalezionych użytkowników","%s znalezionych użytkowników"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nie udało się wykryć atrybutu wyświetlanej nazwy użytkownika. Określ ją w zaawansowanych ustawieniach LDAP.",
"Could not find the desired feature" : "Nie można znaleźć żądanej funkcji",
"Invalid Host" : "Niepoprawny Host",
"Test Configuration" : "Konfiguracja testowa",
"Help" : "Pomoc",
"Groups meeting these criteria are available in %s:" : "Przyłączenie do grupy z tymi ustawieniami dostępne jest w %s:",
+ "Only these object classes:" : "Tylko te klasy obiektów:",
"Only from these groups:" : "Tylko z tych grup:",
"Search groups" : "Przeszukaj grupy",
"Available groups" : "Dostępne grupy",
@@ -52,11 +60,14 @@
"When logging in, %s will find the user based on the following attributes:" : "Podczas logowania, %s znajdzie użytkownika na podstawie następujących atrybutów:",
"LDAP / AD Username:" : "Nazwa użytkownika LDAP / AD:",
"LDAP / AD Email Address:" : "Adres email LDAP/AD:",
+ "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Pozwól na logowanie poprzez atrybut email. Mail i mailPrimaryAddress będą dozwolone.",
"Other Attributes:" : "Inne atrybuty:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Określa jakiego filtru użyć podczas próby zalogowania. %%uid zastępuje nazwę użytkownika w procesie logowania. Przykład: \"uid=%%uid\"",
+ "Test Loginname" : "Testowa nazwa użytkownika",
"Verify settings" : "Weryfikuj ustawienia",
"1. Server" : "1. Serwer",
"%s. Server:" : "%s. Serwer:",
+ "Add a new and blank configuration" : "Dodaj nową pustą konfigurację",
"Copy current configuration into new directory binding" : "Kopiuje aktualną konfigurację do nowej lokalizacji",
"Delete the current configuration" : "Usuwa aktualną konfigurację",
"Host" : "Host",
@@ -69,9 +80,13 @@
"For anonymous access, leave DN and Password empty." : "Dla dostępu anonimowego pozostawić DN i hasło puste.",
"One Base DN per line" : "Jedna baza DN na linię",
"You can specify Base DN for users and groups in the Advanced tab" : "Bazę DN można określić dla użytkowników i grup w karcie Zaawansowane",
+ "Detect Base DN" : "Wykryj DN bazy danych LDAP / AD",
+ "Test Base DN" : "Sprawdź DN bazy danych LDAP / AD",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zapobiega automatycznym zapytaniom LDAP. Lepsze dla większych instalacji, lecz wymaga pewnej wiedzy o LDAP.",
"Manually enter LDAP filters (recommended for large directories)" : "Ręcznie wprowadzaj filtry LDAP (zalecane dla dużych katalogów)",
+ "%s access is limited to users meeting these criteria:" : "%s dostęp jest ograniczony dla użytkowników spełniających te warunki:",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtr określa, którzy użytkownicy LDAP powinni mieć dostęp do instancji %s.",
+ "Verify settings and count users" : "Sprawdź ustawienia i policz użytkowników",
"Saving" : "Zapisuję",
"Back" : "Wróć",
"Continue" : "Kontynuuj ",
@@ -99,6 +114,8 @@
"Directory Settings" : "Ustawienia katalogów",
"User Display Name Field" : "Pole wyświetlanej nazwy użytkownika",
"The LDAP attribute to use to generate the user's display name." : "Atrybut LDAP służący do generowania wyświetlanej nazwy użytkownika ownCloud.",
+ "2nd User Display Name Field" : "Drugie pole wyświetlanej nazwy użytkownika",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcjonalnie. Atrybut LDAP, który będzie w nawiasach dodany do wyświetlanej nazwy użytkownika. Przykładowy wynik: »John Doe (john.doe@example.org)«.",
"Base User Tree" : "Drzewo bazy użytkowników",
"One User Base DN per line" : "Jeden użytkownik Bazy DN na linię",
"User Search Attributes" : "Szukaj atrybutów",
@@ -114,6 +131,8 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kiedy włączone, grupy, które zawierają grupy, są wspierane. (Działa tylko, jeśli członek grupy ma ustawienie DNs)",
"Paging chunksize" : "Wielkość stronicowania",
"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.)" : "Długość łańcucha jest używana do stronicowanych wyszukiwań LDAP, które mogą zwracać duże zbiory jak lista grup, czy użytkowników. (Ustawienie na 0 wyłącza stronicowane wyszukiwania w takich sytuacjach.)",
+ "Enable LDAP password changes per user" : "Włącz zmianę hasła LDAP przez użytkownika",
+ "(New password is sent as plain text to LDAP)" : "(Nowe hasło jest wysyłane do LDAP-a czystym tekstem)",
"Special Attributes" : "Specjalne atrybuty",
"Quota Field" : "Pole przydziału",
"Quota Default" : "Przydział domyślny",
diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js
index dc4f1b43c71..82316b171a1 100644
--- a/apps/user_ldap/l10n/pt_BR.js
+++ b/apps/user_ldap/l10n/pt_BR.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Select attributes" : "Selecione os atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Usuário não encontrado. Por favor verifique os seus atributos de login e nome de usuário. Filtro eficaz (para copiar-e-colar para validação de linha de comando): <br/>",
"User found and settings verified." : "Usuário encontrado e configurações verificadas.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Configurações verificadas, mas um usuário encontrado. Apenas o primeiro será capaz de fazer login. Considere um filtro mais apurado.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Configurações verificadas, mas mais de um usuário foi encontrado. Apenas o primeiro será capaz de fazer login. Considere um filtro mais apurado.",
"An unspecified error occurred. Please check the settings and the log." : "SetAn Ocorreu um erro não especificado. Por favor, verifique as configurações e os log.tings verificadas, mas um usuário encontrado. Apenas o primeiro será capaz de login. Considere um filtro mais apurado.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de pesquisa é inválido, provavelmente devido a questões de sintaxe, como número ímpar de colchetes abertos e fechados. Por favor, revise.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Um erro de conexão para LDAP / AD ocorreu, por favor, verifique host, a porta e as credenciais.",
@@ -164,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nomes de usuários são usados para armazenar e atribuir dados (meta). A fim de identificar e reconhecer precisamente usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento de nome de usuário para usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Além disso, o DN é armazenado em cache, assim como para reduzir a interação LDAP, mas não é usado para identificação. Se o DN muda, as mudanças serão encontrados. O nome de usuário interno é usado por toda parte. Limpando os mapeamentos terá sobras em todos os lugares. Limpando os mapeamentos não é a configuração sensível, que afeta todas as configurações LDAP! Nunca limpar os mapeamentos em um ambiente de produção, somente em um teste ou estágio experimental.",
"Clear Username-LDAP User Mapping" : "Limpar Mapeamento de Usuário Nome de Usuário-LDAP",
"Clear Groupname-LDAP Group Mapping" : "Limpar NomedoGrupo-LDAP Mapeamento do Grupo",
- "Limit %s access to users meeting these criteria:" : "Limita o acesso a %s para usuários que satisfaçam estes critérios:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Isto garante que o nome de usuário é único e caracteress não precisam ser convertidos. O nome de usuário interno tem a restrição de que apenas estes caracteres são permitidos: [a-zA-Z0-9 _ @ -.]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões será adicionado um número/adicionado. O nome de utilizador interno é utilizado para identificar um utilizador internamente. É também o nome padrão para a pasta de usuário doméstico. É também uma parte de URLs remotas, por exemplo para todos os serviços *DAV. Com esta definição, o comportamento padrão pode ser substituído. Para conseguir um comportamento semelhante como antes no ownCloud 5 insira o atributo do nome de exibição do usuário no campo seguinte. Deixe em branco para o comportamento padrão. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados)."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Configurações verificadas, mas mais de um usuário foi encontrado. Apenas o primeiro será capaz de fazer login. Considere um filtro mais apurado."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json
index 03ae6313654..2422ae147c0 100644
--- a/apps/user_ldap/l10n/pt_BR.json
+++ b/apps/user_ldap/l10n/pt_BR.json
@@ -38,7 +38,7 @@
"Select attributes" : "Selecione os atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Usuário não encontrado. Por favor verifique os seus atributos de login e nome de usuário. Filtro eficaz (para copiar-e-colar para validação de linha de comando): <br/>",
"User found and settings verified." : "Usuário encontrado e configurações verificadas.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Configurações verificadas, mas um usuário encontrado. Apenas o primeiro será capaz de fazer login. Considere um filtro mais apurado.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Configurações verificadas, mas mais de um usuário foi encontrado. Apenas o primeiro será capaz de fazer login. Considere um filtro mais apurado.",
"An unspecified error occurred. Please check the settings and the log." : "SetAn Ocorreu um erro não especificado. Por favor, verifique as configurações e os log.tings verificadas, mas um usuário encontrado. Apenas o primeiro será capaz de login. Considere um filtro mais apurado.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de pesquisa é inválido, provavelmente devido a questões de sintaxe, como número ímpar de colchetes abertos e fechados. Por favor, revise.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Um erro de conexão para LDAP / AD ocorreu, por favor, verifique host, a porta e as credenciais.",
@@ -162,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nomes de usuários são usados para armazenar e atribuir dados (meta). A fim de identificar e reconhecer precisamente usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento de nome de usuário para usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Além disso, o DN é armazenado em cache, assim como para reduzir a interação LDAP, mas não é usado para identificação. Se o DN muda, as mudanças serão encontrados. O nome de usuário interno é usado por toda parte. Limpando os mapeamentos terá sobras em todos os lugares. Limpando os mapeamentos não é a configuração sensível, que afeta todas as configurações LDAP! Nunca limpar os mapeamentos em um ambiente de produção, somente em um teste ou estágio experimental.",
"Clear Username-LDAP User Mapping" : "Limpar Mapeamento de Usuário Nome de Usuário-LDAP",
"Clear Groupname-LDAP Group Mapping" : "Limpar NomedoGrupo-LDAP Mapeamento do Grupo",
- "Limit %s access to users meeting these criteria:" : "Limita o acesso a %s para usuários que satisfaçam estes critérios:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Isto garante que o nome de usuário é único e caracteress não precisam ser convertidos. O nome de usuário interno tem a restrição de que apenas estes caracteres são permitidos: [a-zA-Z0-9 _ @ -.]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões será adicionado um número/adicionado. O nome de utilizador interno é utilizado para identificar um utilizador internamente. É também o nome padrão para a pasta de usuário doméstico. É também uma parte de URLs remotas, por exemplo para todos os serviços *DAV. Com esta definição, o comportamento padrão pode ser substituído. Para conseguir um comportamento semelhante como antes no ownCloud 5 insira o atributo do nome de exibição do usuário no campo seguinte. Deixe em branco para o comportamento padrão. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados)."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Configurações verificadas, mas mais de um usuário foi encontrado. Apenas o primeiro será capaz de fazer login. Considere um filtro mais apurado."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/pt_PT.js b/apps/user_ldap/l10n/pt_PT.js
index ea00405f04b..6ddc7687742 100644
--- a/apps/user_ldap/l10n/pt_PT.js
+++ b/apps/user_ldap/l10n/pt_PT.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "Selecionar atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "O utilizador não foi encontrado. Por favor, verifique nome de utilizador e os atributos de permissão. Filtro eficaz (para copiar/colar na linha de comando de validação): <br/>",
"User found and settings verified." : "Utilizador encontrado e as definilções verificadas",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Definições verificadas, com problemas. Somente o primeiro utilizador encontrado poderá entrar no sistema. Considere criar um filtro mais expecífico.",
"An unspecified error occurred. Please check the settings and the log." : "ocorreu um erro não especificado. Por favor, verifique as configurações e o registo.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de procura é inválido, provavelmente devido a problemas de sintaxe. Verifique se existem números ímpares de parêntisis abertos e/ou fechados. Por favor reveja.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ocorreu um erro de conexão ao servidor LDAP / AD. Por favor, reveja as definições de endereço, porto e credenciais.",
@@ -157,6 +156,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Mapeamento do utilizador LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "O ownCloud usa nomes de utilizadores para guardar e atribuir (meta) dados. Para identificar com precisão os utilizadores, cada utilizador de LDAP tem um nome de utilizador interno. Isto requer um mapeamento entre o utilizador LDAP e o utilizador ownCloud. Adicionalmente, o DN é colocado em cache para reduzir a interação com LDAP, porém não é usado para identificação. Se o DN muda, essas alterações serão vistas pelo ownCloud. O nome interno do ownCloud é usado em todo o lado, no ownCloud. Limpar os mapeamentos deixará vestígios em todo o lado. A limpeza dos mapeamentos não é sensível à configuração, pois afeta todas as configurações de LDAP! Nunca limpe os mapeamentos num ambiente de produção, apenas o faça numa fase de testes ou experimental.",
"Clear Username-LDAP User Mapping" : "Limpar mapeamento do utilizador-LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Limpar o mapeamento do nome de grupo LDAP"
+ "Clear Groupname-LDAP Group Mapping" : "Limpar o mapeamento do nome de grupo LDAP",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Definições verificadas, com problemas. Somente o primeiro utilizador encontrado poderá entrar no sistema. Considere criar um filtro mais expecífico."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/pt_PT.json b/apps/user_ldap/l10n/pt_PT.json
index 253b95d400f..65c9529f962 100644
--- a/apps/user_ldap/l10n/pt_PT.json
+++ b/apps/user_ldap/l10n/pt_PT.json
@@ -38,7 +38,6 @@
"Select attributes" : "Selecionar atributos",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "O utilizador não foi encontrado. Por favor, verifique nome de utilizador e os atributos de permissão. Filtro eficaz (para copiar/colar na linha de comando de validação): <br/>",
"User found and settings verified." : "Utilizador encontrado e as definilções verificadas",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Definições verificadas, com problemas. Somente o primeiro utilizador encontrado poderá entrar no sistema. Considere criar um filtro mais expecífico.",
"An unspecified error occurred. Please check the settings and the log." : "ocorreu um erro não especificado. Por favor, verifique as configurações e o registo.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "O filtro de procura é inválido, provavelmente devido a problemas de sintaxe. Verifique se existem números ímpares de parêntisis abertos e/ou fechados. Por favor reveja.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ocorreu um erro de conexão ao servidor LDAP / AD. Por favor, reveja as definições de endereço, porto e credenciais.",
@@ -155,6 +154,7 @@
"Username-LDAP User Mapping" : "Mapeamento do utilizador LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "O ownCloud usa nomes de utilizadores para guardar e atribuir (meta) dados. Para identificar com precisão os utilizadores, cada utilizador de LDAP tem um nome de utilizador interno. Isto requer um mapeamento entre o utilizador LDAP e o utilizador ownCloud. Adicionalmente, o DN é colocado em cache para reduzir a interação com LDAP, porém não é usado para identificação. Se o DN muda, essas alterações serão vistas pelo ownCloud. O nome interno do ownCloud é usado em todo o lado, no ownCloud. Limpar os mapeamentos deixará vestígios em todo o lado. A limpeza dos mapeamentos não é sensível à configuração, pois afeta todas as configurações de LDAP! Nunca limpe os mapeamentos num ambiente de produção, apenas o faça numa fase de testes ou experimental.",
"Clear Username-LDAP User Mapping" : "Limpar mapeamento do utilizador-LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Limpar o mapeamento do nome de grupo LDAP"
+ "Clear Groupname-LDAP Group Mapping" : "Limpar o mapeamento do nome de grupo LDAP",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Definições verificadas, com problemas. Somente o primeiro utilizador encontrado poderá entrar no sistema. Considere criar um filtro mais expecífico."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js
index eb3e01ac66d..9fd5488025f 100644
--- a/apps/user_ldap/l10n/ru.js
+++ b/apps/user_ldap/l10n/ru.js
@@ -40,13 +40,14 @@ OC.L10N.register(
"Select attributes" : "Выберите атрибуты",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Пользователь не найден. Пожалуйста проверьте учетные данные. Применяемый фильтр (для проверки в командой строке): <br/>",
"User found and settings verified." : "Пользователь найден и настройки проверены.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Настройки проверены, но найден один пользователь. Только первый сможет войти. Советуем пересмотреть фильтр.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Настройки проверены, но найден более чем один пользователь. Только первый сможет произвести вход в систему. Советуем пересмотреть фильтр.",
"An unspecified error occurred. Please check the settings and the log." : "Произошла неуказанная ошибка. Пожалуйста проверьте настройки и журнал.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Некорректный фильтр поиска, возможно из-за синтаксических проблем, таких как несоответствие открывающих и закрывающих скобок. Пожалуйста проверьте.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Произошла ошибка подключения к LDAP / AD, пожалуйста проверьте настройки подключения и учетные данные.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Отсутствует заполнитель %uid. Он будет заменен на логин при запросе к LDAP / AD.",
"Please provide a login name to test against" : "Пожалуйста укажите логин для проверки",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Настройка групп была отключена, так как сервер LDAP / AD не поддерживает memberOf.",
+ "Password change rejected. Hint: " : "Смена пароля отклонена. Подсказка:",
"LDAP / AD integration" : "Интеграция LDAP / AD",
"_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено","%s групп найдено"],
"_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено","%s пользователей найдено"],
@@ -142,6 +143,9 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "При включении, активируется поддержка групп, содержащих другие группы. (Работает только если атрибут член группы содержит DN.)",
"Paging chunksize" : "Страничный размер блоков",
"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.)" : "ChunkSize используется в страничных поисках LDAP которые могут возвращать громоздкие результаты, как например списки пользователей или групп. (Установка значения в \"0\" отключает страничный поиск LDAP для таких ситуаций.)",
+ "Enable LDAP password changes per user" : "Позволить пользователю изменять пароль LDAP",
+ "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." : "Позволить пользователям менять свои пароли LDAP и позволить Супер Администраторам и Администраторам Групп менять пароли своих пользователей LDAP. Работает только в случае, когда политики управления доступом настроены соответствующим образом на сервере LDAP. Поскольку пароли пересылаются простым текстом на сервер LDAP, необходимо использовать шифрование канала передачи и хеширование паролей на сервере LDAP.",
+ "(New password is sent as plain text to LDAP)" : "(Новый пароль отправлен в LDAP простым текстом)",
"Special Attributes" : "Специальные атрибуты",
"Quota Field" : "Поле квоты",
"Quota Default" : "Квота по умолчанию",
@@ -160,7 +164,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется DN для уменьшения числа обращений к LDAP, однако он не используется для идентификации. Если DN был изменён, то изменения будут найдены. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.",
"Clear Username-LDAP User Mapping" : "Очистить соответствия Имя-Пользователь LDAP",
"Clear Groupname-LDAP Group Mapping" : "Очистить соответствия Группа-Группа LDAP",
- "Limit %s access to users meeting these criteria:" : "Ограничить %s доступ для пользователей, отвечающих следующим критериям:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Это даёт гарантию того, что имя пользователя уникально и символы не нужно конвертировать. Во внутреннем имени пользователя можно использовать только следующие символы: [ a-zA-Z0-9_.@- ]. Другие символы замещаются их корреспондирующими символами ASCII или же просто отбрасываются. В крайнем случае будет добавлен/увеличен номер. Внутреннее имя используется для идентификации пользователя внутри системы. Также оно по умолчанию используется для имени домашней папки пользователя. Это также часть адресов URL, например, для всех служб *DAV. С помощью этой установки поведение по умолчанию может быть изменено. Для установки поведения, которое было до ownCloud 5, введите в это поле имя пользователя. Оставьте его пустым для поведения по умолчанию. Изменения будут иметь эффект только для вновь спроецированных (добавленных) пользователей LDAP. "
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Настройки проверены, но найден один пользователь. Только первый сможет войти. Советуем пересмотреть фильтр."
},
"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/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json
index d9c2c9b00fc..0c3e148ec7b 100644
--- a/apps/user_ldap/l10n/ru.json
+++ b/apps/user_ldap/l10n/ru.json
@@ -38,13 +38,14 @@
"Select attributes" : "Выберите атрибуты",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Пользователь не найден. Пожалуйста проверьте учетные данные. Применяемый фильтр (для проверки в командой строке): <br/>",
"User found and settings verified." : "Пользователь найден и настройки проверены.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Настройки проверены, но найден один пользователь. Только первый сможет войти. Советуем пересмотреть фильтр.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Настройки проверены, но найден более чем один пользователь. Только первый сможет произвести вход в систему. Советуем пересмотреть фильтр.",
"An unspecified error occurred. Please check the settings and the log." : "Произошла неуказанная ошибка. Пожалуйста проверьте настройки и журнал.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Некорректный фильтр поиска, возможно из-за синтаксических проблем, таких как несоответствие открывающих и закрывающих скобок. Пожалуйста проверьте.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Произошла ошибка подключения к LDAP / AD, пожалуйста проверьте настройки подключения и учетные данные.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Отсутствует заполнитель %uid. Он будет заменен на логин при запросе к LDAP / AD.",
"Please provide a login name to test against" : "Пожалуйста укажите логин для проверки",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Настройка групп была отключена, так как сервер LDAP / AD не поддерживает memberOf.",
+ "Password change rejected. Hint: " : "Смена пароля отклонена. Подсказка:",
"LDAP / AD integration" : "Интеграция LDAP / AD",
"_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено","%s групп найдено"],
"_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено","%s пользователей найдено"],
@@ -140,6 +141,9 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "При включении, активируется поддержка групп, содержащих другие группы. (Работает только если атрибут член группы содержит DN.)",
"Paging chunksize" : "Страничный размер блоков",
"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.)" : "ChunkSize используется в страничных поисках LDAP которые могут возвращать громоздкие результаты, как например списки пользователей или групп. (Установка значения в \"0\" отключает страничный поиск LDAP для таких ситуаций.)",
+ "Enable LDAP password changes per user" : "Позволить пользователю изменять пароль LDAP",
+ "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." : "Позволить пользователям менять свои пароли LDAP и позволить Супер Администраторам и Администраторам Групп менять пароли своих пользователей LDAP. Работает только в случае, когда политики управления доступом настроены соответствующим образом на сервере LDAP. Поскольку пароли пересылаются простым текстом на сервер LDAP, необходимо использовать шифрование канала передачи и хеширование паролей на сервере LDAP.",
+ "(New password is sent as plain text to LDAP)" : "(Новый пароль отправлен в LDAP простым текстом)",
"Special Attributes" : "Специальные атрибуты",
"Quota Field" : "Поле квоты",
"Quota Default" : "Квота по умолчанию",
@@ -158,7 +162,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется DN для уменьшения числа обращений к LDAP, однако он не используется для идентификации. Если DN был изменён, то изменения будут найдены. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.",
"Clear Username-LDAP User Mapping" : "Очистить соответствия Имя-Пользователь LDAP",
"Clear Groupname-LDAP Group Mapping" : "Очистить соответствия Группа-Группа LDAP",
- "Limit %s access to users meeting these criteria:" : "Ограничить %s доступ для пользователей, отвечающих следующим критериям:",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Это даёт гарантию того, что имя пользователя уникально и символы не нужно конвертировать. Во внутреннем имени пользователя можно использовать только следующие символы: [ a-zA-Z0-9_.@- ]. Другие символы замещаются их корреспондирующими символами ASCII или же просто отбрасываются. В крайнем случае будет добавлен/увеличен номер. Внутреннее имя используется для идентификации пользователя внутри системы. Также оно по умолчанию используется для имени домашней папки пользователя. Это также часть адресов URL, например, для всех служб *DAV. С помощью этой установки поведение по умолчанию может быть изменено. Для установки поведения, которое было до ownCloud 5, введите в это поле имя пользователя. Оставьте его пустым для поведения по умолчанию. Изменения будут иметь эффект только для вновь спроецированных (добавленных) пользователей LDAP. "
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Настройки проверены, но найден один пользователь. Только первый сможет войти. Советуем пересмотреть фильтр."
},"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/user_ldap/l10n/sk_SK.js b/apps/user_ldap/l10n/sk_SK.js
index 49476ca3977..81cb1aa6959 100644
--- a/apps/user_ldap/l10n/sk_SK.js
+++ b/apps/user_ldap/l10n/sk_SK.js
@@ -38,7 +38,6 @@ OC.L10N.register(
"Select attributes" : "Vyberte atribúty",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Používateľ nenájdený. Skontrolujte si svoje prihlasovacie údaje a meno. Použitý filter (pre skopírovanie a overenie v príkazovom riadku): <br/>",
"User found and settings verified." : "Používateľ bol nájdený a nastavenie bolo overené.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavenia sú overené, nájdený jeden používateľ. Len prvý používateľ sa bude môcť prihlásiť. Zvážte nastavenie užšieho filtra.",
"An unspecified error occurred. Please check the settings and the log." : "Nastala nešpecifikovaná chyba. Overte nastavenia a súbor logu.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter vyhľadávania je neplatný, pravdepodobne je chybný syntax, napr. neuzatvorené zátvorky. Overte si to.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP / AD, skontrolujte položky host, port a prihlasovacie údaje.",
@@ -150,6 +149,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Mapovanie názvov LDAP používateľských mien",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Používateľské mená sa používajú na uchovávanie a priraďovanie (meta)dát. Každý používateľ v LDAP bude mať interné používateľské meno, aby bolo možné správne identifikovať a rozpoznávať používateľov. To je vyžaduje vytvorenie mapovania používateľských mien na používateľov v LDAPe. Vytvorené používateľské meno sa namapuje na UUID používateľa v LDAPe. Naviac je sa vo vyrovnávacej pamäti udržiava DN, aby sa obmedzila nadmerná interakcia s LDAPom, ale to sa nepoužíva na identifikáciu. Ak sa DN zmení, zmena bude správne rozpoznaná. Interné používateľské meno sa používa všade. Vyčistenie mapovaní vymaže zvyšky všade. Vyčistenie mapovaní naviac nie je špecifické pre určitú konfiguráciu; bude mať vplyv na všetky konfigurácie LDAPu! Nikdy nečistite mapovanie v produkčnom prostredí, len v testovacej alebo experimentálnej fáze.",
"Clear Username-LDAP User Mapping" : "Zrušiť mapovanie LDAP používateľských mien",
- "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín"
+ "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavenia sú overené, nájdený jeden používateľ. Len prvý používateľ sa bude môcť prihlásiť. Zvážte nastavenie užšieho filtra."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/user_ldap/l10n/sk_SK.json b/apps/user_ldap/l10n/sk_SK.json
index 4642da5c7a5..74d68798c51 100644
--- a/apps/user_ldap/l10n/sk_SK.json
+++ b/apps/user_ldap/l10n/sk_SK.json
@@ -36,7 +36,6 @@
"Select attributes" : "Vyberte atribúty",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Používateľ nenájdený. Skontrolujte si svoje prihlasovacie údaje a meno. Použitý filter (pre skopírovanie a overenie v príkazovom riadku): <br/>",
"User found and settings verified." : "Používateľ bol nájdený a nastavenie bolo overené.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavenia sú overené, nájdený jeden používateľ. Len prvý používateľ sa bude môcť prihlásiť. Zvážte nastavenie užšieho filtra.",
"An unspecified error occurred. Please check the settings and the log." : "Nastala nešpecifikovaná chyba. Overte nastavenia a súbor logu.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter vyhľadávania je neplatný, pravdepodobne je chybný syntax, napr. neuzatvorené zátvorky. Overte si to.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Nastala chyba pri pripojení k LDAP / AD, skontrolujte položky host, port a prihlasovacie údaje.",
@@ -148,6 +147,7 @@
"Username-LDAP User Mapping" : "Mapovanie názvov LDAP používateľských mien",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Používateľské mená sa používajú na uchovávanie a priraďovanie (meta)dát. Každý používateľ v LDAP bude mať interné používateľské meno, aby bolo možné správne identifikovať a rozpoznávať používateľov. To je vyžaduje vytvorenie mapovania používateľských mien na používateľov v LDAPe. Vytvorené používateľské meno sa namapuje na UUID používateľa v LDAPe. Naviac je sa vo vyrovnávacej pamäti udržiava DN, aby sa obmedzila nadmerná interakcia s LDAPom, ale to sa nepoužíva na identifikáciu. Ak sa DN zmení, zmena bude správne rozpoznaná. Interné používateľské meno sa používa všade. Vyčistenie mapovaní vymaže zvyšky všade. Vyčistenie mapovaní naviac nie je špecifické pre určitú konfiguráciu; bude mať vplyv na všetky konfigurácie LDAPu! Nikdy nečistite mapovanie v produkčnom prostredí, len v testovacej alebo experimentálnej fáze.",
"Clear Username-LDAP User Mapping" : "Zrušiť mapovanie LDAP používateľských mien",
- "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín"
+ "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavenia sú overené, nájdený jeden používateľ. Len prvý používateľ sa bude môcť prihlásiť. Zvážte nastavenie užšieho filtra."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/sl.js b/apps/user_ldap/l10n/sl.js
index aa68b965720..7268269e675 100644
--- a/apps/user_ldap/l10n/sl.js
+++ b/apps/user_ldap/l10n/sl.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "Izbor atributov",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uporabnika ni mogoče najti. Preverite atribute prijave in uporabniško ime. Učinkovit filter (za kopiranje overitve ukazne vrstice): <br/>",
"User found and settings verified." : "Uporabnik je najden in nastavitve so overjene.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavitve so overjene, najden pa je le en uporabnik. Le prvi se bo lahko prijavil. Priporočljivo je navesti ožji filter.",
"An unspecified error occurred. Please check the settings and the log." : "Prišlo je do nedoločene napake. Preveriti je treba dnevnik in nastavitve.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter iskanja ni veljaven. Najverjetneje je to zaradi napake skladnje, kot je neustrezno ali neskladno uporabljen oklepaj. Preverite vpis.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Prišlo je do napake povezave z LDAP / AD. Preverite podatke o gostitelju, vratih in poverilih.",
@@ -153,6 +152,7 @@ OC.L10N.register(
"UUID Attribute for Groups:" : "Atribut UUID za skupine:",
"Username-LDAP User Mapping" : "Uporabniška preslikava uporabniškega imena na LDAP",
"Clear Username-LDAP User Mapping" : "Izbriši preslikavo uporabniškega imena na LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP"
+ "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavitve so overjene, najden pa je le en uporabnik. Le prvi se bo lahko prijavil. Priporočljivo je navesti ožji filter."
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/user_ldap/l10n/sl.json b/apps/user_ldap/l10n/sl.json
index 8ae76bd06d8..406ff287748 100644
--- a/apps/user_ldap/l10n/sl.json
+++ b/apps/user_ldap/l10n/sl.json
@@ -38,7 +38,6 @@
"Select attributes" : "Izbor atributov",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uporabnika ni mogoče najti. Preverite atribute prijave in uporabniško ime. Učinkovit filter (za kopiranje overitve ukazne vrstice): <br/>",
"User found and settings verified." : "Uporabnik je najden in nastavitve so overjene.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavitve so overjene, najden pa je le en uporabnik. Le prvi se bo lahko prijavil. Priporočljivo je navesti ožji filter.",
"An unspecified error occurred. Please check the settings and the log." : "Prišlo je do nedoločene napake. Preveriti je treba dnevnik in nastavitve.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filter iskanja ni veljaven. Najverjetneje je to zaradi napake skladnje, kot je neustrezno ali neskladno uporabljen oklepaj. Preverite vpis.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Prišlo je do napake povezave z LDAP / AD. Preverite podatke o gostitelju, vratih in poverilih.",
@@ -151,6 +150,7 @@
"UUID Attribute for Groups:" : "Atribut UUID za skupine:",
"Username-LDAP User Mapping" : "Uporabniška preslikava uporabniškega imena na LDAP",
"Clear Username-LDAP User Mapping" : "Izbriši preslikavo uporabniškega imena na LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP"
+ "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavitve so overjene, najden pa je le en uporabnik. Le prvi se bo lahko prijavil. Priporočljivo je navesti ožji filter."
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js
index 8d999ba16e7..2f09cd96511 100644
--- a/apps/user_ldap/l10n/sq.js
+++ b/apps/user_ldap/l10n/sq.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "Dështoi në heqjen e përshoqërimeve.",
- "Failed to delete the server configuration" : "Dështoi në fshirjen e formësimit të shërbyesit",
+ "Failed to delete the server configuration" : "Dështoi në fshirjen e formësimit të serverit",
"The configuration is invalid: anonymous bind is not allowed." : "Formësimi është i pavlefshëm: nuk lejohen bind-e anonimë.",
"The configuration is valid and the connection could be established!" : "Formësimi është i vlefshëm dhe lidhja mund të vendoset!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Formësimi është i vlefshëm, por Bind-i dështoi. Ju lutemi, kontrolloni rregullimet dhe kredencialet e shërbyesit.",
@@ -21,13 +21,13 @@ OC.L10N.register(
"Select object classes" : "Përzgjidhni klasa objektesh",
"Please check the credentials, they seem to be wrong." : "Ju lutemi, kontrolloni kredencialet, duket se janë gabim.",
"Please specify the port, it could not be auto-detected." : "Ju lutemi, përcaktoni portën, s’u arrit të vetëzbulohet.",
- "Base DN could not be auto-detected, please revise credentials, host and port." : "DN-ja Bazë s’u vetëzbulua dot, ju lutemi, rishikoni kredencialet, strehën dhe portën.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "DN-ja Bazë s’u vetëzbulua dot, ju lutemi, rishikoni kredencialet, hostin dhe portën.",
"Could not detect Base DN, please enter it manually." : "S’u zbulua dot DN Bazë, ju lutemi, jepeni dorazi.",
- "{nthServer}. Server" : "{nthServer}. Shërbyes",
+ "{nthServer}. Server" : "{nthServer}. Server",
"No object found in the given Base DN. Please revise." : "Në DN Bazë të dhën s’u gjet objekt. Ju lutemi, rishikojeni.",
"More than 1,000 directory entries available." : "Më shumë se 1000 zëra të gatshëm.",
" entries available within the provided Base DN" : " zëra të gatshëm brenda DN-së Bazë të dhënë",
- "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ndodhi një gabim. Ju lutemi, kontrolloni DN-në Bazë, sie dhe rregullimet për lidhjen dhe kredencialet.",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ndodhi një gabim. Ju lutemi, kontrolloni DN-në Bazë, si edhe rregullimet për lidhjen dhe kredencialet.",
"Do you really want to delete the current Server Configuration?" : "Doni vërtet të fshihet Formësimi i tanishëm i Shërbyesit?",
"Confirm Deletion" : "Ripohoni Fshirjen",
"Mappings cleared successfully!" : "Përshoqërimet u hoqën me sukses!",
@@ -40,13 +40,13 @@ OC.L10N.register(
"Select attributes" : "Përzgjidhni atribute",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "S’u gjet përdorues. Ju lutemi, kontrolloni atributet tuaja për hyrje dhe emrin e përdoruesit. Filtër efektiv (për kopjim dhe hedhje në rresht urdhrash për vleftësim): <br/>",
"User found and settings verified." : "Përdoruesi u gjet dhe rregullimet u verifikuan.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Rregullimet u verifikuan, por u gjet një përdorues. Vetëm i pari do të jetë në gjendje të bëjë hyrje. Shihni mundësinë e një filtri më të ngushtë.",
"An unspecified error occurred. Please check the settings and the log." : "Ndodhi një gabim i papërcaktuar. Ju lutemi, kontrolloni rregullimet dhe regjistrin.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtri i kërkimit është i pavlefshëm, ndoshta për shkak problemesh sintakse, të tillë si një numër jo i njëjtë kllpash të hapura dhe mbyllura. Ju lutemi, rishikojeni.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ndodhi një gabim lidhje te LDAP / AD, ju lutemi, kontrolloni strehën, portën dhe kredencialet.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Vendmbajtësja %uid mungon. Do të zëvendësohet me emrin e hyrjes, kur të kërkohet te LDAP / AD.",
"Please provide a login name to test against" : "Ju lutemi, jepni një emër hyrjesh që të ritestohet",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kutia e grupeve u çaktivizua, ngaqë shërbyesi LDAP / AD nuk mbulon memberOf.",
+ "LDAP / AD integration" : "Integrimi LDAP / AD",
"_%s group found_::_%s groups found_" : ["U gjet %s grup","U gjetën %s grupe"],
"_%s user found_::_%s users found_" : ["U gjet %s përdorues","U gjetën %s përdorues"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "S’u zbulua dot atribut emri përdoruesi në ekran. Ju lutemi, caktojeni ju vetë te rregullime e mëtejshme për LDAP.",
@@ -141,6 +141,7 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kur aktivizohet, grupet që përmbajnë grupe mbulohen. (Funksionon vetëm nëse atributi për anëtar grupi përmban DN-ra.)",
"Paging chunksize" : "Madhësi copash faqosjeje",
"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.)" : "Madhësi copash të përdorura për kërkime LDAP të sistemuara në faqe, kërkime që japin përfundime të papërpunuara, të tilla si numër përdoruesish ose grupesh. (Caktimi si 0 i çaktivizon kërkimet e faqosura LDAP për këto raste.)",
+ "(New password is sent as plain text to LDAP)" : "(Fjalëkalimi i ri është dërgur si text i thjeshtë te LDAP)",
"Special Attributes" : "Atribute Speciale",
"Quota Field" : "Fushë Kuotash",
"Quota Default" : "Parazgjedhje Kuotash",
@@ -157,6 +158,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Përshoqërim Emër përdoruesi-Përdorues LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Emrat e përdoruesve përdoren për të depozituar dhe shpërndarë (tej) të dhëna. Që të mund të identifikohen dhe pranohen saktësisht përdoruesit, çdo përdorues LDAP do të ketë një emër të brendshëm përdoruesi. Kjo kërkon përshoqërim nga emër përdoruesi te përdorues LDAP. Emri i përdoruesit i krijuar i përshoqërohet UUID-së së përdoruesit LDAP. Tej kësaj, edhe DN-ja ruhet në fshehtinë, për të zvogëluar ndërveprim LDAP, por s’përdoret për identifikim. Nëse ndryshon DN-ja, ndryshimet do të gjenden. Emri i brendshëm i përdoruesi përdoret gjithandej. Heqja e përshoqërimeve do të lërë thërrime ngado. Heqja e përshoqërimeve nuk preket nga formësimi, prek krejt formësimet për LDAP-në! Mos i hiqni kurrë përshoqërimet në një mjedis prodhimi, vetëm në një faqë testimi ose eksperimetale.",
"Clear Username-LDAP User Mapping" : "Pastro Përshoqërimin Emër përdoruesi-Përdorues LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Pastro Përshoqërimin Emër grupi-Grup LDAP"
+ "Clear Groupname-LDAP Group Mapping" : "Pastro Përshoqërimin Emër grupi-Grup LDAP",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Rregullimet u verifikuan, por u gjet një përdorues. Vetëm i pari do të jetë në gjendje të bëjë hyrje. Shihni mundësinë e një filtri më të ngushtë."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json
index 55062cff11d..053ae0f5a2d 100644
--- a/apps/user_ldap/l10n/sq.json
+++ b/apps/user_ldap/l10n/sq.json
@@ -1,6 +1,6 @@
{ "translations": {
"Failed to clear the mappings." : "Dështoi në heqjen e përshoqërimeve.",
- "Failed to delete the server configuration" : "Dështoi në fshirjen e formësimit të shërbyesit",
+ "Failed to delete the server configuration" : "Dështoi në fshirjen e formësimit të serverit",
"The configuration is invalid: anonymous bind is not allowed." : "Formësimi është i pavlefshëm: nuk lejohen bind-e anonimë.",
"The configuration is valid and the connection could be established!" : "Formësimi është i vlefshëm dhe lidhja mund të vendoset!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Formësimi është i vlefshëm, por Bind-i dështoi. Ju lutemi, kontrolloni rregullimet dhe kredencialet e shërbyesit.",
@@ -19,13 +19,13 @@
"Select object classes" : "Përzgjidhni klasa objektesh",
"Please check the credentials, they seem to be wrong." : "Ju lutemi, kontrolloni kredencialet, duket se janë gabim.",
"Please specify the port, it could not be auto-detected." : "Ju lutemi, përcaktoni portën, s’u arrit të vetëzbulohet.",
- "Base DN could not be auto-detected, please revise credentials, host and port." : "DN-ja Bazë s’u vetëzbulua dot, ju lutemi, rishikoni kredencialet, strehën dhe portën.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "DN-ja Bazë s’u vetëzbulua dot, ju lutemi, rishikoni kredencialet, hostin dhe portën.",
"Could not detect Base DN, please enter it manually." : "S’u zbulua dot DN Bazë, ju lutemi, jepeni dorazi.",
- "{nthServer}. Server" : "{nthServer}. Shërbyes",
+ "{nthServer}. Server" : "{nthServer}. Server",
"No object found in the given Base DN. Please revise." : "Në DN Bazë të dhën s’u gjet objekt. Ju lutemi, rishikojeni.",
"More than 1,000 directory entries available." : "Më shumë se 1000 zëra të gatshëm.",
" entries available within the provided Base DN" : " zëra të gatshëm brenda DN-së Bazë të dhënë",
- "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ndodhi një gabim. Ju lutemi, kontrolloni DN-në Bazë, sie dhe rregullimet për lidhjen dhe kredencialet.",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ndodhi një gabim. Ju lutemi, kontrolloni DN-në Bazë, si edhe rregullimet për lidhjen dhe kredencialet.",
"Do you really want to delete the current Server Configuration?" : "Doni vërtet të fshihet Formësimi i tanishëm i Shërbyesit?",
"Confirm Deletion" : "Ripohoni Fshirjen",
"Mappings cleared successfully!" : "Përshoqërimet u hoqën me sukses!",
@@ -38,13 +38,13 @@
"Select attributes" : "Përzgjidhni atribute",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "S’u gjet përdorues. Ju lutemi, kontrolloni atributet tuaja për hyrje dhe emrin e përdoruesit. Filtër efektiv (për kopjim dhe hedhje në rresht urdhrash për vleftësim): <br/>",
"User found and settings verified." : "Përdoruesi u gjet dhe rregullimet u verifikuan.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Rregullimet u verifikuan, por u gjet një përdorues. Vetëm i pari do të jetë në gjendje të bëjë hyrje. Shihni mundësinë e një filtri më të ngushtë.",
"An unspecified error occurred. Please check the settings and the log." : "Ndodhi një gabim i papërcaktuar. Ju lutemi, kontrolloni rregullimet dhe regjistrin.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtri i kërkimit është i pavlefshëm, ndoshta për shkak problemesh sintakse, të tillë si një numër jo i njëjtë kllpash të hapura dhe mbyllura. Ju lutemi, rishikojeni.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ndodhi një gabim lidhje te LDAP / AD, ju lutemi, kontrolloni strehën, portën dhe kredencialet.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Vendmbajtësja %uid mungon. Do të zëvendësohet me emrin e hyrjes, kur të kërkohet te LDAP / AD.",
"Please provide a login name to test against" : "Ju lutemi, jepni një emër hyrjesh që të ritestohet",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Kutia e grupeve u çaktivizua, ngaqë shërbyesi LDAP / AD nuk mbulon memberOf.",
+ "LDAP / AD integration" : "Integrimi LDAP / AD",
"_%s group found_::_%s groups found_" : ["U gjet %s grup","U gjetën %s grupe"],
"_%s user found_::_%s users found_" : ["U gjet %s përdorues","U gjetën %s përdorues"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "S’u zbulua dot atribut emri përdoruesi në ekran. Ju lutemi, caktojeni ju vetë te rregullime e mëtejshme për LDAP.",
@@ -139,6 +139,7 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kur aktivizohet, grupet që përmbajnë grupe mbulohen. (Funksionon vetëm nëse atributi për anëtar grupi përmban DN-ra.)",
"Paging chunksize" : "Madhësi copash faqosjeje",
"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.)" : "Madhësi copash të përdorura për kërkime LDAP të sistemuara në faqe, kërkime që japin përfundime të papërpunuara, të tilla si numër përdoruesish ose grupesh. (Caktimi si 0 i çaktivizon kërkimet e faqosura LDAP për këto raste.)",
+ "(New password is sent as plain text to LDAP)" : "(Fjalëkalimi i ri është dërgur si text i thjeshtë te LDAP)",
"Special Attributes" : "Atribute Speciale",
"Quota Field" : "Fushë Kuotash",
"Quota Default" : "Parazgjedhje Kuotash",
@@ -155,6 +156,7 @@
"Username-LDAP User Mapping" : "Përshoqërim Emër përdoruesi-Përdorues LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Emrat e përdoruesve përdoren për të depozituar dhe shpërndarë (tej) të dhëna. Që të mund të identifikohen dhe pranohen saktësisht përdoruesit, çdo përdorues LDAP do të ketë një emër të brendshëm përdoruesi. Kjo kërkon përshoqërim nga emër përdoruesi te përdorues LDAP. Emri i përdoruesit i krijuar i përshoqërohet UUID-së së përdoruesit LDAP. Tej kësaj, edhe DN-ja ruhet në fshehtinë, për të zvogëluar ndërveprim LDAP, por s’përdoret për identifikim. Nëse ndryshon DN-ja, ndryshimet do të gjenden. Emri i brendshëm i përdoruesi përdoret gjithandej. Heqja e përshoqërimeve do të lërë thërrime ngado. Heqja e përshoqërimeve nuk preket nga formësimi, prek krejt formësimet për LDAP-në! Mos i hiqni kurrë përshoqërimet në një mjedis prodhimi, vetëm në një faqë testimi ose eksperimetale.",
"Clear Username-LDAP User Mapping" : "Pastro Përshoqërimin Emër përdoruesi-Përdorues LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Pastro Përshoqërimin Emër grupi-Grup LDAP"
+ "Clear Groupname-LDAP Group Mapping" : "Pastro Përshoqërimin Emër grupi-Grup LDAP",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Rregullimet u verifikuan, por u gjet një përdorues. Vetëm i pari do të jetë në gjendje të bëjë hyrje. Shihni mundësinë e një filtri më të ngushtë."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js
index 85613eec41e..8c1bd3782de 100644
--- a/apps/user_ldap/l10n/sr.js
+++ b/apps/user_ldap/l10n/sr.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"Select attributes" : "Изаберите атрибуте",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Корисник није нађен. Проверите пријавне атрибуте и корисничко име. Важећи филтер (за копирај-налепи за оверу командне линије): <br/>",
"User found and settings verified." : "Корисник нађен и поставке проверене.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Поставке проверене али један корисник је нађен. Само први ће успети да се пријави. Размотрите проширење филтрирања.",
"An unspecified error occurred. Please check the settings and the log." : "Десила се неодређана грешка. Проверите поставке и записник.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Филтер претраге је неисправан, вероватно због синтаксе попут неједнаког броја отворених и затворених заграда. Проверите.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Дошло је до грешке ЛДАП / АД везе. Проверите домаћина, порт и акредитиве.",
@@ -151,6 +150,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Username-LDAP мапирање корисника",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Корисничка имена се користи за чување и додељивање (мета) података. Да би се прецизно идентификовали и препознавали кориснике, сваки LDAP корисник ће имати локално корисничко име. Ово захтева мапирање од корисничког имена до LDAP корисника. Креирано корисничко име се мапира у UUID LDAP корисника. Поред тога, DN се кешира да смањи LDAP интеракцију, али се не користи за идентификацију. Ако се DN мења, промене се могу наћи. Локално корисничко име се користи свуда. Чишћење мапирања оставља свуда остатке. Чишћење мапирања није осетљиво на конфигурацију, оно утиче на све LDAP конфигурације! Никада не користит чишћење мапирања у радном окружењу, већ само у тестирању или експерименталној фази.",
"Clear Username-LDAP User Mapping" : "Очисти Username-LDAP мапирање корисника",
- "Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група"
+ "Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Поставке проверене али један корисник је нађен. Само први ће успети да се пријави. Размотрите проширење филтрирања."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json
index 6823fb23228..4ed2b4a69c3 100644
--- a/apps/user_ldap/l10n/sr.json
+++ b/apps/user_ldap/l10n/sr.json
@@ -37,7 +37,6 @@
"Select attributes" : "Изаберите атрибуте",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Корисник није нађен. Проверите пријавне атрибуте и корисничко име. Важећи филтер (за копирај-налепи за оверу командне линије): <br/>",
"User found and settings verified." : "Корисник нађен и поставке проверене.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Поставке проверене али један корисник је нађен. Само први ће успети да се пријави. Размотрите проширење филтрирања.",
"An unspecified error occurred. Please check the settings and the log." : "Десила се неодређана грешка. Проверите поставке и записник.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Филтер претраге је неисправан, вероватно због синтаксе попут неједнаког броја отворених и затворених заграда. Проверите.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Дошло је до грешке ЛДАП / АД везе. Проверите домаћина, порт и акредитиве.",
@@ -149,6 +148,7 @@
"Username-LDAP User Mapping" : "Username-LDAP мапирање корисника",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Корисничка имена се користи за чување и додељивање (мета) података. Да би се прецизно идентификовали и препознавали кориснике, сваки LDAP корисник ће имати локално корисничко име. Ово захтева мапирање од корисничког имена до LDAP корисника. Креирано корисничко име се мапира у UUID LDAP корисника. Поред тога, DN се кешира да смањи LDAP интеракцију, али се не користи за идентификацију. Ако се DN мења, промене се могу наћи. Локално корисничко име се користи свуда. Чишћење мапирања оставља свуда остатке. Чишћење мапирања није осетљиво на конфигурацију, оно утиче на све LDAP конфигурације! Никада не користит чишћење мапирања у радном окружењу, већ само у тестирању или експерименталној фази.",
"Clear Username-LDAP User Mapping" : "Очисти Username-LDAP мапирање корисника",
- "Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група"
+ "Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Поставке проверене али један корисник је нађен. Само први ће успети да се пријави. Размотрите проширење филтрирања."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js
index 650abf885a8..9a1768fe01e 100644
--- a/apps/user_ldap/l10n/sv.js
+++ b/apps/user_ldap/l10n/sv.js
@@ -22,7 +22,7 @@ OC.L10N.register(
"Please check the credentials, they seem to be wrong." : "Var god kontrollera dina uppgifter, de verkar vara fel.",
"Please specify the port, it could not be auto-detected." : "Var god specificera en port, den kunde ej autodetekteras.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Grundläggande DN kunde ej autodetekteras, var god dubbelkontrollera dina uppgifter, värd och port.",
- "Could not detect Base DN, please enter it manually." : "Kunde ej upptäcka Base DN, var god ange det manuellt.",
+ "Could not detect Base DN, please enter it manually." : "Kunde inte upptäcka Base DN, var god ange det manuellt.",
"{nthServer}. Server" : "{nthServer}. Server",
"No object found in the given Base DN. Please revise." : "Inget objekt funnet i den givna Base DN. Var god granska.",
"More than 1,000 directory entries available." : "Mer än 1,000 katalogposter tillgängliga.",
@@ -32,18 +32,19 @@ OC.L10N.register(
"Confirm Deletion" : "Bekräfta radering",
"Mappings cleared successfully!" : "Rensning av mappningar lyckades!",
"Error while clearing the mappings." : "Fel uppstod under rensning av mappningar",
- "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous bind är inte tillåten. Var god ange en Användar-DN och lösenord.",
- "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP procedursfel. Anonymous bind tillåts troligtvis inte.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Sparning misslyckades. Var god kontrollera att databasen är verksam. Ladda om innan du fortsätter.",
"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?" : "Byte av läge kommer aktivera automatiska LDAP förfrågningar. Beroende på din LDAP storlek kan de ta ett tag. Vill du fortfarande ändra läge?",
"Mode switch" : "Lägesändring",
"Select attributes" : "Välj attribut",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Användare inte hittad. Var god kontrollera din inloggnings attribut och användarnamn. Effektivt filter (för att kopiera och klistra in i kommandofönster validering):",
"User found and settings verified." : "Användare hittad och inställnings bekräftade.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Inställningar bekräftade, men inga användare funna. Endast den första kommer kunna logga in. Överväg ett mer begränsat filter.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Inställningarna verifierade men flera än 1 användare hittades. Endast den första kommer att kunna logga in. Annars testa med att göra en mer specifik sökning.",
"An unspecified error occurred. Please check the settings and the log." : "Ett ospecificerat fel uppstod. Var god kontrollera inställningar och logfilen.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Sökfiltret är ej giltigt, antagligen på grund utav ett syntaxfel så som ojämnat antal öppna och stängda klammrar. Var god granska.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Var god granska värd, port och inloggningsuppgifter.",
+ "Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med",
+ "Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ",
+ "LDAP / AD integration" : "LDAP / AD integration",
"_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"],
"_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.",
@@ -52,23 +53,40 @@ OC.L10N.register(
"Test Configuration" : "Testa konfigurationen",
"Help" : "Hjälp",
"Groups meeting these criteria are available in %s:" : "Grupper som uppfyller dessa kriterier finns i %s:",
+ "Only these object classes:" : "Endast dessa objektklasser:",
+ "Only from these groups:" : "Endast från dessa grupper:",
+ "Search groups" : "Sökgrupper",
+ "Available groups" : "Tillgängliga grupper",
+ "Selected groups" : "Valda grupper",
+ "Edit LDAP Query" : "Redigera LDAP förfrågan",
+ "LDAP Filter:" : "LDAP Filter:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filtret specifierar vilka LDAD-grupper som ska ha åtkomst till %s instans",
+ "Verify settings and count groups" : "Verifiera inställningar och räkna grupper",
+ "LDAP / AD Username:" : "LDAP / AD Användarnamn:",
+ "LDAP / AD Email Address:" : "LDAP / AD E-postadress:",
"Other Attributes:" : "Övriga attribut:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definierar filter som tillämpas vid inloggning. %%uid ersätter användarnamn vid inloggningen. Exempel: \"uid=%%uid\"",
+ "Verify settings" : "Verifiera inställningar",
"1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
+ "Add a new and blank configuration" : "Skapa en ny och tom konfiguration",
+ "Copy current configuration into new directory binding" : "Kopiera nuvarande konfiguration till en ny katalogsammansättning",
+ "Delete the current configuration" : "Radera nuvarande konfiguration",
"Host" : "Server",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du behöver inte ange protokoll förutom om du använder SSL. Starta då med ldaps://",
"Port" : "Port",
+ "Detect Port" : "Upptäck Port",
"User DN" : "Användar-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 för användaren som skall användas, t.ex. uid=agent, dc=example, dc=com. För anonym åtkomst, lämna DN och lösenord tomt.",
"Password" : "Lösenord",
"For anonymous access, leave DN and Password empty." : "För anonym åtkomst, lämna DN och lösenord tomt.",
"One Base DN per line" : "Ett start-DN per rad",
"You can specify Base DN for users and groups in the Advanced tab" : "Du kan ange start-DN för användare och grupper under fliken Avancerat",
+ "Test Base DN" : "Testa Bas-DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undviker automatiska LDAP-förfrågningar. Bättre för större installationer, men kräver en del LDAP-kunskap.",
"Manually enter LDAP filters (recommended for large directories)" : "Ange LDAP-filter manuellt (rekommenderat för stora kataloger)",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtret specifierar vilka LDAP-användare som skall ha åtkomst till %s instans",
+ "Verify settings and count users" : "Verifiera inställningar och räkna användare",
"Saving" : "Sparar",
"Back" : "Tillbaka",
"Continue" : "Fortsätt",
@@ -90,11 +108,11 @@ OC.L10N.register(
"Only connect to the replica server." : "Anslut endast till replikaservern.",
"Turn off SSL certificate validation." : "Stäng av verifiering av SSL-certifikat.",
"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." : "Rekommenderas inte, använd endast för test! Om anslutningen bara fungerar med denna inställning behöver du importera LDAP-serverns SSL-certifikat till din %s server.",
- "Cache Time-To-Live" : "Cache Time-To-Live",
"in seconds. A change empties the cache." : "i sekunder. En förändring tömmer cache.",
"Directory Settings" : "Mappinställningar",
"User Display Name Field" : "Attribut för användarnamn",
"The LDAP attribute to use to generate the user's display name." : "LDAP-attributet som ska användas för att generera användarens visningsnamn.",
+ "2nd User Display Name Field" : "2:a Visningsnamns Fält",
"Base User Tree" : "Bas för användare i katalogtjänst",
"One User Base DN per line" : "En användarstart-DN per rad",
"User Search Attributes" : "Användarsökningsattribut",
@@ -105,13 +123,16 @@ OC.L10N.register(
"One Group Base DN per line" : "En gruppstart-DN per rad",
"Group Search Attributes" : "Gruppsökningsattribut",
"Group-Member association" : "Attribut för gruppmedlemmar",
+ "Dynamic Group Member URL" : "Dynamic Group Member URL",
"Nested Groups" : "Undergrupper",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "När den är påslagen, stöds grupper som innehåller grupper. (Fungerar endast om gruppmedlemmens attribut innehåller DN.)",
"Paging chunksize" : "Paging klusterstorlek",
"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.)" : "Klusterstorlek som används för paged LDAP sökningar som kan komma att returnera skrymmande resultat som uppräknande av användare eller grupper. (Inställning av denna till 0 inaktiverar paged LDAP sökningar i de situationerna)",
+ "Enable LDAP password changes per user" : "Aktivera: Antal tillåtna lösenordsbyten för LDAP-användare",
+ "(New password is sent as plain text to LDAP)" : "(Nytt lösenord skickas som oformaterad text till LDAP)",
"Special Attributes" : "Specialattribut",
- "Quota Field" : "Kvotfält",
- "Quota Default" : "Datakvot standard",
+ "Quota Field" : "Fält för lagringsutrymme",
+ "Quota Default" : "Standardutrymme för lagring",
"in bytes" : "i bytes",
"Email Field" : "E-postfält",
"User Home Folder Naming Rule" : "Namnregel för hemkatalog",
@@ -124,6 +145,7 @@ OC.L10N.register(
"UUID Attribute for Groups:" : "UUID-attribut för grupper:",
"Username-LDAP User Mapping" : "Användarnamn-LDAP användarmappning",
"Clear Username-LDAP User Mapping" : "Rensa användarnamn-LDAP användarmappning",
- "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning"
+ "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Inställningar bekräftade, men inga användare funna. Endast den första kommer kunna logga in. Överväg ett mer begränsat filter."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json
index 246ec8f7718..a4019761f96 100644
--- a/apps/user_ldap/l10n/sv.json
+++ b/apps/user_ldap/l10n/sv.json
@@ -20,7 +20,7 @@
"Please check the credentials, they seem to be wrong." : "Var god kontrollera dina uppgifter, de verkar vara fel.",
"Please specify the port, it could not be auto-detected." : "Var god specificera en port, den kunde ej autodetekteras.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Grundläggande DN kunde ej autodetekteras, var god dubbelkontrollera dina uppgifter, värd och port.",
- "Could not detect Base DN, please enter it manually." : "Kunde ej upptäcka Base DN, var god ange det manuellt.",
+ "Could not detect Base DN, please enter it manually." : "Kunde inte upptäcka Base DN, var god ange det manuellt.",
"{nthServer}. Server" : "{nthServer}. Server",
"No object found in the given Base DN. Please revise." : "Inget objekt funnet i den givna Base DN. Var god granska.",
"More than 1,000 directory entries available." : "Mer än 1,000 katalogposter tillgängliga.",
@@ -30,18 +30,19 @@
"Confirm Deletion" : "Bekräfta radering",
"Mappings cleared successfully!" : "Rensning av mappningar lyckades!",
"Error while clearing the mappings." : "Fel uppstod under rensning av mappningar",
- "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous bind är inte tillåten. Var god ange en Användar-DN och lösenord.",
- "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP procedursfel. Anonymous bind tillåts troligtvis inte.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Sparning misslyckades. Var god kontrollera att databasen är verksam. Ladda om innan du fortsätter.",
"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?" : "Byte av läge kommer aktivera automatiska LDAP förfrågningar. Beroende på din LDAP storlek kan de ta ett tag. Vill du fortfarande ändra läge?",
"Mode switch" : "Lägesändring",
"Select attributes" : "Välj attribut",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Användare inte hittad. Var god kontrollera din inloggnings attribut och användarnamn. Effektivt filter (för att kopiera och klistra in i kommandofönster validering):",
"User found and settings verified." : "Användare hittad och inställnings bekräftade.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Inställningar bekräftade, men inga användare funna. Endast den första kommer kunna logga in. Överväg ett mer begränsat filter.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Inställningarna verifierade men flera än 1 användare hittades. Endast den första kommer att kunna logga in. Annars testa med att göra en mer specifik sökning.",
"An unspecified error occurred. Please check the settings and the log." : "Ett ospecificerat fel uppstod. Var god kontrollera inställningar och logfilen.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Sökfiltret är ej giltigt, antagligen på grund utav ett syntaxfel så som ojämnat antal öppna och stängda klammrar. Var god granska.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Var god granska värd, port och inloggningsuppgifter.",
+ "Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med",
+ "Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ",
+ "LDAP / AD integration" : "LDAP / AD integration",
"_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"],
"_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.",
@@ -50,23 +51,40 @@
"Test Configuration" : "Testa konfigurationen",
"Help" : "Hjälp",
"Groups meeting these criteria are available in %s:" : "Grupper som uppfyller dessa kriterier finns i %s:",
+ "Only these object classes:" : "Endast dessa objektklasser:",
+ "Only from these groups:" : "Endast från dessa grupper:",
+ "Search groups" : "Sökgrupper",
+ "Available groups" : "Tillgängliga grupper",
+ "Selected groups" : "Valda grupper",
+ "Edit LDAP Query" : "Redigera LDAP förfrågan",
+ "LDAP Filter:" : "LDAP Filter:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filtret specifierar vilka LDAD-grupper som ska ha åtkomst till %s instans",
+ "Verify settings and count groups" : "Verifiera inställningar och räkna grupper",
+ "LDAP / AD Username:" : "LDAP / AD Användarnamn:",
+ "LDAP / AD Email Address:" : "LDAP / AD E-postadress:",
"Other Attributes:" : "Övriga attribut:",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definierar filter som tillämpas vid inloggning. %%uid ersätter användarnamn vid inloggningen. Exempel: \"uid=%%uid\"",
+ "Verify settings" : "Verifiera inställningar",
"1. Server" : "1. Server",
"%s. Server:" : "%s. Server:",
+ "Add a new and blank configuration" : "Skapa en ny och tom konfiguration",
+ "Copy current configuration into new directory binding" : "Kopiera nuvarande konfiguration till en ny katalogsammansättning",
+ "Delete the current configuration" : "Radera nuvarande konfiguration",
"Host" : "Server",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du behöver inte ange protokoll förutom om du använder SSL. Starta då med ldaps://",
"Port" : "Port",
+ "Detect Port" : "Upptäck Port",
"User DN" : "Användar-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 för användaren som skall användas, t.ex. uid=agent, dc=example, dc=com. För anonym åtkomst, lämna DN och lösenord tomt.",
"Password" : "Lösenord",
"For anonymous access, leave DN and Password empty." : "För anonym åtkomst, lämna DN och lösenord tomt.",
"One Base DN per line" : "Ett start-DN per rad",
"You can specify Base DN for users and groups in the Advanced tab" : "Du kan ange start-DN för användare och grupper under fliken Avancerat",
+ "Test Base DN" : "Testa Bas-DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Undviker automatiska LDAP-förfrågningar. Bättre för större installationer, men kräver en del LDAP-kunskap.",
"Manually enter LDAP filters (recommended for large directories)" : "Ange LDAP-filter manuellt (rekommenderat för stora kataloger)",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filtret specifierar vilka LDAP-användare som skall ha åtkomst till %s instans",
+ "Verify settings and count users" : "Verifiera inställningar och räkna användare",
"Saving" : "Sparar",
"Back" : "Tillbaka",
"Continue" : "Fortsätt",
@@ -88,11 +106,11 @@
"Only connect to the replica server." : "Anslut endast till replikaservern.",
"Turn off SSL certificate validation." : "Stäng av verifiering av SSL-certifikat.",
"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." : "Rekommenderas inte, använd endast för test! Om anslutningen bara fungerar med denna inställning behöver du importera LDAP-serverns SSL-certifikat till din %s server.",
- "Cache Time-To-Live" : "Cache Time-To-Live",
"in seconds. A change empties the cache." : "i sekunder. En förändring tömmer cache.",
"Directory Settings" : "Mappinställningar",
"User Display Name Field" : "Attribut för användarnamn",
"The LDAP attribute to use to generate the user's display name." : "LDAP-attributet som ska användas för att generera användarens visningsnamn.",
+ "2nd User Display Name Field" : "2:a Visningsnamns Fält",
"Base User Tree" : "Bas för användare i katalogtjänst",
"One User Base DN per line" : "En användarstart-DN per rad",
"User Search Attributes" : "Användarsökningsattribut",
@@ -103,13 +121,16 @@
"One Group Base DN per line" : "En gruppstart-DN per rad",
"Group Search Attributes" : "Gruppsökningsattribut",
"Group-Member association" : "Attribut för gruppmedlemmar",
+ "Dynamic Group Member URL" : "Dynamic Group Member URL",
"Nested Groups" : "Undergrupper",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "När den är påslagen, stöds grupper som innehåller grupper. (Fungerar endast om gruppmedlemmens attribut innehåller DN.)",
"Paging chunksize" : "Paging klusterstorlek",
"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.)" : "Klusterstorlek som används för paged LDAP sökningar som kan komma att returnera skrymmande resultat som uppräknande av användare eller grupper. (Inställning av denna till 0 inaktiverar paged LDAP sökningar i de situationerna)",
+ "Enable LDAP password changes per user" : "Aktivera: Antal tillåtna lösenordsbyten för LDAP-användare",
+ "(New password is sent as plain text to LDAP)" : "(Nytt lösenord skickas som oformaterad text till LDAP)",
"Special Attributes" : "Specialattribut",
- "Quota Field" : "Kvotfält",
- "Quota Default" : "Datakvot standard",
+ "Quota Field" : "Fält för lagringsutrymme",
+ "Quota Default" : "Standardutrymme för lagring",
"in bytes" : "i bytes",
"Email Field" : "E-postfält",
"User Home Folder Naming Rule" : "Namnregel för hemkatalog",
@@ -122,6 +143,7 @@
"UUID Attribute for Groups:" : "UUID-attribut för grupper:",
"Username-LDAP User Mapping" : "Användarnamn-LDAP användarmappning",
"Clear Username-LDAP User Mapping" : "Rensa användarnamn-LDAP användarmappning",
- "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning"
+ "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Inställningar bekräftade, men inga användare funna. Endast den första kommer kunna logga in. Överväg ett mer begränsat filter."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/th_TH.js b/apps/user_ldap/l10n/th_TH.js
index 68aa1069fdc..a5faa068c46 100644
--- a/apps/user_ldap/l10n/th_TH.js
+++ b/apps/user_ldap/l10n/th_TH.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "เลือกคุณลักษณะ",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "ไม่พบผู้ใช้ กรุณาตรวจสอบคุณลักษณะการเข้าสู่ระบบและชื่อผู้ใช้ของคุณ ตัวกรองที่มีประสิทธิภาพ (การคัดลอกและวางสำหรับการตรวจสอบคำสั่งทีละบรรทัด): <br/>",
"User found and settings verified." : "พบผู้ใช้และการตั้งค่าได้รับการตรวจสอบแล้ว",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "การตั้งค่าได้รับการตรวจสอบแล้ว แต่ผู้ใช้คนหนึ่งพบว่า มีเพียงครั้งแรกที่จะสามารถที่จะเข้าสู่ระบบ กรุณาพิจารณาตัวกรองที่จำกัดมากขึ้น",
"An unspecified error occurred. Please check the settings and the log." : "เกิดข้อผิดพลาดที่ระบุไม่ได้ กรุณาตรวจสอบการตั้งค่าและบันทึกของคุณ",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้องอาจเป็นเพราะปัญหาไวยากรณ์เช่นหมายเลขที่ไม่สม่ำเสมอของวงเล็บเปิดและปิด กรุณาแก้ไข",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยัง LDAP/AD โปรดตรวจสอบโฮสต์พอร์ตและข้อมูลอื่นๆ",
@@ -153,6 +152,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Username-LDAP ผู้ใช้ Mapping",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ชื่อผู้ใช้จะใช้ในการจัดเก็บและกำหนดข้อมูล (เมตา) เพื่อรู้จักกับผู้ใช้และสามารถระบุได้อย่างแม่นยำ แต่ละ LDAP จะมีชื่อผู้ใช้ภายใน จึงต้องทำ Mapping ให้กับผู้ใช้ LDAP ชื่อผู้ใช้ที่ถูกสร้างขึ้นจะถูกแมปเข้ากับ UUID ของผู้ใช้ LDAP นอกจากนี้ DN ก็จะถูกแคชเช่นกันเพื่อลดการทำงานร่วมกันของ LDAP แต่มันก็ไม่ได้ใช้เพื่อระบุตัวตน หากมีการเปลี่ยนแปลง DN การเปลี่ยนแปลงจะถูกพบในทันที ชื่อผู้ใช้ภายในจะถูกใช้กับทั้งหมด การล้างแมปไม่มีผลต่อการกำหนดค่า LDAP ทั้งหมด! \nและจะเกิดขึ้นเฉพาะในการทดสอบหรือขั้นตอนการทดลอง",
"Clear Username-LDAP User Mapping" : "ล้าง Username-LDAP ผู้ใช้ Mapping",
- "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping"
+ "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "การตั้งค่าได้รับการตรวจสอบแล้ว แต่ผู้ใช้คนหนึ่งพบว่า มีเพียงครั้งแรกที่จะสามารถที่จะเข้าสู่ระบบ กรุณาพิจารณาตัวกรองที่จำกัดมากขึ้น"
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/th_TH.json b/apps/user_ldap/l10n/th_TH.json
index 1f74008274e..609090470a4 100644
--- a/apps/user_ldap/l10n/th_TH.json
+++ b/apps/user_ldap/l10n/th_TH.json
@@ -38,7 +38,6 @@
"Select attributes" : "เลือกคุณลักษณะ",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "ไม่พบผู้ใช้ กรุณาตรวจสอบคุณลักษณะการเข้าสู่ระบบและชื่อผู้ใช้ของคุณ ตัวกรองที่มีประสิทธิภาพ (การคัดลอกและวางสำหรับการตรวจสอบคำสั่งทีละบรรทัด): <br/>",
"User found and settings verified." : "พบผู้ใช้และการตั้งค่าได้รับการตรวจสอบแล้ว",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "การตั้งค่าได้รับการตรวจสอบแล้ว แต่ผู้ใช้คนหนึ่งพบว่า มีเพียงครั้งแรกที่จะสามารถที่จะเข้าสู่ระบบ กรุณาพิจารณาตัวกรองที่จำกัดมากขึ้น",
"An unspecified error occurred. Please check the settings and the log." : "เกิดข้อผิดพลาดที่ระบุไม่ได้ กรุณาตรวจสอบการตั้งค่าและบันทึกของคุณ",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้องอาจเป็นเพราะปัญหาไวยากรณ์เช่นหมายเลขที่ไม่สม่ำเสมอของวงเล็บเปิดและปิด กรุณาแก้ไข",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "เกิดข้อผิดพลาดขณะเชื่อมต่อไปยัง LDAP/AD โปรดตรวจสอบโฮสต์พอร์ตและข้อมูลอื่นๆ",
@@ -151,6 +150,7 @@
"Username-LDAP User Mapping" : "Username-LDAP ผู้ใช้ Mapping",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ชื่อผู้ใช้จะใช้ในการจัดเก็บและกำหนดข้อมูล (เมตา) เพื่อรู้จักกับผู้ใช้และสามารถระบุได้อย่างแม่นยำ แต่ละ LDAP จะมีชื่อผู้ใช้ภายใน จึงต้องทำ Mapping ให้กับผู้ใช้ LDAP ชื่อผู้ใช้ที่ถูกสร้างขึ้นจะถูกแมปเข้ากับ UUID ของผู้ใช้ LDAP นอกจากนี้ DN ก็จะถูกแคชเช่นกันเพื่อลดการทำงานร่วมกันของ LDAP แต่มันก็ไม่ได้ใช้เพื่อระบุตัวตน หากมีการเปลี่ยนแปลง DN การเปลี่ยนแปลงจะถูกพบในทันที ชื่อผู้ใช้ภายในจะถูกใช้กับทั้งหมด การล้างแมปไม่มีผลต่อการกำหนดค่า LDAP ทั้งหมด! \nและจะเกิดขึ้นเฉพาะในการทดสอบหรือขั้นตอนการทดลอง",
"Clear Username-LDAP User Mapping" : "ล้าง Username-LDAP ผู้ใช้ Mapping",
- "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping"
+ "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "การตั้งค่าได้รับการตรวจสอบแล้ว แต่ผู้ใช้คนหนึ่งพบว่า มีเพียงครั้งแรกที่จะสามารถที่จะเข้าสู่ระบบ กรุณาพิจารณาตัวกรองที่จำกัดมากขึ้น"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js
index d8a25231654..f7e42c7f3c9 100644
--- a/apps/user_ldap/l10n/tr.js
+++ b/apps/user_ldap/l10n/tr.js
@@ -40,7 +40,6 @@ OC.L10N.register(
"Select attributes" : "Nitelikleri seç",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Kullanıcı bulunamadı. Lütfen oturum açtığınız nitelikleri ve kullanıcı adını kontrol edin. Etkili filtre (komut satırı doğrulaması için kopyala-yapıştır için): <br/>",
"User found and settings verified." : "Kullanıcı bulundu ve ayarlar doğrulandı.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Ayarlar doğrulandı ancak tek kullanıcı bulundu. Sadece ilk kullanıcı oturum açabilecek. Lütfen daha dar bir filtre seçin.",
"An unspecified error occurred. Please check the settings and the log." : "Belirtilmeyen bir hata oluştu. Lütfen ayarları ve günlüğü denetleyin.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Arama filtresi, eşleşmeyen parantez sayısı sebebiyle oluşabilen sözdizimi sorunlarından dolayı geçersiz. Lütfen gözden geçirin.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD için bir bağlantı hatası oluştu, lütfen istemci, port ve kimlik bilgilerini kontrol edin.",
@@ -160,7 +159,6 @@ OC.L10N.register(
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Kullanıcı adları, (üst) veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak tanımlamak ve algılamak için, her LDAP kullanıcısı bir dahili kullanıcı adına sahip olacak. Bu kullanıcı adı ile LDAP kullanıcısı arasında bir eşleşme gerektirir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID'si ile eşleştirilir. Ek olarak LDAP etkileşimini azaltmak için DN de önbelleğe alınır ancak bu kimlik tanıma için kullanılmaz. Eğer DN değişirse, değişiklikler tespit edilir. Dahili kullanıcı her yerde kullanılır. Eşleştirmeleri temizlemek, her yerde kalıntılar bırakacaktır. Eşleştirmeleri temizlemek yapılandırmaya hassas bir şekilde bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla temizlemeyin, sadece sınama veya deneysel aşamada kullanın.",
"Clear Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirmesini Temizle",
"Clear Groupname-LDAP Group Mapping" : "Grup Adı-LDAP Grubu Eşleştirmesini Temizle",
- "Limit %s access to users meeting these criteria:" : "Aşağıdaki kritere uyan kullanıcıları %s erişimi kısıtla",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Dahili kullanıcı adı varsayılan olarak UUID özelliklerinden oluşturulur. Böylece kullanıcı adının benzersiz olması ve dönüştürülecek karakter içermediğinden emin olunur. Dahili kullanıcı adının kısıtlaması sadece şu karakterleri içerebilmesidir: [ a-zA-Z0-9_.@- ]. Diğer karakterler ASCII karşılıklarına dönüştürülür veya basitçe yok sayılır. Çakışmalarda bir sayı eklenir. Dahili kullanıcı adı bir kullanıcıyı dahili olarak belirlemeye yarar. Aynı zamanda kullanıcı ev dizininin varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin *DAV servislerinin bir parçasıdır. Bu ayarla varsayılan davranışı değiştirebilirsiniz. Varsayılanı kullanmak için boş bırakın. Değişiklik sadece yeni oluşturulacak LDAP kullanıcılarını etkileyecektir."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Ayarlar doğrulandı ancak tek kullanıcı bulundu. Sadece ilk kullanıcı oturum açabilecek. Lütfen daha dar bir filtre seçin."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json
index 7d03acad73d..c08ec466b84 100644
--- a/apps/user_ldap/l10n/tr.json
+++ b/apps/user_ldap/l10n/tr.json
@@ -38,7 +38,6 @@
"Select attributes" : "Nitelikleri seç",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Kullanıcı bulunamadı. Lütfen oturum açtığınız nitelikleri ve kullanıcı adını kontrol edin. Etkili filtre (komut satırı doğrulaması için kopyala-yapıştır için): <br/>",
"User found and settings verified." : "Kullanıcı bulundu ve ayarlar doğrulandı.",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Ayarlar doğrulandı ancak tek kullanıcı bulundu. Sadece ilk kullanıcı oturum açabilecek. Lütfen daha dar bir filtre seçin.",
"An unspecified error occurred. Please check the settings and the log." : "Belirtilmeyen bir hata oluştu. Lütfen ayarları ve günlüğü denetleyin.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Arama filtresi, eşleşmeyen parantez sayısı sebebiyle oluşabilen sözdizimi sorunlarından dolayı geçersiz. Lütfen gözden geçirin.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD için bir bağlantı hatası oluştu, lütfen istemci, port ve kimlik bilgilerini kontrol edin.",
@@ -158,7 +157,6 @@
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Kullanıcı adları, (üst) veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak tanımlamak ve algılamak için, her LDAP kullanıcısı bir dahili kullanıcı adına sahip olacak. Bu kullanıcı adı ile LDAP kullanıcısı arasında bir eşleşme gerektirir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID'si ile eşleştirilir. Ek olarak LDAP etkileşimini azaltmak için DN de önbelleğe alınır ancak bu kimlik tanıma için kullanılmaz. Eğer DN değişirse, değişiklikler tespit edilir. Dahili kullanıcı her yerde kullanılır. Eşleştirmeleri temizlemek, her yerde kalıntılar bırakacaktır. Eşleştirmeleri temizlemek yapılandırmaya hassas bir şekilde bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla temizlemeyin, sadece sınama veya deneysel aşamada kullanın.",
"Clear Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirmesini Temizle",
"Clear Groupname-LDAP Group Mapping" : "Grup Adı-LDAP Grubu Eşleştirmesini Temizle",
- "Limit %s access to users meeting these criteria:" : "Aşağıdaki kritere uyan kullanıcıları %s erişimi kısıtla",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Dahili kullanıcı adı varsayılan olarak UUID özelliklerinden oluşturulur. Böylece kullanıcı adının benzersiz olması ve dönüştürülecek karakter içermediğinden emin olunur. Dahili kullanıcı adının kısıtlaması sadece şu karakterleri içerebilmesidir: [ a-zA-Z0-9_.@- ]. Diğer karakterler ASCII karşılıklarına dönüştürülür veya basitçe yok sayılır. Çakışmalarda bir sayı eklenir. Dahili kullanıcı adı bir kullanıcıyı dahili olarak belirlemeye yarar. Aynı zamanda kullanıcı ev dizininin varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin *DAV servislerinin bir parçasıdır. Bu ayarla varsayılan davranışı değiştirebilirsiniz. Varsayılanı kullanmak için boş bırakın. Değişiklik sadece yeni oluşturulacak LDAP kullanıcılarını etkileyecektir."
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Ayarlar doğrulandı ancak tek kullanıcı bulundu. Sadece ilk kullanıcı oturum açabilecek. Lütfen daha dar bir filtre seçin."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js
index ba43e26abb2..2d57b1545e9 100644
--- a/apps/user_ldap/l10n/zh_CN.js
+++ b/apps/user_ldap/l10n/zh_CN.js
@@ -13,6 +13,7 @@ OC.L10N.register(
" Could not set configuration %s" : " 无法设定配置文件 %s",
"Action does not exist" : "操作不存在",
"The Base DN appears to be wrong" : "Base DN似乎错了",
+ "Testing configuration…" : "测试配置...",
"Configuration incorrect" : "配置错误",
"Configuration incomplete" : "配置未完成",
"Configuration OK" : "配置完成",
@@ -39,13 +40,15 @@ OC.L10N.register(
"Select attributes" : "选择属性",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "找不到用户。请检查您的登录属性和用户名。有效过滤(复制和粘贴命令行验证):",
"User found and settings verified." : "用户已找到,设置已验证。",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "设置已验证,但只有一个用户被找到。只有第一个用户能登录。考虑一个更窄的筛选。",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "已验证设置,但找到了多个用户。 只有第一个用户能登录。 请您考虑使用一个更小的过滤范围。",
"An unspecified error occurred. Please check the settings and the log." : "发生未指定的错误。请检查设置和日志。",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜索的筛选条件无效,可能是由于不完全开闭括号的句法的问题,请检查。",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/ AD连接错误,请检查主机,端口和凭证。",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "该%uid占位符缺失。它将在LDAP/ AD登录名查询时进行替换。",
"Please provide a login name to test against" : "请提供登录名以测试",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "该组框被禁用,因为LDAP/ AD服务器不支持memberOf。",
+ "Password change rejected. Hint: " : "密码更改出错。提示:",
+ "LDAP / AD integration" : "LDAP / AD 整合",
"_%s group found_::_%s groups found_" : ["发现 %s 个群组"],
"_%s user found_::_%s users found_" : ["发现 %s 个用户"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "无法检测到用户的显示名称属性。请在高级LDAP设置中指定。",
@@ -91,6 +94,7 @@ OC.L10N.register(
"Test Base DN" : "测试基础DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "避免自动LDAP请求。用于更精确的设置,但需要一些LDAP知识。",
"Manually enter LDAP filters (recommended for large directories)" : "手动输入LDAP筛选条件(建议用于大型目录)",
+ "%s access is limited to users meeting these criteria:" : "%s 的访问权限限于满足以下条件的用户:",
"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." : "对于用户最常用的对象类为organizationalPerson,person,user和inetOrgPerson。如果你不确定选择哪些对象类,请咨询您的目录管理员。",
"The filter specifies which LDAP users shall have access to the %s instance." : "该筛选条件指定哪些LDAP用户有权访问%s的实例。",
"Verify settings and count users" : "验证设置和统计用户",
@@ -139,6 +143,9 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "当选择后,包含组的组将启用。(只有当组成员属性包含DNs时有效。)",
"Paging chunksize" : "页块大小",
"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.)" : "用于在LDAP搜索返回如用户或组枚举结果时进行分页显示。 (设置它为0时,禁止在这些情况下分页LDAP搜索。)",
+ "Enable LDAP password changes per user" : "每个用户可以更改 LDAP 密码",
+ "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." : "允许LDAP用户更改其密码,并允许超级管理员和组管理员更改LDAP用户的密码。 仅在LDAP服务器上相应配置访问控制策略时有效。 由于密码以纯文本形式发送到LDAP服务器,因此必须使用传输加密,并在LDAP服务器上配置散列密码。",
+ "(New password is sent as plain text to LDAP)" : "(新的密码将以纯文本形式发送到 LDAP)",
"Special Attributes" : "特殊属性",
"Quota Field" : "配额字段",
"Quota Default" : "默认配额",
@@ -147,6 +154,7 @@ OC.L10N.register(
"User Home Folder Naming Rule" : "用户主目录命名规则",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "指定一个 LDAP/AD 属性。留空,则使用用户名称(默认)。",
"Internal Username" : "内部用户名",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "默认情况下将从UUID属性创建内部用户名。将确保用户名是唯一的字符,并且不需要转换。 内部用户名,只允许使用这些字符:[a-zA-Z0-9 _。@ - ]。 其他字符被替换为它们的ASCII对应或简单地被忽略。如果出现重复,将添加或增加一个数字。 内部用户名用于在内部标识用户。 它是用户主文件夹的默认名称。 它也是远程URL的一部分,例如对于所有* DAV 服务。 使用此设置,可以覆盖默认行为。 默认行为为空, 则更改只会对新映射 (已添加) 的LDAP用户有效。",
"Internal Username Attribute:" : "内部用户名属性:",
"Override UUID detection" : "超越UUID检测",
"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." : "ownCloud 默认会自动检测 UUID 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射 (或增加) 的 LDAP 用户和组。",
@@ -155,6 +163,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "用户名-LDAP用户映射",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "用户名用于存储和分配数据 (元)。为了准确地识别和确认用户,每个用户都有一个内部用户名。这需要一个 ownCloud 用户名到 LDAP 用户的映射。创建的用户名被映射到 LDAP 用户的 UUID。此外,DN 也会被缓存,以减少 LDAP 连接,但它不用于识别。DN 的变化会被监视到。内部用户名会被用于所有地方。清除映射将导致一片混乱。清除映射不是常用的设置,它会影响到所有的 LDAP 配置!千万不要在正式环境中清除映射,只有在测试或试验时才这样做。",
"Clear Username-LDAP User Mapping" : "清除用户-LDAP用户映射",
- "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射"
+ "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "设置已验证,但只有一个用户被找到。只有第一个用户能登录。考虑一个更窄的筛选。"
},
"nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json
index 10a1bd8b8ed..c8dbccd08c9 100644
--- a/apps/user_ldap/l10n/zh_CN.json
+++ b/apps/user_ldap/l10n/zh_CN.json
@@ -11,6 +11,7 @@
" Could not set configuration %s" : " 无法设定配置文件 %s",
"Action does not exist" : "操作不存在",
"The Base DN appears to be wrong" : "Base DN似乎错了",
+ "Testing configuration…" : "测试配置...",
"Configuration incorrect" : "配置错误",
"Configuration incomplete" : "配置未完成",
"Configuration OK" : "配置完成",
@@ -37,13 +38,15 @@
"Select attributes" : "选择属性",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "找不到用户。请检查您的登录属性和用户名。有效过滤(复制和粘贴命令行验证):",
"User found and settings verified." : "用户已找到,设置已验证。",
- "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "设置已验证,但只有一个用户被找到。只有第一个用户能登录。考虑一个更窄的筛选。",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "已验证设置,但找到了多个用户。 只有第一个用户能登录。 请您考虑使用一个更小的过滤范围。",
"An unspecified error occurred. Please check the settings and the log." : "发生未指定的错误。请检查设置和日志。",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "搜索的筛选条件无效,可能是由于不完全开闭括号的句法的问题,请检查。",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP/ AD连接错误,请检查主机,端口和凭证。",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "该%uid占位符缺失。它将在LDAP/ AD登录名查询时进行替换。",
"Please provide a login name to test against" : "请提供登录名以测试",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "该组框被禁用,因为LDAP/ AD服务器不支持memberOf。",
+ "Password change rejected. Hint: " : "密码更改出错。提示:",
+ "LDAP / AD integration" : "LDAP / AD 整合",
"_%s group found_::_%s groups found_" : ["发现 %s 个群组"],
"_%s user found_::_%s users found_" : ["发现 %s 个用户"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "无法检测到用户的显示名称属性。请在高级LDAP设置中指定。",
@@ -89,6 +92,7 @@
"Test Base DN" : "测试基础DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "避免自动LDAP请求。用于更精确的设置,但需要一些LDAP知识。",
"Manually enter LDAP filters (recommended for large directories)" : "手动输入LDAP筛选条件(建议用于大型目录)",
+ "%s access is limited to users meeting these criteria:" : "%s 的访问权限限于满足以下条件的用户:",
"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." : "对于用户最常用的对象类为organizationalPerson,person,user和inetOrgPerson。如果你不确定选择哪些对象类,请咨询您的目录管理员。",
"The filter specifies which LDAP users shall have access to the %s instance." : "该筛选条件指定哪些LDAP用户有权访问%s的实例。",
"Verify settings and count users" : "验证设置和统计用户",
@@ -137,6 +141,9 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "当选择后,包含组的组将启用。(只有当组成员属性包含DNs时有效。)",
"Paging chunksize" : "页块大小",
"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.)" : "用于在LDAP搜索返回如用户或组枚举结果时进行分页显示。 (设置它为0时,禁止在这些情况下分页LDAP搜索。)",
+ "Enable LDAP password changes per user" : "每个用户可以更改 LDAP 密码",
+ "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." : "允许LDAP用户更改其密码,并允许超级管理员和组管理员更改LDAP用户的密码。 仅在LDAP服务器上相应配置访问控制策略时有效。 由于密码以纯文本形式发送到LDAP服务器,因此必须使用传输加密,并在LDAP服务器上配置散列密码。",
+ "(New password is sent as plain text to LDAP)" : "(新的密码将以纯文本形式发送到 LDAP)",
"Special Attributes" : "特殊属性",
"Quota Field" : "配额字段",
"Quota Default" : "默认配额",
@@ -145,6 +152,7 @@
"User Home Folder Naming Rule" : "用户主目录命名规则",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "指定一个 LDAP/AD 属性。留空,则使用用户名称(默认)。",
"Internal Username" : "内部用户名",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "默认情况下将从UUID属性创建内部用户名。将确保用户名是唯一的字符,并且不需要转换。 内部用户名,只允许使用这些字符:[a-zA-Z0-9 _。@ - ]。 其他字符被替换为它们的ASCII对应或简单地被忽略。如果出现重复,将添加或增加一个数字。 内部用户名用于在内部标识用户。 它是用户主文件夹的默认名称。 它也是远程URL的一部分,例如对于所有* DAV 服务。 使用此设置,可以覆盖默认行为。 默认行为为空, 则更改只会对新映射 (已添加) 的LDAP用户有效。",
"Internal Username Attribute:" : "内部用户名属性:",
"Override UUID detection" : "超越UUID检测",
"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." : "ownCloud 默认会自动检测 UUID 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射 (或增加) 的 LDAP 用户和组。",
@@ -153,6 +161,7 @@
"Username-LDAP User Mapping" : "用户名-LDAP用户映射",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "用户名用于存储和分配数据 (元)。为了准确地识别和确认用户,每个用户都有一个内部用户名。这需要一个 ownCloud 用户名到 LDAP 用户的映射。创建的用户名被映射到 LDAP 用户的 UUID。此外,DN 也会被缓存,以减少 LDAP 连接,但它不用于识别。DN 的变化会被监视到。内部用户名会被用于所有地方。清除映射将导致一片混乱。清除映射不是常用的设置,它会影响到所有的 LDAP 配置!千万不要在正式环境中清除映射,只有在测试或试验时才这样做。",
"Clear Username-LDAP User Mapping" : "清除用户-LDAP用户映射",
- "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射"
+ "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射",
+ "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "设置已验证,但只有一个用户被找到。只有第一个用户能登录。考虑一个更窄的筛选。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index d88378c1888..9f6639c0db0 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -182,46 +182,146 @@ class Access extends LDAPUtility implements IUserTools {
// 0 won't result in replies, small numbers may leave out groups
// (cf. #12306), 500 is default for paging and should work everywhere.
$maxResults = $pagingSize > 20 ? $pagingSize : 500;
- $this->initPagedSearch($filter, array($dn), array($attr), $maxResults, 0);
+ $attr = mb_strtolower($attr, 'UTF-8');
+ // the actual read attribute later may contain parameters on a ranged
+ // request, e.g. member;range=99-199. Depends on server reply.
+ $attrToRead = $attr;
+
+ $values = [];
+ $isRangeRequest = false;
+ do {
+ $result = $this->executeRead($cr, $dn, $attrToRead, $filter, $maxResults);
+ if(is_bool($result)) {
+ // when an exists request was run and it was successful, an empty
+ // array must be returned
+ return $result ? [] : false;
+ }
+
+ if (!$isRangeRequest) {
+ $values = $this->extractAttributeValuesFromResult($result, $attr);
+ if (!empty($values)) {
+ return $values;
+ }
+ }
+
+ $isRangeRequest = false;
+ $result = $this->extractRangeData($result, $attr);
+ if (!empty($result)) {
+ $normalizedResult = $this->extractAttributeValuesFromResult(
+ [ $attr => $result['values'] ],
+ $attr
+ );
+ $values = array_merge($values, $normalizedResult);
+
+ if($result['rangeHigh'] === '*') {
+ // when server replies with * as high range value, there are
+ // no more results left
+ return $values;
+ } else {
+ $low = $result['rangeHigh'] + 1;
+ $attrToRead = $result['attributeName'] . ';range=' . $low . '-*';
+ $isRangeRequest = true;
+ }
+ }
+ } while($isRangeRequest);
+
+ \OCP\Util::writeLog('user_ldap', 'Requested attribute '.$attr.' not found for '.$dn, \OCP\Util::DEBUG);
+ return false;
+ }
+
+ /**
+ * Runs an read operation against LDAP
+ *
+ * @param resource $cr the LDAP connection
+ * @param string $dn
+ * @param string $attribute
+ * @param string $filter
+ * @param int $maxResults
+ * @return array|bool false if there was any error, true if an exists check
+ * was performed and the requested DN found, array with the
+ * returned data on a successful usual operation
+ */
+ public function executeRead($cr, $dn, $attribute, $filter, $maxResults) {
+ $this->initPagedSearch($filter, array($dn), array($attribute), $maxResults, 0);
$dn = $this->helper->DNasBaseParameter($dn);
- $rr = @$this->ldap->read($cr, $dn, $filter, array($attr));
- if(!$this->ldap->isResource($rr)) {
- if ($attr !== '') {
+ $rr = @$this->ldap->read($cr, $dn, $filter, array($attribute));
+ if (!$this->ldap->isResource($rr)) {
+ if ($attribute !== '') {
//do not throw this message on userExists check, irritates
- \OCP\Util::writeLog('user_ldap', 'readAttribute failed for DN '.$dn, \OCP\Util::DEBUG);
+ \OCP\Util::writeLog('user_ldap', 'readAttribute failed for DN ' . $dn, \OCP\Util::DEBUG);
}
//in case an error occurs , e.g. object does not exist
return false;
}
- if ($attr === '' && ($filter === 'objectclass=*' || $this->ldap->countEntries($cr, $rr) === 1)) {
- \OCP\Util::writeLog('user_ldap', 'readAttribute: '.$dn.' found', \OCP\Util::DEBUG);
- return array();
+ if ($attribute === '' && ($filter === 'objectclass=*' || $this->ldap->countEntries($cr, $rr) === 1)) {
+ \OCP\Util::writeLog('user_ldap', 'readAttribute: ' . $dn . ' found', \OCP\Util::DEBUG);
+ return true;
}
$er = $this->ldap->firstEntry($cr, $rr);
- if(!$this->ldap->isResource($er)) {
+ if (!$this->ldap->isResource($er)) {
//did not match the filter, return false
return false;
}
//LDAP attributes are not case sensitive
$result = \OCP\Util::mb_array_change_key_case(
- $this->ldap->getAttributes($cr, $er), MB_CASE_LOWER, 'UTF-8');
- $attr = mb_strtolower($attr, 'UTF-8');
+ $this->ldap->getAttributes($cr, $er), MB_CASE_LOWER, 'UTF-8');
- if(isset($result[$attr]) && $result[$attr]['count'] > 0) {
- $values = array();
- for($i=0;$i<$result[$attr]['count'];$i++) {
- if($this->resemblesDN($attr)) {
- $values[] = $this->helper->sanitizeDN($result[$attr][$i]);
- } elseif(strtolower($attr) === 'objectguid' || strtolower($attr) === 'guid') {
- $values[] = $this->convertObjectGUID2Str($result[$attr][$i]);
+ return $result;
+ }
+
+ /**
+ * Normalizes a result grom getAttributes(), i.e. handles DNs and binary
+ * data if present.
+ *
+ * @param array $result from ILDAPWrapper::getAttributes()
+ * @param string $attribute the attribute name that was read
+ * @return string[]
+ */
+ public function extractAttributeValuesFromResult($result, $attribute) {
+ $values = [];
+ if(isset($result[$attribute]) && $result[$attribute]['count'] > 0) {
+ $lowercaseAttribute = strtolower($attribute);
+ for($i=0;$i<$result[$attribute]['count'];$i++) {
+ if($this->resemblesDN($attribute)) {
+ $values[] = $this->helper->sanitizeDN($result[$attribute][$i]);
+ } elseif($lowercaseAttribute === 'objectguid' || $lowercaseAttribute === 'guid') {
+ $values[] = $this->convertObjectGUID2Str($result[$attribute][$i]);
} else {
- $values[] = $result[$attr][$i];
+ $values[] = $result[$attribute][$i];
}
}
- return $values;
}
- \OCP\Util::writeLog('user_ldap', 'Requested attribute '.$attr.' not found for '.$dn, \OCP\Util::DEBUG);
- return false;
+ return $values;
+ }
+
+ /**
+ * Attempts to find ranged data in a getAttribute results and extracts the
+ * returned values as well as information on the range and full attribute
+ * name for further processing.
+ *
+ * @param array $result from ILDAPWrapper::getAttributes()
+ * @param string $attribute the attribute name that was read. Without ";range=…"
+ * @return array If a range was detected with keys 'values', 'attributeName',
+ * 'attributeFull' and 'rangeHigh', otherwise empty.
+ */
+ public function extractRangeData($result, $attribute) {
+ $keys = array_keys($result);
+ foreach($keys as $key) {
+ if($key !== $attribute && strpos($key, $attribute) === 0) {
+ $queryData = explode(';', $key);
+ if(strpos($queryData[1], 'range=') === 0) {
+ $high = substr($queryData[1], 1 + strpos($queryData[1], '-'));
+ $data = [
+ 'values' => $result[$key],
+ 'attributeName' => $queryData[0],
+ 'attributeFull' => $key,
+ 'rangeHigh' => $high,
+ ];
+ return $data;
+ }
+ }
+ }
+ return [];
}
/**
@@ -578,6 +678,9 @@ class Access extends LDAPUtility implements IUserTools {
*/
public function cacheUserDisplayName($ocName, $displayName, $displayName2 = '') {
$user = $this->userManager->get($ocName);
+ if($user === null) {
+ return;
+ }
$displayName = $user->composeAndStoreDisplayName($displayName, $displayName2);
$cacheKeyTrunk = 'getDisplayName';
$this->connection->writeToCache($cacheKeyTrunk.$ocName, $displayName);
diff --git a/apps/user_ldap/lib/Command/CreateEmptyConfig.php b/apps/user_ldap/lib/Command/CreateEmptyConfig.php
index 28d3a1d8bff..38d3192058c 100644
--- a/apps/user_ldap/lib/Command/CreateEmptyConfig.php
+++ b/apps/user_ldap/lib/Command/CreateEmptyConfig.php
@@ -29,6 +29,7 @@ use OCA\User_LDAP\Configuration;
use OCA\User_LDAP\Helper;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class CreateEmptyConfig extends Command {
@@ -47,29 +48,24 @@ class CreateEmptyConfig extends Command {
$this
->setName('ldap:create-empty-config')
->setDescription('creates an empty LDAP configuration')
+ ->addOption(
+ 'only-print-prefix',
+ 'p',
+ InputOption::VALUE_NONE,
+ 'outputs only the prefix'
+ )
;
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $configPrefix = $this->getNewConfigurationPrefix();
- $output->writeln("Created new configuration with configID '{$configPrefix}'");
-
+ $configPrefix = $this->helper->getNextServerConfigurationPrefix();
$configHolder = new Configuration($configPrefix);
$configHolder->saveConfiguration();
- }
- protected function getNewConfigurationPrefix() {
- $serverConnections = $this->helper->getServerConfigurationPrefixes();
-
- // first connection uses no prefix
- if(sizeof($serverConnections) == 0) {
- return '';
+ $prose = '';
+ if(!$input->getOption('only-print-prefix')) {
+ $prose = 'Created new configuration with configID ';
}
-
- sort($serverConnections);
- $lastKey = array_pop($serverConnections);
- $lastNumber = intval(str_replace('s', '', $lastKey));
- $nextPrefix = 's' . str_pad($lastNumber + 1, 2, '0', STR_PAD_LEFT);
- return $nextPrefix;
+ $output->writeln($prose . "{$configPrefix}");
}
}
diff --git a/apps/user_ldap/lib/Configuration.php b/apps/user_ldap/lib/Configuration.php
index eb4fcd3fbe6..65ee9c70807 100644
--- a/apps/user_ldap/lib/Configuration.php
+++ b/apps/user_ldap/lib/Configuration.php
@@ -393,9 +393,12 @@ class Configuration {
* @return bool
*/
protected function saveValue($varName, $value) {
- return \OCP\Config::setAppValue('user_ldap',
- $this->configPrefix.$varName,
- $value);
+ \OC::$server->getConfig()->setAppValue(
+ 'user_ldap',
+ $this->configPrefix.$varName,
+ $value
+ );
+ return true;
}
/**
diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php
index d74afa42fe8..92b874e7a15 100644
--- a/apps/user_ldap/lib/Connection.php
+++ b/apps/user_ldap/lib/Connection.php
@@ -327,11 +327,6 @@ class Connection extends LDAPUtility {
foreach(array('ldapBaseUsers', 'ldapBaseGroups') as $keyBase) {
$val = $this->configuration->$keyBase;
if(empty($val)) {
- $obj = strpos('Users', $keyBase) !== false ? 'Users' : 'Groups';
- \OCP\Util::writeLog('user_ldap',
- 'Base tree for '.$obj.
- ' is empty, using Base DN',
- \OCP\Util::INFO);
$this->configuration->$keyBase = $this->configuration->ldapBase;
}
}
diff --git a/apps/user_ldap/lib/Controller/ConfigAPIController.php b/apps/user_ldap/lib/Controller/ConfigAPIController.php
new file mode 100644
index 00000000000..7d51b0aafe4
--- /dev/null
+++ b/apps/user_ldap/lib/Controller/ConfigAPIController.php
@@ -0,0 +1,322 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @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\User_LDAP\Controller;
+
+use OC\CapabilitiesManager;
+use OC\Core\Controller\OCSController;
+use OC\Security\Bruteforce\Throttler;
+use OC\Security\IdentityProof\Manager;
+use OCA\User_LDAP\Configuration;
+use OCA\User_LDAP\Helper;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\OCS\OCSBadRequestException;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\AppFramework\OCS\OCSNotFoundException;
+use OCP\ILogger;
+use OCP\IRequest;
+use OCP\IUserManager;
+use OCP\IUserSession;
+
+class ConfigAPIController extends OCSController {
+
+ /** @var Helper */
+ private $ldapHelper;
+
+ /** @var ILogger */
+ private $logger;
+
+ public function __construct(
+ $appName,
+ IRequest $request,
+ CapabilitiesManager $capabilitiesManager,
+ IUserSession $userSession,
+ IUserManager $userManager,
+ Throttler $throttler,
+ Manager $keyManager,
+ Helper $ldapHelper,
+ ILogger $logger
+ ) {
+ parent::__construct(
+ $appName,
+ $request,
+ $capabilitiesManager,
+ $userSession,
+ $userManager,
+ $throttler,
+ $keyManager
+ );
+
+
+ $this->ldapHelper = $ldapHelper;
+ $this->logger = $logger;
+ }
+
+ /**
+ * creates a new (empty) configuration and returns the resulting prefix
+ *
+ * Example: curl -X POST -H "OCS-APIREQUEST: true" -u $admin:$password \
+ * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config
+ *
+ * results in:
+ *
+ * <?xml version="1.0"?>
+ * <ocs>
+ * <meta>
+ * <status>ok</status>
+ * <statuscode>200</statuscode>
+ * <message>OK</message>
+ * </meta>
+ * <data>
+ * <configID>s40</configID>
+ * </data>
+ * </ocs>
+ *
+ * Failing example: if an exception is thrown (e.g. Database connection lost)
+ * the detailed error will be logged. The output will then look like:
+ *
+ * <?xml version="1.0"?>
+ * <ocs>
+ * <meta>
+ * <status>failure</status>
+ * <statuscode>999</statuscode>
+ * <message>An issue occurred when creating the new config.</message>
+ * </meta>
+ * <data/>
+ * </ocs>
+ *
+ * For JSON output provide the format=json parameter
+ *
+ * @return DataResponse
+ * @throws OCSException
+ */
+ public function create() {
+ try {
+ $configPrefix = $this->ldapHelper->getNextServerConfigurationPrefix();
+ $configHolder = new Configuration($configPrefix);
+ $configHolder->saveConfiguration();
+ } catch (\Exception $e) {
+ $this->logger->logException($e);
+ throw new OCSException('An issue occurred when creating the new config.');
+ }
+ return new DataResponse(['configID' => $configPrefix]);
+ }
+
+ /**
+ * Deletes a LDAP configuration, if present.
+ *
+ * Example:
+ * curl -X DELETE -H "OCS-APIREQUEST: true" -u $admin:$password \
+ * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60
+ *
+ * <?xml version="1.0"?>
+ * <ocs>
+ * <meta>
+ * <status>ok</status>
+ * <statuscode>200</statuscode>
+ * <message>OK</message>
+ * </meta>
+ * <data/>
+ * </ocs>
+ *
+ * @param string $configID
+ * @return DataResponse
+ * @throws OCSBadRequestException
+ * @throws OCSException
+ */
+ public function delete($configID) {
+ try {
+ $this->ensureConfigIDExists($configID);
+ if(!$this->ldapHelper->deleteServerConfiguration($configID)) {
+ throw new OCSException('Could not delete configuration');
+ }
+ } catch(OCSException $e) {
+ throw $e;
+ } catch(\Exception $e) {
+ $this->logger->logException($e);
+ throw new OCSException('An issue occurred when deleting the config.');
+ }
+
+ return new DataResponse();
+ }
+
+ /**
+ * modifies a configuration
+ *
+ * Example:
+ * curl -X PUT -d "configData[ldapHost]=ldaps://my.ldap.server&configData[ldapPort]=636" \
+ * -H "OCS-APIREQUEST: true" -u $admin:$password \
+ * https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60
+ *
+ * <?xml version="1.0"?>
+ * <ocs>
+ * <meta>
+ * <status>ok</status>
+ * <statuscode>200</statuscode>
+ * <message>OK</message>
+ * </meta>
+ * <data/>
+ * </ocs>
+ *
+ * @param string $configID
+ * @param array $configData
+ * @return DataResponse
+ * @throws OCSException
+ */
+ public function modify($configID, $configData) {
+ try {
+ $this->ensureConfigIDExists($configID);
+
+ if(!is_array($configData)) {
+ throw new OCSBadRequestException('configData is not properly set');
+ }
+
+ $configuration = new Configuration($configID);
+ $configKeys = $configuration->getConfigTranslationArray();
+
+ foreach ($configKeys as $i => $key) {
+ if(isset($configData[$key])) {
+ $configuration->$key = $configData[$key];
+ }
+ }
+
+ $configuration->saveConfiguration();
+ } catch(OCSException $e) {
+ throw $e;
+ } catch (\Exception $e) {
+ $this->logger->logException($e);
+ throw new OCSException('An issue occurred when modifying the config.');
+ }
+
+ return new DataResponse();
+ }
+
+ /**
+ * retrieves a configuration
+ *
+ * <?xml version="1.0"?>
+ * <ocs>
+ * <meta>
+ * <status>ok</status>
+ * <statuscode>200</statuscode>
+ * <message>OK</message>
+ * </meta>
+ * <data>
+ * <ldapHost>ldaps://my.ldap.server</ldapHost>
+ * <ldapPort>7770</ldapPort>
+ * <ldapBackupHost></ldapBackupHost>
+ * <ldapBackupPort></ldapBackupPort>
+ * <ldapBase>ou=small,dc=my,dc=ldap,dc=server</ldapBase>
+ * <ldapBaseUsers>ou=users,ou=small,dc=my,dc=ldap,dc=server</ldapBaseUsers>
+ * <ldapBaseGroups>ou=small,dc=my,dc=ldap,dc=server</ldapBaseGroups>
+ * <ldapAgentName>cn=root,dc=my,dc=ldap,dc=server</ldapAgentName>
+ * <ldapAgentPassword>clearTextWithShowPassword=1</ldapAgentPassword>
+ * <ldapTLS>1</ldapTLS>
+ * <turnOffCertCheck>0</turnOffCertCheck>
+ * <ldapIgnoreNamingRules/>
+ * <ldapUserDisplayName>displayname</ldapUserDisplayName>
+ * <ldapUserDisplayName2>uid</ldapUserDisplayName2>
+ * <ldapUserFilterObjectclass>inetOrgPerson</ldapUserFilterObjectclass>
+ * <ldapUserFilterGroups></ldapUserFilterGroups>
+ * <ldapUserFilter>(&amp;(objectclass=nextcloudUser)(nextcloudEnabled=TRUE))</ldapUserFilter>
+ * <ldapUserFilterMode>1</ldapUserFilterMode>
+ * <ldapGroupFilter>(&amp;(|(objectclass=nextcloudGroup)))</ldapGroupFilter>
+ * <ldapGroupFilterMode>0</ldapGroupFilterMode>
+ * <ldapGroupFilterObjectclass>nextcloudGroup</ldapGroupFilterObjectclass>
+ * <ldapGroupFilterGroups></ldapGroupFilterGroups>
+ * <ldapGroupDisplayName>cn</ldapGroupDisplayName>
+ * <ldapGroupMemberAssocAttr>memberUid</ldapGroupMemberAssocAttr>
+ * <ldapLoginFilter>(&amp;(|(objectclass=inetOrgPerson))(uid=%uid))</ldapLoginFilter>
+ * <ldapLoginFilterMode>0</ldapLoginFilterMode>
+ * <ldapLoginFilterEmail>0</ldapLoginFilterEmail>
+ * <ldapLoginFilterUsername>1</ldapLoginFilterUsername>
+ * <ldapLoginFilterAttributes></ldapLoginFilterAttributes>
+ * <ldapQuotaAttribute></ldapQuotaAttribute>
+ * <ldapQuotaDefault></ldapQuotaDefault>
+ * <ldapEmailAttribute>mail</ldapEmailAttribute>
+ * <ldapCacheTTL>20</ldapCacheTTL>
+ * <ldapUuidUserAttribute>auto</ldapUuidUserAttribute>
+ * <ldapUuidGroupAttribute>auto</ldapUuidGroupAttribute>
+ * <ldapOverrideMainServer></ldapOverrideMainServer>
+ * <ldapConfigurationActive>1</ldapConfigurationActive>
+ * <ldapAttributesForUserSearch>uid;sn;givenname</ldapAttributesForUserSearch>
+ * <ldapAttributesForGroupSearch></ldapAttributesForGroupSearch>
+ * <ldapExperiencedAdmin>0</ldapExperiencedAdmin>
+ * <homeFolderNamingRule></homeFolderNamingRule>
+ * <hasPagedResultSupport></hasPagedResultSupport>
+ * <hasMemberOfFilterSupport></hasMemberOfFilterSupport>
+ * <useMemberOfToDetectMembership>1</useMemberOfToDetectMembership>
+ * <ldapExpertUsernameAttr>uid</ldapExpertUsernameAttr>
+ * <ldapExpertUUIDUserAttr>uid</ldapExpertUUIDUserAttr>
+ * <ldapExpertUUIDGroupAttr></ldapExpertUUIDGroupAttr>
+ * <lastJpegPhotoLookup>0</lastJpegPhotoLookup>
+ * <ldapNestedGroups>0</ldapNestedGroups>
+ * <ldapPagingSize>500</ldapPagingSize>
+ * <turnOnPasswordChange>1</turnOnPasswordChange>
+ * <ldapDynamicGroupMemberURL></ldapDynamicGroupMemberURL>
+ * </data>
+ * </ocs>
+ *
+ * @param string $configID
+ * @param bool|string $showPassword
+ * @return DataResponse
+ * @throws OCSException
+ */
+ public function show($configID, $showPassword = false) {
+ try {
+ $this->ensureConfigIDExists($configID);
+
+ $config = new Configuration($configID);
+ $data = $config->getConfiguration();
+ if(!boolval(intval($showPassword))) {
+ $data['ldapAgentPassword'] = '***';
+ }
+ foreach ($data as $key => $value) {
+ if(is_array($value)) {
+ $value = implode(';', $value);
+ $data[$key] = $value;
+ }
+ }
+ } catch(OCSException $e) {
+ throw $e;
+ } catch (\Exception $e) {
+ $this->logger->logException($e);
+ throw new OCSException('An issue occurred when modifying the config.');
+ }
+
+ return new DataResponse($data);
+ }
+
+ /**
+ * if the given config ID is not available, an exception is thrown
+ *
+ * @param string $configID
+ * @throws OCSNotFoundException
+ */
+ private function ensureConfigIDExists($configID) {
+ $prefixes = $this->ldapHelper->getServerConfigurationPrefixes();
+ if(!in_array($configID, $prefixes, true)) {
+ throw new OCSNotFoundException('Config ID not found');
+ }
+ }
+}
diff --git a/apps/user_ldap/lib/Helper.php b/apps/user_ldap/lib/Helper.php
index b48b4001f9d..f1186ffa310 100644
--- a/apps/user_ldap/lib/Helper.php
+++ b/apps/user_ldap/lib/Helper.php
@@ -105,6 +105,25 @@ class Helper {
return $result;
}
+ /**
+ * return the next available configuration prefix
+ *
+ * @return string
+ */
+ public function getNextServerConfigurationPrefix() {
+ $serverConnections = $this->getServerConfigurationPrefixes();
+
+ if(count($serverConnections) === 0) {
+ return 's01';
+ }
+
+ sort($serverConnections);
+ $lastKey = array_pop($serverConnections);
+ $lastNumber = intval(str_replace('s', '', $lastKey));
+ $nextPrefix = 's' . str_pad($lastNumber + 1, 2, '0', STR_PAD_LEFT);
+ return $nextPrefix;
+ }
+
private function getServersConfig($value) {
$regex = '/' . $value . '$/S';
diff --git a/apps/user_ldap/lib/Mapping/AbstractMapping.php b/apps/user_ldap/lib/Mapping/AbstractMapping.php
index 8e7f1f8b137..6fb4a5436c3 100644
--- a/apps/user_ldap/lib/Mapping/AbstractMapping.php
+++ b/apps/user_ldap/lib/Mapping/AbstractMapping.php
@@ -209,6 +209,17 @@ abstract class AbstractMapping {
* @return bool
*/
public function map($fdn, $name, $uuid) {
+ if(mb_strlen($fdn) > 255) {
+ \OC::$server->getLogger()->error(
+ 'Cannot map, because the DN exceeds 255 characters: {dn}',
+ [
+ 'app' => 'user_ldap',
+ 'dn' => $fdn,
+ ]
+ );
+ return false;
+ }
+
$row = array(
'ldap_dn' => $fdn,
'owncloud_name' => $name,
diff --git a/apps/user_ldap/lib/Settings/Section.php b/apps/user_ldap/lib/Settings/Section.php
index 82d8d0c84fa..86d293d3879 100644
--- a/apps/user_ldap/lib/Settings/Section.php
+++ b/apps/user_ldap/lib/Settings/Section.php
@@ -24,13 +24,21 @@
namespace OCA\User_LDAP\Settings;
use OCP\IL10N;
-use OCP\Settings\ISection;
+use OCP\IURLGenerator;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $url;
- public function __construct(IL10N $l) {
+ /**
+ * @param IURLGenerator $url
+ * @param IL10N $l
+ */
+ public function __construct(IURLGenerator $url, IL10N $l) {
+ $this->url = $url;
$this->l = $l;
}
@@ -64,4 +72,11 @@ class Section implements ISection {
public function getPriority() {
return 25;
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return $this->url->imagePath('user_ldap', 'app-dark.svg');
+ }
}
diff --git a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php b/apps/user_ldap/tests/Mapping/AbstractMappingTest.php
index 91013085c2c..5c3474d9ad2 100644
--- a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php
+++ b/apps/user_ldap/tests/Mapping/AbstractMappingTest.php
@@ -106,7 +106,8 @@ abstract class AbstractMappingTest extends \Test\TestCase {
list($mapper, $data) = $this->initTest();
// test that mapping will not happen when it shall not
- $paramKeys = array('', 'dn', 'name', 'uuid');
+ $tooLongDN = 'uid=joann,ou=Secret Small Specialized Department,ou=Some Tremendously Important Department,ou=Another Very Important Department,ou=Pretty Meaningful Derpartment,ou=Quite Broad And General Department,ou=The Topmost Department,dc=hugelysuccessfulcompany,dc=com';
+ $paramKeys = array('', 'dn', 'name', 'uuid', $tooLongDN);
foreach($paramKeys as $key) {
$failEntry = $data[0];
if(!empty($key)) {
diff --git a/apps/user_ldap/tests/Settings/SectionTest.php b/apps/user_ldap/tests/Settings/SectionTest.php
index 2d2165b8e56..5f565e89933 100644
--- a/apps/user_ldap/tests/Settings/SectionTest.php
+++ b/apps/user_ldap/tests/Settings/SectionTest.php
@@ -25,19 +25,24 @@ namespace OCA\User_LDAP\Tests\Settings;
use OCA\User_LDAP\Settings\Section;
use OCP\IL10N;
+use OCP\IURLGenerator;
use Test\TestCase;
class SectionTest extends TestCase {
- /** @var IL10N */
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ private $url;
+ /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
private $l;
/** @var Section */
private $section;
public function setUp() {
parent::setUp();
- $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock();
+ $this->url = $this->createMock(IURLGenerator::class);
+ $this->l = $this->createMock(IL10N::class);
$this->section = new Section(
+ $this->url,
$this->l
);
}
@@ -59,4 +64,13 @@ class SectionTest extends TestCase {
public function testGetPriority() {
$this->assertSame(25, $this->section->getPriority());
}
+
+ public function testGetIcon() {
+ $this->url->expects($this->once())
+ ->method('imagePath')
+ ->with('user_ldap', 'app-dark.svg')
+ ->willReturn('icon');
+
+ $this->assertSame('icon', $this->section->getIcon());
+ }
}
diff --git a/apps/workflowengine/appinfo/info.xml b/apps/workflowengine/appinfo/info.xml
index 83f4be9e398..b037174d348 100644
--- a/apps/workflowengine/appinfo/info.xml
+++ b/apps/workflowengine/appinfo/info.xml
@@ -5,7 +5,7 @@
<description></description>
<licence>AGPL</licence>
<author>Morris Jobke</author>
- <version>1.1.1</version>
+ <version>1.2.0</version>
<namespace>WorkflowEngine</namespace>
<category>other</category>
@@ -18,7 +18,7 @@
</types>
<dependencies>
- <nextcloud min-version="11" max-version="11" />
+ <nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
diff --git a/apps/workflowengine/l10n/bg_BG.js b/apps/workflowengine/l10n/bg_BG.js
index d0392051f60..ec24d4f01ae 100644
--- a/apps/workflowengine/l10n/bg_BG.js
+++ b/apps/workflowengine/l10n/bg_BG.js
@@ -13,7 +13,6 @@ OC.L10N.register(
"less" : "по-малко",
"less or equals" : "по-малко или равно",
"greater or equals" : "по-голямо или равно",
- "greater" : "равно",
"File system tag" : "Таг на файлова система",
"is tagged with" : "е тагнат с",
"is not tagged with" : "не е тагнат с",
diff --git a/apps/workflowengine/l10n/bg_BG.json b/apps/workflowengine/l10n/bg_BG.json
index e4c15879e0f..492410c9bf4 100644
--- a/apps/workflowengine/l10n/bg_BG.json
+++ b/apps/workflowengine/l10n/bg_BG.json
@@ -11,7 +11,6 @@
"less" : "по-малко",
"less or equals" : "по-малко или равно",
"greater or equals" : "по-голямо или равно",
- "greater" : "равно",
"File system tag" : "Таг на файлова система",
"is tagged with" : "е тагнат с",
"is not tagged with" : "не е тагнат с",
diff --git a/apps/workflowengine/l10n/lv.js b/apps/workflowengine/l10n/lv.js
new file mode 100644
index 00000000000..8052946bd02
--- /dev/null
+++ b/apps/workflowengine/l10n/lv.js
@@ -0,0 +1,71 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Successfully saved" : "Veiksmīgi saglabāts",
+ "Saving failed:" : "Saglabāšana neizdevās:",
+ "File mime type" : "Faila MIME tips",
+ "is" : "ir",
+ "is not" : "nav",
+ "matches" : "atbilst",
+ "does not match" : "neatbilst",
+ "Example: {placeholder}" : "Piemērs: {placeholder}",
+ "File size (upload)" : "Faila lielums (augšupielādēt)",
+ "less" : "mazāk",
+ "less or equals" : "mazāks vai vienāds ar",
+ "greater or equals" : "lielāks vai vienāds ar",
+ "greater" : "lielāks",
+ "File system tag" : "Failu sistēmas atzīme",
+ "is tagged with" : "atzīmēts ar",
+ "is not tagged with" : "nav atzīmēts ar",
+ "Select tag…" : "Izvēlies atzīmi...",
+ "Request remote address" : "Pieprasīt attālo adresi",
+ "matches IPv4" : "atbilst IPv4",
+ "does not match IPv4" : "neatbilst IPv4",
+ "matches IPv6" : "atbilst IPv6",
+ "does not match IPv6" : "neatbilst IPv6",
+ "Request time" : "Pieprasījuma laiks",
+ "between" : "starp",
+ "not between" : "nav starp",
+ "Start" : "Sākums",
+ "End" : "Beigas",
+ "Select timezone…" : "Izvēlieties laika joslu...",
+ "Request URL" : "Pieprasījuma URL",
+ "Predefined URLs" : "Standarta URLs",
+ "Files WebDAV" : "WebDAV faili",
+ "Request user agent" : "Nepieciešams lietotāja aģents",
+ "Sync clients" : "Sync klients",
+ "Android client" : "Android klients",
+ "iOS client" : "iOS klients",
+ "Desktop client" : "Darbvirsmas klients",
+ "User group membership" : "Lietotāju grupas piederība",
+ "is member of" : "ir biedrs",
+ "is not member of" : "nav biedrs",
+ "The given operator is invalid" : "Norādītais operators ir nederīgs",
+ "The given regular expression is invalid" : "Norādītā regulārā izteiksme nav derīga.",
+ "The given file size is invalid" : "Norādītais faila formāts nav derīgs",
+ "The given tag id is invalid" : "Norādītais birkas id ir nederīgs",
+ "The given IP range is invalid" : "Norādītais IP diapazons ir nederīgs",
+ "The given IP range is not valid for IPv4" : "Norādītais IP diapazons nav derīgs IPv4",
+ "The given IP range is not valid for IPv6" : "Norādītais IP diapazons nav derīgs IPv6",
+ "The given time span is invalid" : "Norādītais laiks nav derīgs.",
+ "The given start time is invalid" : "Dotais sākuma laiks ir nederīgs",
+ "The given end time is invalid" : "Norādītais beigu laiks nav derīgs.",
+ "The given group does not exist" : "Norādītā grupa nepastāv.",
+ "Check %s is invalid or does not exist" : "Pārbaude %s ir nederīga vai nepastāv",
+ "Operation #%s does not exist" : "Operation #%s does not exist",
+ "Operation %s does not exist" : "Darbība %s neeksistē",
+ "Operation %s is invalid" : "Darbība %s ir nederīga",
+ "Check %s does not exist" : "Pārbaude %s nepastāv",
+ "Check %s is invalid" : "Pārbaude %s ir nederīga",
+ "Check #%s does not exist" : "Pārbaude #%s nepastāv",
+ "Workflow" : "Darbplūsma",
+ "Open documentation" : "Atvērt dokumentāciju",
+ "Add rule group" : "Pievienot kārtulu grupas",
+ "Short rule description" : "Īss kārtulas apraksts",
+ "Add rule" : "Pievienot kārtulu",
+ "Reset" : "Atiestatīt",
+ "Save" : "Saglabāt",
+ "Saving…" : "Saglabā...",
+ "Loading…" : "Ielādē …"
+},
+"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/workflowengine/l10n/lv.json b/apps/workflowengine/l10n/lv.json
new file mode 100644
index 00000000000..f780581deb3
--- /dev/null
+++ b/apps/workflowengine/l10n/lv.json
@@ -0,0 +1,69 @@
+{ "translations": {
+ "Successfully saved" : "Veiksmīgi saglabāts",
+ "Saving failed:" : "Saglabāšana neizdevās:",
+ "File mime type" : "Faila MIME tips",
+ "is" : "ir",
+ "is not" : "nav",
+ "matches" : "atbilst",
+ "does not match" : "neatbilst",
+ "Example: {placeholder}" : "Piemērs: {placeholder}",
+ "File size (upload)" : "Faila lielums (augšupielādēt)",
+ "less" : "mazāk",
+ "less or equals" : "mazāks vai vienāds ar",
+ "greater or equals" : "lielāks vai vienāds ar",
+ "greater" : "lielāks",
+ "File system tag" : "Failu sistēmas atzīme",
+ "is tagged with" : "atzīmēts ar",
+ "is not tagged with" : "nav atzīmēts ar",
+ "Select tag…" : "Izvēlies atzīmi...",
+ "Request remote address" : "Pieprasīt attālo adresi",
+ "matches IPv4" : "atbilst IPv4",
+ "does not match IPv4" : "neatbilst IPv4",
+ "matches IPv6" : "atbilst IPv6",
+ "does not match IPv6" : "neatbilst IPv6",
+ "Request time" : "Pieprasījuma laiks",
+ "between" : "starp",
+ "not between" : "nav starp",
+ "Start" : "Sākums",
+ "End" : "Beigas",
+ "Select timezone…" : "Izvēlieties laika joslu...",
+ "Request URL" : "Pieprasījuma URL",
+ "Predefined URLs" : "Standarta URLs",
+ "Files WebDAV" : "WebDAV faili",
+ "Request user agent" : "Nepieciešams lietotāja aģents",
+ "Sync clients" : "Sync klients",
+ "Android client" : "Android klients",
+ "iOS client" : "iOS klients",
+ "Desktop client" : "Darbvirsmas klients",
+ "User group membership" : "Lietotāju grupas piederība",
+ "is member of" : "ir biedrs",
+ "is not member of" : "nav biedrs",
+ "The given operator is invalid" : "Norādītais operators ir nederīgs",
+ "The given regular expression is invalid" : "Norādītā regulārā izteiksme nav derīga.",
+ "The given file size is invalid" : "Norādītais faila formāts nav derīgs",
+ "The given tag id is invalid" : "Norādītais birkas id ir nederīgs",
+ "The given IP range is invalid" : "Norādītais IP diapazons ir nederīgs",
+ "The given IP range is not valid for IPv4" : "Norādītais IP diapazons nav derīgs IPv4",
+ "The given IP range is not valid for IPv6" : "Norādītais IP diapazons nav derīgs IPv6",
+ "The given time span is invalid" : "Norādītais laiks nav derīgs.",
+ "The given start time is invalid" : "Dotais sākuma laiks ir nederīgs",
+ "The given end time is invalid" : "Norādītais beigu laiks nav derīgs.",
+ "The given group does not exist" : "Norādītā grupa nepastāv.",
+ "Check %s is invalid or does not exist" : "Pārbaude %s ir nederīga vai nepastāv",
+ "Operation #%s does not exist" : "Operation #%s does not exist",
+ "Operation %s does not exist" : "Darbība %s neeksistē",
+ "Operation %s is invalid" : "Darbība %s ir nederīga",
+ "Check %s does not exist" : "Pārbaude %s nepastāv",
+ "Check %s is invalid" : "Pārbaude %s ir nederīga",
+ "Check #%s does not exist" : "Pārbaude #%s nepastāv",
+ "Workflow" : "Darbplūsma",
+ "Open documentation" : "Atvērt dokumentāciju",
+ "Add rule group" : "Pievienot kārtulu grupas",
+ "Short rule description" : "Īss kārtulas apraksts",
+ "Add rule" : "Pievienot kārtulu",
+ "Reset" : "Atiestatīt",
+ "Save" : "Saglabāt",
+ "Saving…" : "Saglabā...",
+ "Loading…" : "Ielādē …"
+},"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/workflowengine/l10n/pl.js b/apps/workflowengine/l10n/pl.js
index 12920d85206..84e63e01890 100644
--- a/apps/workflowengine/l10n/pl.js
+++ b/apps/workflowengine/l10n/pl.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Successfully saved" : "Zapisywanie powiodło się",
"Saving failed:" : "Zapisywanie nie powiodło się:",
+ "File mime type" : "Typ MIME pliku",
"is" : "jest",
"is not" : "nie jest",
"matches" : "pasuje",
@@ -31,13 +32,16 @@ OC.L10N.register(
"Request URL" : "Żądanie URL",
"Predefined URLs" : "Przedefiniowanie URLs",
"Files WebDAV" : "Pliki WebDAV",
+ "Request user agent" : "Żądanie agenta użytkownika",
"Sync clients" : "Klienci synchronizacji",
"Android client" : "Klient Android",
"iOS client" : "Klient iOS",
"Desktop client" : "Klient na komputer",
+ "User group membership" : "Członkostwo grupy użytkownika",
"is member of" : "Jest członkiem z",
"is not member of" : "Nie jest członkiem z",
"The given operator is invalid" : "Dana operacja jest nieprawidłowa",
+ "The given regular expression is invalid" : "Podane wyrażenie regularne jest błędne",
"The given file size is invalid" : "Podany rozmiar pliku jest nieprawidłowy",
"The given tag id is invalid" : "Podane id etykiety jest nieprawidłowe",
"The given IP range is invalid" : "Podany zakres adresów IP jest nieprawidłowy",
diff --git a/apps/workflowengine/l10n/pl.json b/apps/workflowengine/l10n/pl.json
index c2f3a149b6a..31bcd2aca3e 100644
--- a/apps/workflowengine/l10n/pl.json
+++ b/apps/workflowengine/l10n/pl.json
@@ -1,6 +1,7 @@
{ "translations": {
"Successfully saved" : "Zapisywanie powiodło się",
"Saving failed:" : "Zapisywanie nie powiodło się:",
+ "File mime type" : "Typ MIME pliku",
"is" : "jest",
"is not" : "nie jest",
"matches" : "pasuje",
@@ -29,13 +30,16 @@
"Request URL" : "Żądanie URL",
"Predefined URLs" : "Przedefiniowanie URLs",
"Files WebDAV" : "Pliki WebDAV",
+ "Request user agent" : "Żądanie agenta użytkownika",
"Sync clients" : "Klienci synchronizacji",
"Android client" : "Klient Android",
"iOS client" : "Klient iOS",
"Desktop client" : "Klient na komputer",
+ "User group membership" : "Członkostwo grupy użytkownika",
"is member of" : "Jest członkiem z",
"is not member of" : "Nie jest członkiem z",
"The given operator is invalid" : "Dana operacja jest nieprawidłowa",
+ "The given regular expression is invalid" : "Podane wyrażenie regularne jest błędne",
"The given file size is invalid" : "Podany rozmiar pliku jest nieprawidłowy",
"The given tag id is invalid" : "Podane id etykiety jest nieprawidłowe",
"The given IP range is invalid" : "Podany zakres adresów IP jest nieprawidłowy",
diff --git a/apps/workflowengine/l10n/ru.js b/apps/workflowengine/l10n/ru.js
index 318981ae5f3..02e5be6522e 100644
--- a/apps/workflowengine/l10n/ru.js
+++ b/apps/workflowengine/l10n/ru.js
@@ -14,6 +14,9 @@ OC.L10N.register(
"less or equals" : "меньше либо равно",
"greater or equals" : "больше либо равно",
"greater" : "больше",
+ "File system tag" : "Системная метка файла",
+ "is tagged with" : "помечен",
+ "is not tagged with" : "не помечен",
"Select tag…" : "Выбрать метку...",
"Request remote address" : "Запрос удаленного адреса",
"matches IPv4" : "соответствует IPv4",
@@ -29,6 +32,7 @@ OC.L10N.register(
"Request URL" : "URL запроса",
"Predefined URLs" : "Предопределенные URL",
"Files WebDAV" : "Файлы WebDAV",
+ "Request user agent" : "Запрос user agent",
"Sync clients" : "Клиенты синхронизации",
"Android client" : "Андроид клиент",
"iOS client" : "iOS клиент",
@@ -47,8 +51,13 @@ OC.L10N.register(
"The given start time is invalid" : "Указано не верное начальное время",
"The given end time is invalid" : "Указано не верное конечное время",
"The given group does not exist" : "Указанная группа не существует",
+ "Check %s is invalid or does not exist" : "Проверка %s неверна или не существует",
"Operation #%s does not exist" : "Оператор #%s не существует",
"Operation %s does not exist" : "Оператор %s не существует",
+ "Operation %s is invalid" : "Операция %s неверна",
+ "Check %s does not exist" : "Проверка %s не существует",
+ "Check %s is invalid" : "Проверка %s неверна",
+ "Check #%s does not exist" : "Проверка #%s не существует",
"Workflow" : "Рабочий процесс",
"Open documentation" : "Открыть документацию",
"Add rule group" : "Добавить группу правил",
diff --git a/apps/workflowengine/l10n/ru.json b/apps/workflowengine/l10n/ru.json
index d6d9ea62a06..d924dce8ccd 100644
--- a/apps/workflowengine/l10n/ru.json
+++ b/apps/workflowengine/l10n/ru.json
@@ -12,6 +12,9 @@
"less or equals" : "меньше либо равно",
"greater or equals" : "больше либо равно",
"greater" : "больше",
+ "File system tag" : "Системная метка файла",
+ "is tagged with" : "помечен",
+ "is not tagged with" : "не помечен",
"Select tag…" : "Выбрать метку...",
"Request remote address" : "Запрос удаленного адреса",
"matches IPv4" : "соответствует IPv4",
@@ -27,6 +30,7 @@
"Request URL" : "URL запроса",
"Predefined URLs" : "Предопределенные URL",
"Files WebDAV" : "Файлы WebDAV",
+ "Request user agent" : "Запрос user agent",
"Sync clients" : "Клиенты синхронизации",
"Android client" : "Андроид клиент",
"iOS client" : "iOS клиент",
@@ -45,8 +49,13 @@
"The given start time is invalid" : "Указано не верное начальное время",
"The given end time is invalid" : "Указано не верное конечное время",
"The given group does not exist" : "Указанная группа не существует",
+ "Check %s is invalid or does not exist" : "Проверка %s неверна или не существует",
"Operation #%s does not exist" : "Оператор #%s не существует",
"Operation %s does not exist" : "Оператор %s не существует",
+ "Operation %s is invalid" : "Операция %s неверна",
+ "Check %s does not exist" : "Проверка %s не существует",
+ "Check %s is invalid" : "Проверка %s неверна",
+ "Check #%s does not exist" : "Проверка #%s не существует",
"Workflow" : "Рабочий процесс",
"Open documentation" : "Открыть документацию",
"Add rule group" : "Добавить группу правил",
diff --git a/apps/workflowengine/l10n/sk_SK.js b/apps/workflowengine/l10n/sk_SK.js
new file mode 100644
index 00000000000..b524bd9d956
--- /dev/null
+++ b/apps/workflowengine/l10n/sk_SK.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Successfully saved" : "Úspešne uložené",
+ "Saving failed:" : "Ukladanie neúspešné:",
+ "File mime type" : "Mime typ súboru",
+ "is" : "je",
+ "is not" : "nie je",
+ "matches" : "súhlasí",
+ "does not match" : "nesúhlasí",
+ "File size (upload)" : "Veľkosť súboru (upload)",
+ "less" : "menej",
+ "less or equals" : "menej alebo rovné",
+ "greater or equals" : "viac alebo rovné",
+ "greater" : "viac",
+ "File system tag" : "Štítok súborového systému",
+ "is tagged with" : "je označený",
+ "is not tagged with" : "nie je označený",
+ "Select tag…" : "Vyber štítok...",
+ "Request remote address" : "Vyžiadať vzdialenú adresu",
+ "matches IPv4" : "súhlasí s IPv4",
+ "does not match IPv4" : "nesúhlasí s IPv4",
+ "matches IPv6" : "súhlasí s IPv6",
+ "does not match IPv6" : "nesúhlasí s IPv6",
+ "between" : "medzi",
+ "not between" : "nie je medzi",
+ "Start" : "Začiatok",
+ "End" : "Koniec",
+ "Request URL" : "Vyžiadať URL",
+ "Files WebDAV" : "WebDAV súbory",
+ "Sync clients" : "Synchronizovať klientov",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Desktopový klient",
+ "is member of" : "Je členom",
+ "is not member of" : "Nie je členom",
+ "The given file size is invalid" : "Zadaná veľkosť súboru je neplatná",
+ "The given tag id is invalid" : "Zadaný identifikátor štítku je neplatný",
+ "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
+ "The given IP range is not valid for IPv4" : "Zadaný IP rozsah nie je platný pre IPv4",
+ "The given IP range is not valid for IPv6" : "Zadaný IP rozsah nie je platný pre IPv6",
+ "The given time span is invalid" : "Zadané časové rozpätie nie je platné",
+ "The given start time is invalid" : "Zadaný čas začatia nie je platný",
+ "The given end time is invalid" : "Zadaný čas ukončenia nie je platný",
+ "The given group does not exist" : "Zadaná skupina neexistuje",
+ "Operation #%s does not exist" : "Operácia #%s neexistuje",
+ "Operation %s does not exist" : "Operácia %s neexistuje",
+ "Operation %s is invalid" : "Operácia #%s nie je platná",
+ "Open documentation" : "Otvoriť dokumentáciu",
+ "Add rule group" : "Pridať skupinu pravidiel",
+ "Short rule description" : "Zobraziť popis pravidla",
+ "Add rule" : "Pridať pravidlo",
+ "Reset" : "Vynulovať",
+ "Save" : "Uložiť",
+ "Saving…" : "Ukladá sa...",
+ "Loading…" : "Načítava sa..."
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/sk_SK.json b/apps/workflowengine/l10n/sk_SK.json
new file mode 100644
index 00000000000..4cad6608288
--- /dev/null
+++ b/apps/workflowengine/l10n/sk_SK.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Successfully saved" : "Úspešne uložené",
+ "Saving failed:" : "Ukladanie neúspešné:",
+ "File mime type" : "Mime typ súboru",
+ "is" : "je",
+ "is not" : "nie je",
+ "matches" : "súhlasí",
+ "does not match" : "nesúhlasí",
+ "File size (upload)" : "Veľkosť súboru (upload)",
+ "less" : "menej",
+ "less or equals" : "menej alebo rovné",
+ "greater or equals" : "viac alebo rovné",
+ "greater" : "viac",
+ "File system tag" : "Štítok súborového systému",
+ "is tagged with" : "je označený",
+ "is not tagged with" : "nie je označený",
+ "Select tag…" : "Vyber štítok...",
+ "Request remote address" : "Vyžiadať vzdialenú adresu",
+ "matches IPv4" : "súhlasí s IPv4",
+ "does not match IPv4" : "nesúhlasí s IPv4",
+ "matches IPv6" : "súhlasí s IPv6",
+ "does not match IPv6" : "nesúhlasí s IPv6",
+ "between" : "medzi",
+ "not between" : "nie je medzi",
+ "Start" : "Začiatok",
+ "End" : "Koniec",
+ "Request URL" : "Vyžiadať URL",
+ "Files WebDAV" : "WebDAV súbory",
+ "Sync clients" : "Synchronizovať klientov",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Desktopový klient",
+ "is member of" : "Je členom",
+ "is not member of" : "Nie je členom",
+ "The given file size is invalid" : "Zadaná veľkosť súboru je neplatná",
+ "The given tag id is invalid" : "Zadaný identifikátor štítku je neplatný",
+ "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
+ "The given IP range is not valid for IPv4" : "Zadaný IP rozsah nie je platný pre IPv4",
+ "The given IP range is not valid for IPv6" : "Zadaný IP rozsah nie je platný pre IPv6",
+ "The given time span is invalid" : "Zadané časové rozpätie nie je platné",
+ "The given start time is invalid" : "Zadaný čas začatia nie je platný",
+ "The given end time is invalid" : "Zadaný čas ukončenia nie je platný",
+ "The given group does not exist" : "Zadaná skupina neexistuje",
+ "Operation #%s does not exist" : "Operácia #%s neexistuje",
+ "Operation %s does not exist" : "Operácia %s neexistuje",
+ "Operation %s is invalid" : "Operácia #%s nie je platná",
+ "Open documentation" : "Otvoriť dokumentáciu",
+ "Add rule group" : "Pridať skupinu pravidiel",
+ "Short rule description" : "Zobraziť popis pravidla",
+ "Add rule" : "Pridať pravidlo",
+ "Reset" : "Vynulovať",
+ "Save" : "Uložiť",
+ "Saving…" : "Ukladá sa...",
+ "Loading…" : "Načítava sa..."
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sq.js b/apps/workflowengine/l10n/sq.js
new file mode 100644
index 00000000000..83960883307
--- /dev/null
+++ b/apps/workflowengine/l10n/sq.js
@@ -0,0 +1,71 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Successfully saved" : "U ruajt me sukses",
+ "Saving failed:" : "Ruajtja dështoi:",
+ "File mime type" : "Tipi mime i skedarëve",
+ "is" : "është",
+ "is not" : "nuk është",
+ "matches" : "përputhje",
+ "does not match" : "nuk përputhet",
+ "Example: {placeholder}" : "Për shembull: {placeholder}",
+ "File size (upload)" : "Madhësia e skedarit (ngarko)",
+ "less" : "më pak",
+ "less or equals" : "më pak ose e barabartë",
+ "greater or equals" : "më e madhe ose e barabartë",
+ "greater" : "më e madhe",
+ "File system tag" : "Etiketë e skedarit të sistemit",
+ "is tagged with" : "është e etiketuar me",
+ "is not tagged with" : "nuk është e etiketuar me",
+ "Select tag…" : "Zgjidh etiketën...",
+ "Request remote address" : "Adresa e kërkesës remote",
+ "matches IPv4" : "përputhet me IPv4",
+ "does not match IPv4" : "nuk përputhet me IPv4",
+ "matches IPv6" : "përputhet me IPv6",
+ "does not match IPv6" : "nuk përputhet me IPv6",
+ "Request time" : "Koha e kërkesës",
+ "between" : "midis",
+ "not between" : "nuk është midis",
+ "Start" : "Fillim",
+ "End" : "Mbarim",
+ "Select timezone…" : "Zgjidh brezin kohorë",
+ "Request URL" : "Kërko URL",
+ "Predefined URLs" : "URL të paracaktuara",
+ "Files WebDAV" : "Skedarët WebDAV ",
+ "Request user agent" : "Kërko agjentin përdorues",
+ "Sync clients" : "Klient të sinkronizuar",
+ "Android client" : "Klient Android",
+ "iOS client" : "Klient IOS",
+ "Desktop client" : "Klient Desktop",
+ "User group membership" : "Anëtarësia në grupet e përdoruesit",
+ "is member of" : "është anëtarë i",
+ "is not member of" : "nuk është anëtarë i",
+ "The given operator is invalid" : "Operatori i dhënë nuk është i vlefshëm",
+ "The given regular expression is invalid" : "Shprehja e rregullt e dhënë është e pavlefshme",
+ "The given file size is invalid" : "Madhësia e dhënë e skedarit është e pavlefshme",
+ "The given tag id is invalid" : "id e dhënë e etiketës është e pavlefshme",
+ "The given IP range is invalid" : "Rangu i dhënë i IP është i pavlefshëm",
+ "The given IP range is not valid for IPv4" : "Rangu i dhënë i IP nuk është i vlefshëm për IPv4",
+ "The given IP range is not valid for IPv6" : "Rangu i dhënë i IP nuk është i vlefshëm për IPv6",
+ "The given time span is invalid" : "Hapsira kohore e dhënë është e pavlefshme",
+ "The given start time is invalid" : "Koha e fillimit e dhënë është e pavlefshme",
+ "The given end time is invalid" : "Koha e mbarimit e dhënë është e pavlefshme",
+ "The given group does not exist" : "Grupi i dhënë nuk ekziston",
+ "Check %s is invalid or does not exist" : "Kontrolli %s është i pavlefshëm ose nuk ekziston",
+ "Operation #%s does not exist" : "Operacioni #%s nuk ekziston",
+ "Operation %s does not exist" : "Operacioni %s nuk ekziston",
+ "Operation %s is invalid" : "Operacioni %s është i pavlefshëm",
+ "Check %s does not exist" : "Kontrolli %s nuk ekziston",
+ "Check %s is invalid" : "Kontrolli %s është i pavlefshëm",
+ "Check #%s does not exist" : "Kontrolli #%s nuk ekziston",
+ "Workflow" : "Rrjedha e punëve",
+ "Open documentation" : "Dokumentacion i hapur",
+ "Add rule group" : "Shto rregull grupi",
+ "Short rule description" : "Përshkrim i shkurtër i rregullit",
+ "Add rule" : "Shto rregull",
+ "Reset" : "Rivendos",
+ "Save" : "Ruaj",
+ "Saving…" : "Duke u ruajtur...",
+ "Loading…" : "Po ngarkohet..."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/sq.json b/apps/workflowengine/l10n/sq.json
new file mode 100644
index 00000000000..d7502ede7f7
--- /dev/null
+++ b/apps/workflowengine/l10n/sq.json
@@ -0,0 +1,69 @@
+{ "translations": {
+ "Successfully saved" : "U ruajt me sukses",
+ "Saving failed:" : "Ruajtja dështoi:",
+ "File mime type" : "Tipi mime i skedarëve",
+ "is" : "është",
+ "is not" : "nuk është",
+ "matches" : "përputhje",
+ "does not match" : "nuk përputhet",
+ "Example: {placeholder}" : "Për shembull: {placeholder}",
+ "File size (upload)" : "Madhësia e skedarit (ngarko)",
+ "less" : "më pak",
+ "less or equals" : "më pak ose e barabartë",
+ "greater or equals" : "më e madhe ose e barabartë",
+ "greater" : "më e madhe",
+ "File system tag" : "Etiketë e skedarit të sistemit",
+ "is tagged with" : "është e etiketuar me",
+ "is not tagged with" : "nuk është e etiketuar me",
+ "Select tag…" : "Zgjidh etiketën...",
+ "Request remote address" : "Adresa e kërkesës remote",
+ "matches IPv4" : "përputhet me IPv4",
+ "does not match IPv4" : "nuk përputhet me IPv4",
+ "matches IPv6" : "përputhet me IPv6",
+ "does not match IPv6" : "nuk përputhet me IPv6",
+ "Request time" : "Koha e kërkesës",
+ "between" : "midis",
+ "not between" : "nuk është midis",
+ "Start" : "Fillim",
+ "End" : "Mbarim",
+ "Select timezone…" : "Zgjidh brezin kohorë",
+ "Request URL" : "Kërko URL",
+ "Predefined URLs" : "URL të paracaktuara",
+ "Files WebDAV" : "Skedarët WebDAV ",
+ "Request user agent" : "Kërko agjentin përdorues",
+ "Sync clients" : "Klient të sinkronizuar",
+ "Android client" : "Klient Android",
+ "iOS client" : "Klient IOS",
+ "Desktop client" : "Klient Desktop",
+ "User group membership" : "Anëtarësia në grupet e përdoruesit",
+ "is member of" : "është anëtarë i",
+ "is not member of" : "nuk është anëtarë i",
+ "The given operator is invalid" : "Operatori i dhënë nuk është i vlefshëm",
+ "The given regular expression is invalid" : "Shprehja e rregullt e dhënë është e pavlefshme",
+ "The given file size is invalid" : "Madhësia e dhënë e skedarit është e pavlefshme",
+ "The given tag id is invalid" : "id e dhënë e etiketës është e pavlefshme",
+ "The given IP range is invalid" : "Rangu i dhënë i IP është i pavlefshëm",
+ "The given IP range is not valid for IPv4" : "Rangu i dhënë i IP nuk është i vlefshëm për IPv4",
+ "The given IP range is not valid for IPv6" : "Rangu i dhënë i IP nuk është i vlefshëm për IPv6",
+ "The given time span is invalid" : "Hapsira kohore e dhënë është e pavlefshme",
+ "The given start time is invalid" : "Koha e fillimit e dhënë është e pavlefshme",
+ "The given end time is invalid" : "Koha e mbarimit e dhënë është e pavlefshme",
+ "The given group does not exist" : "Grupi i dhënë nuk ekziston",
+ "Check %s is invalid or does not exist" : "Kontrolli %s është i pavlefshëm ose nuk ekziston",
+ "Operation #%s does not exist" : "Operacioni #%s nuk ekziston",
+ "Operation %s does not exist" : "Operacioni %s nuk ekziston",
+ "Operation %s is invalid" : "Operacioni %s është i pavlefshëm",
+ "Check %s does not exist" : "Kontrolli %s nuk ekziston",
+ "Check %s is invalid" : "Kontrolli %s është i pavlefshëm",
+ "Check #%s does not exist" : "Kontrolli #%s nuk ekziston",
+ "Workflow" : "Rrjedha e punëve",
+ "Open documentation" : "Dokumentacion i hapur",
+ "Add rule group" : "Shto rregull grupi",
+ "Short rule description" : "Përshkrim i shkurtër i rregullit",
+ "Add rule" : "Shto rregull",
+ "Reset" : "Rivendos",
+ "Save" : "Ruaj",
+ "Saving…" : "Duke u ruajtur...",
+ "Loading…" : "Po ngarkohet..."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sv.js b/apps/workflowengine/l10n/sv.js
new file mode 100644
index 00000000000..9e6178c895d
--- /dev/null
+++ b/apps/workflowengine/l10n/sv.js
@@ -0,0 +1,71 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Successfully saved" : "Sparades framgångsrikt",
+ "Saving failed:" : "Gick ej att spara: ",
+ "File mime type" : "Filens \"mime\" typ",
+ "is" : "är",
+ "is not" : "är inte",
+ "matches" : "träffar",
+ "does not match" : "matchar inte",
+ "Example: {placeholder}" : "Exempel: {placeholder}",
+ "File size (upload)" : "Filstorlek (uppladdning)",
+ "less" : "mindre",
+ "less or equals" : "mindre eller motsvarar",
+ "greater or equals" : "större eller motsvarar",
+ "greater" : "större",
+ "File system tag" : "Filens systemtagg",
+ "is tagged with" : "är taggad med",
+ "is not tagged with" : "är inte taggad med",
+ "Select tag…" : "Välj tagg...",
+ "Request remote address" : "Begär extern adress",
+ "matches IPv4" : "matchar IPv4",
+ "does not match IPv4" : "matchar inte IPv4",
+ "matches IPv6" : "matchar IPv6",
+ "does not match IPv6" : "matchar inte IPv6",
+ "Request time" : "Begärningstid",
+ "between" : "mellan",
+ "not between" : "inte mellan",
+ "Start" : "Början",
+ "End" : "Slutet",
+ "Select timezone…" : "Välj tidszon...",
+ "Request URL" : "Begär URL",
+ "Predefined URLs" : "Förinställda URL:er",
+ "Files WebDAV" : "Filer WebDAV",
+ "Request user agent" : "Begär Användaragent",
+ "Sync clients" : "Synkroniseringsklienter",
+ "Android client" : "Android-klient",
+ "iOS client" : "iOS-klient",
+ "Desktop client" : "Skrivbordsklient",
+ "User group membership" : "Användargruppsmedlemskap",
+ "is member of" : "är medlem i",
+ "is not member of" : "är inte medlem i",
+ "The given operator is invalid" : "Den valda operatören är felaktig",
+ "The given regular expression is invalid" : "Det valda vanliga uttrycket är felaktigt",
+ "The given file size is invalid" : "Den valda filstorleken är felaktig",
+ "The given tag id is invalid" : "Den valda taggen är felaktig",
+ "The given IP range is invalid" : "Det valda IP-spannet är felaktigt",
+ "The given IP range is not valid for IPv4" : "Det valda IP-spannet är felaktigt för IPv4",
+ "The given IP range is not valid for IPv6" : "Det valda IP-spannet är felaktigt för IPv6",
+ "The given time span is invalid" : "Det valda tidsspannet är felaktigt",
+ "The given start time is invalid" : "Den valda starttiden är felaktig",
+ "The given end time is invalid" : "Den valda sluttiden är felaktig",
+ "The given group does not exist" : "Den valda gruppen finns inte",
+ "Check %s is invalid or does not exist" : "Kontroll av %s är ogiltig eller existerar inte",
+ "Operation #%s does not exist" : "Operationen #%s existerar inte",
+ "Operation %s does not exist" : "Operationen %s existerar inte",
+ "Operation %s is invalid" : "Operationen %s är ogiltig",
+ "Check %s does not exist" : "Kontroll av %s existerar inte",
+ "Check %s is invalid" : "Kontroll av %s är ogiltig",
+ "Check #%s does not exist" : "Kontroll av #%s existerar inte",
+ "Workflow" : "Arbetsflöde",
+ "Open documentation" : "Öppna dokumentation",
+ "Add rule group" : "Lägg till regelgrupp",
+ "Short rule description" : "Kort regelbeskrivning",
+ "Add rule" : "Lägg till regel",
+ "Reset" : "Återställ",
+ "Save" : "Spara",
+ "Saving…" : "Sparar...",
+ "Loading…" : "Laddar..."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/sv.json b/apps/workflowengine/l10n/sv.json
new file mode 100644
index 00000000000..114eb6a77be
--- /dev/null
+++ b/apps/workflowengine/l10n/sv.json
@@ -0,0 +1,69 @@
+{ "translations": {
+ "Successfully saved" : "Sparades framgångsrikt",
+ "Saving failed:" : "Gick ej att spara: ",
+ "File mime type" : "Filens \"mime\" typ",
+ "is" : "är",
+ "is not" : "är inte",
+ "matches" : "träffar",
+ "does not match" : "matchar inte",
+ "Example: {placeholder}" : "Exempel: {placeholder}",
+ "File size (upload)" : "Filstorlek (uppladdning)",
+ "less" : "mindre",
+ "less or equals" : "mindre eller motsvarar",
+ "greater or equals" : "större eller motsvarar",
+ "greater" : "större",
+ "File system tag" : "Filens systemtagg",
+ "is tagged with" : "är taggad med",
+ "is not tagged with" : "är inte taggad med",
+ "Select tag…" : "Välj tagg...",
+ "Request remote address" : "Begär extern adress",
+ "matches IPv4" : "matchar IPv4",
+ "does not match IPv4" : "matchar inte IPv4",
+ "matches IPv6" : "matchar IPv6",
+ "does not match IPv6" : "matchar inte IPv6",
+ "Request time" : "Begärningstid",
+ "between" : "mellan",
+ "not between" : "inte mellan",
+ "Start" : "Början",
+ "End" : "Slutet",
+ "Select timezone…" : "Välj tidszon...",
+ "Request URL" : "Begär URL",
+ "Predefined URLs" : "Förinställda URL:er",
+ "Files WebDAV" : "Filer WebDAV",
+ "Request user agent" : "Begär Användaragent",
+ "Sync clients" : "Synkroniseringsklienter",
+ "Android client" : "Android-klient",
+ "iOS client" : "iOS-klient",
+ "Desktop client" : "Skrivbordsklient",
+ "User group membership" : "Användargruppsmedlemskap",
+ "is member of" : "är medlem i",
+ "is not member of" : "är inte medlem i",
+ "The given operator is invalid" : "Den valda operatören är felaktig",
+ "The given regular expression is invalid" : "Det valda vanliga uttrycket är felaktigt",
+ "The given file size is invalid" : "Den valda filstorleken är felaktig",
+ "The given tag id is invalid" : "Den valda taggen är felaktig",
+ "The given IP range is invalid" : "Det valda IP-spannet är felaktigt",
+ "The given IP range is not valid for IPv4" : "Det valda IP-spannet är felaktigt för IPv4",
+ "The given IP range is not valid for IPv6" : "Det valda IP-spannet är felaktigt för IPv6",
+ "The given time span is invalid" : "Det valda tidsspannet är felaktigt",
+ "The given start time is invalid" : "Den valda starttiden är felaktig",
+ "The given end time is invalid" : "Den valda sluttiden är felaktig",
+ "The given group does not exist" : "Den valda gruppen finns inte",
+ "Check %s is invalid or does not exist" : "Kontroll av %s är ogiltig eller existerar inte",
+ "Operation #%s does not exist" : "Operationen #%s existerar inte",
+ "Operation %s does not exist" : "Operationen %s existerar inte",
+ "Operation %s is invalid" : "Operationen %s är ogiltig",
+ "Check %s does not exist" : "Kontroll av %s existerar inte",
+ "Check %s is invalid" : "Kontroll av %s är ogiltig",
+ "Check #%s does not exist" : "Kontroll av #%s existerar inte",
+ "Workflow" : "Arbetsflöde",
+ "Open documentation" : "Öppna dokumentation",
+ "Add rule group" : "Lägg till regelgrupp",
+ "Short rule description" : "Kort regelbeskrivning",
+ "Add rule" : "Lägg till regel",
+ "Reset" : "Återställ",
+ "Save" : "Spara",
+ "Saving…" : "Sparar...",
+ "Loading…" : "Laddar..."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/zh_CN.js b/apps/workflowengine/l10n/zh_CN.js
new file mode 100644
index 00000000000..9f7071a6c88
--- /dev/null
+++ b/apps/workflowengine/l10n/zh_CN.js
@@ -0,0 +1,59 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Successfully saved" : "保存成功",
+ "Saving failed:" : "保存失败:",
+ "File mime type" : "文件MIME类型",
+ "is" : "是",
+ "is not" : "不是",
+ "matches" : "匹配",
+ "does not match" : "不匹配",
+ "Example: {placeholder}" : "例子: {placeholder}",
+ "File size (upload)" : "文件大小 (上传)",
+ "less" : "小于",
+ "less or equals" : "小于等于",
+ "greater or equals" : "大于等于",
+ "greater" : "大于",
+ "File system tag" : "文件系统标签",
+ "is tagged with" : "标记为",
+ "is not tagged with" : "未标记为",
+ "Select tag…" : "选择标签...",
+ "Request remote address" : "要求远程地址",
+ "matches IPv4" : "匹配 IPv4",
+ "does not match IPv4" : "不匹配IPv4",
+ "matches IPv6" : "匹配IPv6",
+ "does not match IPv6" : "不匹配IPv6",
+ "Request time" : "请求时间",
+ "between" : "之间",
+ "not between" : "不在之间",
+ "Start" : "开始",
+ "End" : "结束",
+ "Select timezone…" : "选择时区",
+ "Request URL" : "请求URL",
+ "Predefined URLs" : "预定义URL",
+ "Files WebDAV" : "文件WebDAV",
+ "Request user agent" : "请求用户代理",
+ "Sync clients" : "同步客户端",
+ "Android client" : "Android 客户端",
+ "iOS client" : "iOS 客户端",
+ "Desktop client" : "桌面客户端",
+ "User group membership" : "用户组成员资格",
+ "is member of" : "是成员",
+ "is not member of" : "不是成员",
+ "The given operator is invalid" : "给定的运算符无效",
+ "The given regular expression is invalid" : "给定的正则表达式无效",
+ "The given file size is invalid" : "给定的文件大小无效",
+ "The given tag id is invalid" : "给定的标签ID无效",
+ "The given IP range is invalid" : "给定的IP范围无效",
+ "The given end time is invalid" : "输入的截止时间无效",
+ "The given group does not exist" : "输入的群组不存在",
+ "Operation #%s does not exist" : "操作 %s 不存在",
+ "Operation %s does not exist" : "操作 %s 不存在",
+ "Workflow" : "数据流",
+ "Add rule" : "添加规则",
+ "Reset" : "重置",
+ "Save" : "保存",
+ "Saving…" : "保存中...",
+ "Loading…" : "加载中"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/zh_CN.json b/apps/workflowengine/l10n/zh_CN.json
new file mode 100644
index 00000000000..b5138ba8e8f
--- /dev/null
+++ b/apps/workflowengine/l10n/zh_CN.json
@@ -0,0 +1,57 @@
+{ "translations": {
+ "Successfully saved" : "保存成功",
+ "Saving failed:" : "保存失败:",
+ "File mime type" : "文件MIME类型",
+ "is" : "是",
+ "is not" : "不是",
+ "matches" : "匹配",
+ "does not match" : "不匹配",
+ "Example: {placeholder}" : "例子: {placeholder}",
+ "File size (upload)" : "文件大小 (上传)",
+ "less" : "小于",
+ "less or equals" : "小于等于",
+ "greater or equals" : "大于等于",
+ "greater" : "大于",
+ "File system tag" : "文件系统标签",
+ "is tagged with" : "标记为",
+ "is not tagged with" : "未标记为",
+ "Select tag…" : "选择标签...",
+ "Request remote address" : "要求远程地址",
+ "matches IPv4" : "匹配 IPv4",
+ "does not match IPv4" : "不匹配IPv4",
+ "matches IPv6" : "匹配IPv6",
+ "does not match IPv6" : "不匹配IPv6",
+ "Request time" : "请求时间",
+ "between" : "之间",
+ "not between" : "不在之间",
+ "Start" : "开始",
+ "End" : "结束",
+ "Select timezone…" : "选择时区",
+ "Request URL" : "请求URL",
+ "Predefined URLs" : "预定义URL",
+ "Files WebDAV" : "文件WebDAV",
+ "Request user agent" : "请求用户代理",
+ "Sync clients" : "同步客户端",
+ "Android client" : "Android 客户端",
+ "iOS client" : "iOS 客户端",
+ "Desktop client" : "桌面客户端",
+ "User group membership" : "用户组成员资格",
+ "is member of" : "是成员",
+ "is not member of" : "不是成员",
+ "The given operator is invalid" : "给定的运算符无效",
+ "The given regular expression is invalid" : "给定的正则表达式无效",
+ "The given file size is invalid" : "给定的文件大小无效",
+ "The given tag id is invalid" : "给定的标签ID无效",
+ "The given IP range is invalid" : "给定的IP范围无效",
+ "The given end time is invalid" : "输入的截止时间无效",
+ "The given group does not exist" : "输入的群组不存在",
+ "Operation #%s does not exist" : "操作 %s 不存在",
+ "Operation %s does not exist" : "操作 %s 不存在",
+ "Workflow" : "数据流",
+ "Add rule" : "添加规则",
+ "Reset" : "重置",
+ "Save" : "保存",
+ "Saving…" : "保存中...",
+ "Loading…" : "加载中"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/workflowengine/lib/Settings/Section.php b/apps/workflowengine/lib/Settings/Section.php
index df8bb807134..b46f9a4a35f 100644
--- a/apps/workflowengine/lib/Settings/Section.php
+++ b/apps/workflowengine/lib/Settings/Section.php
@@ -24,13 +24,21 @@
namespace OCA\WorkflowEngine\Settings;
use OCP\IL10N;
-use OCP\Settings\ISection;
+use OCP\IURLGenerator;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var IL10N */
private $l;
+ /** @var IURLGenerator */
+ private $url;
- public function __construct(IL10N $l) {
+ /**
+ * @param IURLGenerator $url
+ * @param IL10N $l
+ */
+ public function __construct(IURLGenerator $url, IL10N $l) {
+ $this->url = $url;
$this->l = $l;
}
@@ -54,4 +62,11 @@ class Section implements ISection {
public function getPriority() {
return 55;
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return $this->url->imagePath('core', 'actions/tag.svg');
+ }
}
diff --git a/autotest-external.sh b/autotest-external.sh
index 7d2e506ae98..1f1ca330ac5 100755
--- a/autotest-external.sh
+++ b/autotest-external.sh
@@ -167,11 +167,14 @@ EOF
fi
if [ -z "$NOCOVERAGE" ]; then
"$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1.xml" --coverage-clover "autotest-external-clover-$1.xml" --coverage-html "coverage-external-html-$1"
- RESULT=$?
else
echo "No coverage"
"$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1.xml"
- RESULT=$?
+ fi
+
+ if [[ $? -ne 0 ]]; then
+ echo "Error during phpunit execution ... terminating"
+ exit 1
fi
if [ -n "$2" -a "$2" == "common-tests" ]; then
@@ -207,16 +210,19 @@ EOF
rm -rf "coverage-external-html-$1-$name"
mkdir "coverage-external-html-$1-$name"
"$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1-$name.xml" --coverage-clover "autotest-external-clover-$1-$name.xml" --coverage-html "coverage-external-html-$1-$name" "$FILES_EXTERNAL_BACKEND_PATH/$testToRun"
- RESULT=$?
else
echo "No coverage"
"$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1-$name.xml" "$FILES_EXTERNAL_BACKEND_PATH/$testToRun"
- RESULT=$?
fi
else
DOEXIT=1
fi
+ if [[ $? -ne 0 ]]; then
+ echo "Error during phpunit execution ... terminating"
+ exit 1
+ fi
+
# calculate stop file
stopFile=`echo "$startFile" | sed 's/start/stop/'`
echo "stop: $stopFile"
diff --git a/autotest-js.sh b/autotest-js.sh
index 475a61df59e..bd7310c4e43 100755
--- a/autotest-js.sh
+++ b/autotest-js.sh
@@ -22,6 +22,10 @@ fi
# update/install test packages
mkdir -p "$PREFIX" && $NPM install --link --prefix "$PREFIX" || exit 3
+# create scss test
+mkdir -p tests/css
+./build/bin/node-sass --output tests/css core/css
+
KARMA="$PREFIX/node_modules/karma/bin/karma"
NODE_PATH='build/node_modules' KARMA_TESTSUITE="$1" $KARMA start tests/karma.config.js --single-run
diff --git a/autotest.sh b/autotest.sh
index f42ca41de9d..ded3cec6091 100755
--- a/autotest.sh
+++ b/autotest.sh
@@ -344,6 +344,9 @@ function execute_tests {
if [ "$TEST_SELECTION" == "NODB" ]; then
GROUP='--exclude-group DB,SLOWDB'
fi
+ if [ "$TEST_SELECTION" == "PRIMARY-s3" ]; then
+ GROUP='--group PRIMARY-s3'
+ fi
COVER=''
if [ -z "$NOCOVERAGE" ]; then
diff --git a/bower.json b/bower.json
index b4256b0c7aa..0735f4eb5a0 100644
--- a/bower.json
+++ b/bower.json
@@ -20,6 +20,7 @@
"jquery-migrate": "~1.4.0",
"jquery-ui": "1.10.0",
"jsTimezoneDetect": "~1.0.5",
+ "marked": "^0.3.6",
"moment": "^2.15.0",
"select2": "~3.4.8",
"zxcvbn": "*",
diff --git a/build/autoloaderchecker.sh b/build/autoloaderchecker.sh
index a1f52da2d87..b8ac493cb24 100644
--- a/build/autoloaderchecker.sh
+++ b/build/autoloaderchecker.sh
@@ -1,24 +1,33 @@
#!/usr/bin/env bash
-#Make sure we are on the latest composer
-if [ -e "composer.phar" ]
+COMPOSER_COMMAND=$(which "composer")
+if [ "$COMPOSER_COMMAND" = '' ]
then
- echo "Composer found: checking for update"
- php composer.phar self-update
+ #No global composer found, try local or download it
+ if [ -e "composer.phar" ]
+ then
+ echo "Composer found: checking for update"
+ else
+ echo "Composer not found: fetching"
+ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
+ php composer-setup.php
+ php -r "unlink('composer-setup.php');"
+ fi
+
+ COMPOSER_COMMAND="php composer.phar"
else
- echo "Composer not found: fetching"
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
- php composer-setup.php
- php -r "unlink('composer-setup.php');"
+ echo "Global composer found: checking for update"
fi
+#Make sure we are on the latest composer
+$COMPOSER_COMMAND self-update
+
REPODIR=`git rev-parse --show-toplevel`
#Redump the autoloader
echo
echo "Regenerating autoloader"
-php composer.phar dump-autoload -d $REPODIR
+$COMPOSER_COMMAND dump-autoload -d $REPODIR
files=`git diff --name-only`
composerfile=false
diff --git a/build/integration/config/behat.yml b/build/integration/config/behat.yml
index 9ef36f083e9..3573f9d6a6b 100644
--- a/build/integration/config/behat.yml
+++ b/build/integration/config/behat.yml
@@ -22,6 +22,9 @@ default:
baseUrl: http://localhost:8080
- ChecksumsContext:
baseUrl: http://localhost:8080
+ - CommandLineContext:
+ baseUrl: http://localhost:8080
+ ocPath: ../../
federation:
paths:
- %paths.base%/../federation_features
@@ -72,8 +75,16 @@ default:
- admin
- admin
regular_user_password: 123456
-
-
+ ldap:
+ paths:
+ - %paths.base%/../ldap_features
+ contexts:
+ - LDAPContext:
+ baseUrl: http://localhost:8080
+ admin:
+ - admin
+ - admin
+ regular_user_password: what_for
extensions:
jarnaiz\JUnitFormatter\JUnitFormatterExtension:
diff --git a/build/integration/data/bjoern.vcf b/build/integration/data/bjoern.vcf
new file mode 100644
index 00000000000..03decaf997e
--- /dev/null
+++ b/build/integration/data/bjoern.vcf
@@ -0,0 +1,51 @@
+BEGIN:VCARD
+VERSION:3.0
+FN:Björn Schießle
+ORG:Nextcloud
+PHOTO;ENCODING=b;TYPE=jpeg:/9j/4AAQSkZJRgABAQEAbABrAAD//gA7Q1JFQVRPUjogZ2Qt
+ anBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBxdWFsaXR5ID0gOTAK/9sAQwAIBgYHBg
+ UIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04Mjwu
+ MzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
+ IyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUABQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAA
+ AAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZ
+ GhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm
+ Z2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIyc
+ rS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME
+ BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQ
+ kjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz
+ dHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1N
+ XW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8/zqMcG0GTZKh3R/wouMYxVG
+ SFVtyqoDjocVMuovJZym3kYLtLAlumB1Ofc1FYmR9KaWVtzAYH8q54bmEE7mLHay3d2IYUyzcV
+ 1Vn4VsLaITX8hkkI4j3YFaHg7QJryaOGKNRLcfM0h6ovrXsVh8MNKkt1893Y+vrWt9bHVGGl2e
+ KyW+mBW8i3iVV43beW9ce1YrJapcPKW2xzfLIGbqM9iORX0PcfC3Qw27Yx+hrkvEvwjs5LR5tJ
+ kMdzHllRuje1JtbMv2V1dHjmpwzXMKTRxRsOg29UwOme4rFwVToG9T6V0c9pLFC58tYbmBsMnf
+ IrBlG+X5djscE+WtEVbQwaa3IBnAwcc1u27wuq2lum8qCWlZtoJ9cVSj0+ZnQNBMwI3EIOn1Pa
+ rOoyvCyJFxEy8MowGHTj24pNpuxMlc2g+m6fNPC6b125V22jCk9PSpAy3NmzIyvu4BQcYrK1Zb
+ VdPhFrIZJFXdKWGDtbp296v28BstIRN2WTk4P51mtNTOLtqenfCVIpdNldV+dcKSa9bjkk2gYA
+ ArxHwHqb6F4dvLxVX/AI+NoON38I7D6102geM9R1XX47KRColbCkxFMVfU9SCvFI9MMjkc1VmA
+ IJrlfE2saro8gW3JbJ+XZHvNLoXiWbVFWK4EvmMM4kh8v8qTdy1C2x494/EcOpXoVdpaQ4I9a8
+ /tof8ASTK0yxgYbAOD+Ar0v4laVcSeMXjgT91JGJF+vQiuDisL8k3MaFio2xnPaqv7pxVtGW7i
+ Vp7JpfswRWK5meQrnn+L1rLvHWSaEqMKiBflk3g/T0+lat3cTajpZtQYC4PGRtYgdK52EORsQE
+ sfQVFNdzCJ1Uq239non2iMXDgONoyce/pRbxj7BLHtJYkgDOcc+tVLyw8iczB1NqZNm9Dyvvj0
+ rqLJbb7Kl2nmBA3BK5ZuOv1qG7IzvY9H+HdlGdGmgvraOFcqNobOdqKu78cZrp7CLRbXV1EDIj
+ Rn5nd8nntzXm3hCS8fSLoeYU3P8meDnHzVetorW5ZtPmW4kvifNGyIk46ZBqou562HalSWp6Pq
+ TaezkXRR4nfAbPQ/0qeG0tIYA0JDAdOc4rlkitLDSJBd210Q6hWk8g5bPTjrT/Dy3duZre4ZzE
+ rfu9/3sehps6ElbczfFNgYrPVNflCsba2Kwp1y5yF/8eINeKQMywmGKaIAg7kL7Sp716l8S9Vv
+ oymnW0mIZIxI6kcMdxx+RFeUanpUemQvPcJMwuBw6YI3deopK2zPMxc1KfKZhuy9wpVAQrDCgd
+ arqnkuNodXHO4fw0y3DB96KxwwIxV2PzpZd8xMaE46YBrbYx2NGeB70CVLkOjbVwF2/UfhWzp8
+ E8drAv2pZEjYou3GV+ase2uRaW8un3EyoCWfenU/7OfwrR0W+e4gSKOIEoeitkjPc/rWEk7GT2
+ N3S/EEtrqjwSTKsAYsBj7zEev4GvR7e+kl06LU9NgiutoKlD94fSvHP7NZ5BqN1EY4I5funjzD
+ /dH9a63R5NSl8OC+sLnZMsrJOjfdkOchvyIFbRouMed9TrwlTlbS2PTdHvL3UoRcX0EdtHH91e
+ mKFvIp2LW5DBjwR/OvPbO61zVP9Gnm2wE/MIyfmH17Vs3F0bRfscLD5Y8yFeijstVTpOrUUFuz
+ rqV7RcuiJfFmnwan5j2xL3MNt5UZzwfm3Ej+VeZvI8ZWO6QvFjLAmvQIrtnkCocv3PpVPU9Btd
+ ZhdXlkhlUYDof6V6uKynmjH2W6/E8GVZzk3I4O5tUtwxWKNV6fKB8wxu4H0qq6w+YeVKgDb2PT
+ of8APatnWdGvdI08W8lsJ7QNv89QcD6+lZMhIsx5ezGMFum7HTFeLKnOk7SVmaRfUu+E/C9rqs
+ 0816kjBMc545rvLLS9O0yEpZ2kajplhktVfQrcWOiQ245cqGc+rMcmtnyfujHAr6TB4CnCKlNX
+ b/AwqVHJnK3epfbPPh1e3W1to5/IinBzuOT2/rXTeCrWw/sK7h+2wuPNaUgcFUwMHB+lU9UsIb
+ tkMwysfIUetUrfw9uguYrW6MCgbwjZO4/3R6VeJwvtY2ZpRr+zd0Xr3xB4d061doLx55scKqEf
+ zxWRBqTatp4ZImg85zuJbJK9v60xPCyNLvmG7HQHnPua2rbTkhCqFGarDYKNGXMh1sTKorMW2i
+ SCERxjFWIl2scd6kWLHT86MDn+6K7zmLUL/uyjqHVht2tzn2rmfEHw8stShMmmsLGflti58pj9
+ P4fqPyrbhkLkv0UcCr8MxZCDXNXoRqL3kOM3F6H/2Q==
+UID:6454bec7-6f5b-46f2-ba22-15537ab215d9
+CATEGORIES:Engineering
+END:VCARD \ No newline at end of file
diff --git a/build/integration/features/auth.feature b/build/integration/features/auth.feature
index 43aa618bd00..a3af28f25c8 100644
--- a/build/integration/features/auth.feature
+++ b/build/integration/features/auth.feature
@@ -75,4 +75,12 @@ Feature: auth
Scenario: using OCS with browser session
Given a new browser session is started
When requesting "/ocs/v1.php/apps/files_sharing/api/v1/remote_shares" with "GET" using browser session
- Then the OCS status code should be "100" \ No newline at end of file
+ Then the OCS status code should be "100"
+
+ # REMEMBER ME
+ Scenario: remember login
+ Given a new remembered browser session is started
+ When the session cookie expires
+ And requesting "/index.php/apps/files" with "GET" using browser session
+ Then the HTTP status code should be "200"
+
diff --git a/build/integration/features/bootstrap/Auth.php b/build/integration/features/bootstrap/Auth.php
index f4b1a3e5b47..61cad0dc145 100644
--- a/build/integration/features/bootstrap/Auth.php
+++ b/build/integration/features/bootstrap/Auth.php
@@ -1,4 +1,5 @@
<?php
+
/**
*
@@ -47,7 +48,7 @@ trait Auth {
try {
if ($useCookies) {
$request = $this->client->createRequest($method, $fullUrl, [
- 'cookies' => $this->cookieJar,
+ 'cookies' => $this->cookieJar,
]);
} else {
$request = $this->client->createRequest($method, $fullUrl);
@@ -116,30 +117,43 @@ trait Auth {
/**
* @Given a new browser session is started
*/
- public function aNewBrowserSessionIsStarted() {
+ public function aNewBrowserSessionIsStarted($remember = false) {
$loginUrl = substr($this->baseUrl, 0, -5) . '/login';
// Request a new session and extract CSRF token
$client = new Client();
- $response = $client->get(
- $loginUrl, [
- 'cookies' => $this->cookieJar,
- ]
- );
+ $response = $client->get($loginUrl, [
+ 'cookies' => $this->cookieJar,
+ ]);
$this->extracRequestTokenFromResponse($response);
// Login and extract new token
$client = new Client();
$response = $client->post(
$loginUrl, [
- 'body' => [
- 'user' => 'user0',
- 'password' => '123456',
- 'requesttoken' => $this->requestToken,
- ],
- 'cookies' => $this->cookieJar,
+ 'body' => [
+ 'user' => 'user0',
+ 'password' => '123456',
+ 'remember_login' => $remember ? '1' : '0',
+ 'requesttoken' => $this->requestToken,
+ ],
+ 'cookies' => $this->cookieJar,
]
);
$this->extracRequestTokenFromResponse($response);
}
+ /**
+ * @Given a new remembered browser session is started
+ */
+ public function aNewRememberedBrowserSessionIsStarted() {
+ $this->aNewBrowserSessionIsStarted(true);
+ }
+
+ /**
+ * @When the session cookie expires
+ */
+ public function whenTheSessionCookieExpires() {
+ $this->cookieJar->clearSessionCookies();
+ }
+
}
diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php
index 46647f97e85..8e1fcf86ba1 100644
--- a/build/integration/features/bootstrap/BasicStructure.php
+++ b/build/integration/features/bootstrap/BasicStructure.php
@@ -24,7 +24,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+
use GuzzleHttp\Client;
+use GuzzleHttp\Cookie\CookieJar;
+use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Message\ResponseInterface;
require __DIR__ . '/../../vendor/autoload.php';
@@ -48,7 +51,7 @@ trait BasicStructure {
/** @var ResponseInterface */
private $response = null;
- /** @var \GuzzleHttp\Cookie\CookieJar */
+ /** @var CookieJar */
private $cookieJar;
/** @var string */
@@ -63,7 +66,7 @@ trait BasicStructure {
$this->localBaseUrl = $this->baseUrl;
$this->remoteBaseUrl = $this->baseUrl;
$this->currentServer = 'LOCAL';
- $this->cookieJar = new \GuzzleHttp\Cookie\CookieJar();
+ $this->cookieJar = new CookieJar();
// in case of ci deployment we take the server url from the environment
$testServerUrl = getenv('TEST_SERVER_URL');
@@ -174,7 +177,7 @@ trait BasicStructure {
try {
$this->response = $client->send($client->createRequest($verb, $fullUrl, $options));
- } catch (\GuzzleHttp\Exception\ClientException $ex) {
+ } catch (ClientException $ex) {
$this->response = $ex->getResponse();
}
}
@@ -204,7 +207,7 @@ trait BasicStructure {
try {
$this->response = $client->send($client->createRequest($verb, $fullUrl, $options));
- } catch (\GuzzleHttp\Exception\ClientException $ex) {
+ } catch (ClientException $ex) {
$this->response = $ex->getResponse();
}
}
@@ -298,7 +301,7 @@ trait BasicStructure {
$request->addHeader('requesttoken', $this->requestToken);
try {
$this->response = $client->send($request);
- } catch (\GuzzleHttp\Exception\ClientException $e) {
+ } catch (ClientException $e) {
$this->response = $e->getResponse();
}
}
@@ -321,7 +324,7 @@ trait BasicStructure {
);
try {
$this->response = $client->send($request);
- } catch (\GuzzleHttp\Exception\ClientException $e) {
+ } catch (ClientException $e) {
$this->response = $e->getResponse();
}
}
@@ -343,8 +346,8 @@ trait BasicStructure {
file_put_contents("../../data/$user/files" . "$filename", "$text");
}
- public function createFileSpecificSize($name, $size){
- $file = fopen("data/" . "$name", 'w');
+ public function createFileSpecificSize($name, $size) {
+ $file = fopen("work/" . "$name", 'w');
fseek($file, $size - 1 ,SEEK_CUR);
fwrite($file,'a'); // write a dummy char at SIZE position
fclose($file);
diff --git a/build/integration/features/bootstrap/CardDavContext.php b/build/integration/features/bootstrap/CardDavContext.php
index bfdd51bfdb0..4ee882cc2e6 100644
--- a/build/integration/features/bootstrap/CardDavContext.php
+++ b/build/integration/features/bootstrap/CardDavContext.php
@@ -202,4 +202,115 @@ class CardDavContext implements \Behat\Behat\Context\Context {
}
}
+ /**
+ * @Given :user uploads the contact :fileName to the addressbook :addressbook
+ */
+ public function uploadsTheContactToTheAddressbook($user, $fileName, $addressBook) {
+ $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$user.'/'.$addressBook . '/' . $fileName;
+ $password = ($user === 'admin') ? 'admin' : '123456';
+
+ $request = $this->client->createRequest(
+ 'PUT',
+ $davUrl,
+ [
+ 'body' => file_get_contents(__DIR__ . '/../../data/' . $fileName),
+ 'auth' => [
+ $user,
+ $password,
+ ],
+ 'headers' => [
+ 'Content-Type' => 'application/xml;charset=UTF-8',
+ ],
+ ]
+ );
+
+ $this->response = $this->client->send($request);
+
+ if($this->response->getStatusCode() !== 201) {
+ throw new \Exception(
+ sprintf(
+ 'Expected %s got %s',
+ 201,
+ $this->response->getStatusCode()
+ )
+ );
+ }
+ }
+
+ /**
+ * @When Exporting the picture of contact :fileName from addressbook :addressBook as user :user
+ */
+ public function whenExportingThePictureOfContactFromAddressbookAsUser($fileName, $addressBook, $user) {
+ $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$user.'/'.$addressBook . '/' . $fileName . '?photo=true';
+ $password = ($user === 'admin') ? 'admin' : '123456';
+
+ try {
+ $request = $this->client->createRequest(
+ 'GET',
+ $davUrl,
+ [
+ 'auth' => [
+ $user,
+ $password,
+ ],
+ 'headers' => [
+ 'Content-Type' => 'application/xml;charset=UTF-8',
+ ],
+ ]
+ );
+ $this->response = $this->client->send($request);
+ } catch (\GuzzleHttp\Exception\ClientException $e) {
+ $this->response = $e->getResponse();
+ }
+ }
+
+ /**
+ * @When Downloading the contact :fileName from addressbook :addressBook as user :user
+ */
+ public function whenDownloadingTheContactFromAddressbookAsUser($fileName, $addressBook, $user) {
+ $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$user.'/'.$addressBook . '/' . $fileName;
+ $password = ($user === 'admin') ? 'admin' : '123456';
+
+ try {
+ $request = $this->client->createRequest(
+ 'GET',
+ $davUrl,
+ [
+ 'auth' => [
+ $user,
+ $password,
+ ],
+ 'headers' => [
+ 'Content-Type' => 'application/xml;charset=UTF-8',
+ ],
+ ]
+ );
+ $this->response = $this->client->send($request);
+ } catch (\GuzzleHttp\Exception\ClientException $e) {
+ $this->response = $e->getResponse();
+ }
+ }
+
+ /**
+ * @Then The following HTTP headers should be set
+ * @param \Behat\Gherkin\Node\TableNode $table
+ * @throws \Exception
+ */
+ public function theFollowingHttpHeadersShouldBeSet(\Behat\Gherkin\Node\TableNode $table) {
+ foreach($table->getTable() as $header) {
+ $headerName = $header[0];
+ $expectedHeaderValue = $header[1];
+ $returnedHeader = $this->response->getHeader($headerName);
+ if($returnedHeader !== $expectedHeaderValue) {
+ throw new \Exception(
+ sprintf(
+ "Expected value '%s' for header '%s', got '%s'",
+ $expectedHeaderValue,
+ $headerName,
+ $returnedHeader
+ )
+ );
+ }
+ }
+ }
}
diff --git a/build/integration/features/bootstrap/CommandLine.php b/build/integration/features/bootstrap/CommandLine.php
new file mode 100644
index 00000000000..c0caf5f8e6e
--- /dev/null
+++ b/build/integration/features/bootstrap/CommandLine.php
@@ -0,0 +1,167 @@
+<?php
+/**
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @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/>
+ *
+ */
+
+require __DIR__ . '/../../vendor/autoload.php';
+
+trait CommandLine {
+ /** @var int return code of last command */
+ private $lastCode;
+ /** @var string stdout of last command */
+ private $lastStdOut;
+ /** @var string stderr of last command */
+ private $lastStdErr;
+
+ /** @var string */
+ protected $ocPath = '../..';
+
+ /**
+ * Invokes an OCC command
+ *
+ * @param string OCC command, the part behind "occ". For example: "files:transfer-ownership"
+ * @return int exit code
+ */
+ public function runOcc($args = []) {
+ $args = array_map(function($arg) {
+ return escapeshellarg($arg);
+ }, $args);
+ $args[] = '--no-ansi';
+ $args = implode(' ', $args);
+
+ $descriptor = [
+ 0 => ['pipe', 'r'],
+ 1 => ['pipe', 'w'],
+ 2 => ['pipe', 'w'],
+ ];
+ $process = proc_open('php console.php ' . $args, $descriptor, $pipes, $this->ocPath);
+ $this->lastStdOut = stream_get_contents($pipes[1]);
+ $this->lastStdErr = stream_get_contents($pipes[2]);
+ $this->lastCode = proc_close($process);
+ return $this->lastCode;
+ }
+
+ /**
+ * @Given /^invoking occ with "([^"]*)"$/
+ */
+ public function invokingTheCommand($cmd) {
+ $args = explode(' ', $cmd);
+ $this->runOcc($args);
+ }
+
+ /**
+ * Find exception texts in stderr
+ */
+ public function findExceptions() {
+ $exceptions = [];
+ $captureNext = false;
+ // the exception text usually appears after an "[Exception"] row
+ foreach (explode("\n", $this->lastStdErr) as $line) {
+ if (preg_match('/\[Exception\]/', $line)) {
+ $captureNext = true;
+ continue;
+ }
+ if ($captureNext) {
+ $exceptions[] = trim($line);
+ $captureNext = false;
+ }
+ }
+
+ return $exceptions;
+ }
+
+ /**
+ * Finds all lines containing the given text
+ *
+ * @param string $input stdout or stderr output
+ * @param string $text text to search for
+ * @return array array of lines that matched
+ */
+ public function findLines($input, $text) {
+ $results = [];
+ // the exception text usually appears after an "[Exception"] row
+ foreach (explode("\n", $input) as $line) {
+ if (strpos($line, $text) >= 0) {
+ $results[] = $line;
+ }
+ }
+
+ return $results;
+ }
+
+ /**
+ * @Then /^the command was successful$/
+ */
+ public function theCommandWasSuccessful() {
+ $exceptions = $this->findExceptions();
+ if ($this->lastCode !== 0) {
+ $msg = 'The command was not successful, exit code was ' . $this->lastCode . '.';
+ if (!empty($exceptions)) {
+ $msg .= ' Exceptions: ' . implode(', ', $exceptions);
+ }
+ throw new \Exception($msg);
+ } else if (!empty($exceptions)) {
+ $msg = 'The command was successful but triggered exceptions: ' . implode(', ', $exceptions);
+ throw new \Exception($msg);
+ }
+ }
+
+ /**
+ * @Then /^the command failed with exit code ([0-9]+)$/
+ */
+ public function theCommandFailedWithExitCode($exitCode) {
+ if ($this->lastCode !== (int)$exitCode) {
+ throw new \Exception('The command was expected to fail with exit code ' . $exitCode . ' but got ' . $this->lastCode);
+ }
+ }
+
+ /**
+ * @Then /^the command failed with exception text "([^"]*)"$/
+ */
+ public function theCommandFailedWithException($exceptionText) {
+ $exceptions = $this->findExceptions();
+ if (empty($exceptions)) {
+ throw new \Exception('The command did not throw any exceptions');
+ }
+
+ if (!in_array($exceptionText, $exceptions)) {
+ throw new \Exception('The command did not throw any exception with the text "' . $exceptionText . '"');
+ }
+ }
+
+ /**
+ * @Then /^the command output contains the text "([^"]*)"$/
+ */
+ public function theCommandOutputContainsTheText($text) {
+ $lines = $this->findLines($this->lastStdOut, $text);
+ if (empty($lines)) {
+ throw new \Exception('The command did not output the expected text on stdout "' . $exceptionText . '"');
+ }
+ }
+
+ /**
+ * @Then /^the command error output contains the text "([^"]*)"$/
+ */
+ public function theCommandErrorOutputContainsTheText($text) {
+ $lines = $this->findLines($this->lastStdErr, $text);
+ if (empty($lines)) {
+ throw new \Exception('The command did not output the expected text on stderr "' . $exceptionText . '"');
+ }
+ }
+}
diff --git a/build/integration/features/bootstrap/CommandLineContext.php b/build/integration/features/bootstrap/CommandLineContext.php
new file mode 100644
index 00000000000..95f492a62db
--- /dev/null
+++ b/build/integration/features/bootstrap/CommandLineContext.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @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/>
+ *
+ */
+
+require __DIR__ . '/../../vendor/autoload.php';
+
+use Behat\Behat\Hook\Scope\BeforeScenarioScope;
+
+class CommandLineContext implements \Behat\Behat\Context\Context {
+ use CommandLine;
+
+ private $lastTransferPath;
+
+ private $featureContext;
+
+ public function __construct($ocPath, $baseUrl) {
+ $this->ocPath = rtrim($ocPath, '/') . '/';
+ $this->localBaseUrl = $baseUrl;
+ $this->remoteBaseUrl = $baseUrl;
+ }
+
+ /** @BeforeScenario */
+ public function gatherContexts(BeforeScenarioScope $scope) {
+ $environment = $scope->getEnvironment();
+ // this should really be "WebDavContext" ...
+ $this->featureContext = $environment->getContext('FeatureContext');
+ }
+
+ private function findLastTransferFolderForUser($sourceUser, $targetUser) {
+ $foundPaths = [];
+ $results = $this->featureContext->listFolder($targetUser, '', 1);
+ foreach ($results as $path => $data) {
+ $path = rawurldecode($path);
+ $parts = explode(' ', $path);
+ if (basename($parts[0]) !== 'transferred') {
+ continue;
+ }
+ if (isset($parts[2]) && $parts[2] === $sourceUser) {
+ // store timestamp as key
+ $foundPaths[] = [
+ 'date' => strtotime(trim($parts[4], '/')),
+ 'path' => $path,
+ ];
+ }
+ }
+
+ if (empty($foundPaths)) {
+ return null;
+ }
+
+ usort($foundPaths, function($a, $b) {
+ return $a['date'] - $b['date'];
+ });
+
+ $davPath = rtrim($this->featureContext->getDavFilesPath($targetUser), '/');
+
+ $foundPath = end($foundPaths)['path'];
+ // strip dav path
+ return substr($foundPath, strlen($davPath) + 1);
+ }
+
+ /**
+ * @When /^transfering ownership from "([^"]+)" to "([^"]+)"/
+ */
+ public function transferingOwnership($user1, $user2) {
+ if ($this->runOcc(['files:transfer-ownership', $user1, $user2]) === 0) {
+ $this->lastTransferPath = $this->findLastTransferFolderForUser($user1, $user2);
+ } else {
+ // failure
+ $this->lastTransferPath = null;
+ }
+ }
+
+ /**
+ * @When /^using received transfer folder of "([^"]+)" as dav path$/
+ */
+ public function usingTransferFolderAsDavPath($user) {
+ $davPath = $this->featureContext->getDavFilesPath($user);
+ $davPath = rtrim($davPath, '/') . $this->lastTransferPath;
+ $this->featureContext->usingDavPath($davPath);
+ }
+}
diff --git a/build/integration/features/bootstrap/LDAPContext.php b/build/integration/features/bootstrap/LDAPContext.php
new file mode 100644
index 00000000000..f23de6f47cd
--- /dev/null
+++ b/build/integration/features/bootstrap/LDAPContext.php
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @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/>.
+ *
+ */
+
+use Behat\Behat\Context\Context;
+use Behat\Gherkin\Node\TableNode;
+
+class LDAPContext implements Context {
+ use BasicStructure;
+
+ protected $configID;
+
+ protected $apiUrl;
+
+ /**
+ * @Given /^the response should contain a tag "([^"]*)"$/
+ */
+ public function theResponseShouldContainATag($arg1) {
+ $configID = $this->response->xml()->data[0]->$arg1;
+ PHPUnit_Framework_Assert::assertInstanceOf(SimpleXMLElement::class, $configID[0]);
+ }
+
+ /**
+ * @Given /^creating an LDAP configuration at "([^"]*)"$/
+ */
+ public function creatingAnLDAPConfigurationAt($apiUrl) {
+ $this->apiUrl = $apiUrl;
+ $this->sendingToWith('POST', $this->apiUrl, null);
+ $configElements = $this->response->xml()->data[0]->configID;
+ $this->configID = $configElements[0];
+ }
+
+ /**
+ * @When /^deleting the LDAP configuration$/
+ */
+ public function deletingTheLDAPConfiguration() {
+ $this->sendingToWith('DELETE', $this->apiUrl . '/' . $this->configID, null);
+ }
+
+ /**
+ * @Given /^the response should contain a tag "([^"]*)" with value "([^"]*)"$/
+ */
+ public function theResponseShouldContainATagWithValue($tagName, $expectedValue) {
+ $data = $this->response->xml()->data[0]->$tagName;
+ PHPUnit_Framework_Assert::assertEquals($expectedValue, $data[0]);
+ }
+
+ /**
+ * @When /^getting the LDAP configuration with showPassword "([^"]*)"$/
+ */
+ public function gettingTheLDAPConfigurationWithShowPassword($showPassword) {
+ $this->sendingToWith(
+ 'GET',
+ $this->apiUrl . '/' . $this->configID . '?showPassword=' . $showPassword,
+ null
+ );
+ }
+
+ /**
+ * @Given /^setting the LDAP configuration to$/
+ */
+ public function settingTheLDAPConfigurationTo(TableNode $configData) {
+ $this->sendingToWith('PUT', $this->apiUrl . '/' . $this->configID, $configData);
+ }
+}
diff --git a/build/integration/features/bootstrap/Provisioning.php b/build/integration/features/bootstrap/Provisioning.php
index dbdfafcecdc..0055ff15de0 100644
--- a/build/integration/features/bootstrap/Provisioning.php
+++ b/build/integration/features/bootstrap/Provisioning.php
@@ -705,6 +705,19 @@ trait Provisioning {
}
/**
+ * Returns home path of the given user
+ * @param string $user
+ */
+ public function getUserHome($user) {
+ $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user";
+ $client = new Client();
+ $options = [];
+ $options['auth'] = $this->adminUser;
+ $this->response = $client->get($fullUrl, $options);
+ return $this->response->xml()->data[0]->home;
+ }
+
+ /**
* @BeforeScenario
* @AfterScenario
*/
diff --git a/build/integration/features/bootstrap/TagsContext.php b/build/integration/features/bootstrap/TagsContext.php
index 91fb585d640..46ce869c86a 100644
--- a/build/integration/features/bootstrap/TagsContext.php
+++ b/build/integration/features/bootstrap/TagsContext.php
@@ -516,13 +516,13 @@ class TagsContext implements \Behat\Behat\Context\Context {
}
/**
- * @When :taggingUser adds the tag :tagName to :fileName shared by :sharingUser
+ * @When /^"([^"]*)" adds the tag "([^"]*)" to "([^"]*)" (shared|owned) by "([^"]*)"$/
* @param string $taggingUser
* @param string $tagName
* @param string $fileName
* @param string $sharingUser
*/
- public function addsTheTagToSharedBy($taggingUser, $tagName, $fileName, $sharingUser) {
+ public function addsTheTagToSharedBy($taggingUser, $tagName, $fileName, $sharedOrOwnedBy, $sharingUser) {
$fileId = $this->getFileIdForPath($fileName, $sharingUser);
$tagId = $this->findTagIdByName($tagName);
@@ -542,13 +542,13 @@ class TagsContext implements \Behat\Behat\Context\Context {
}
/**
- * @Then :fileName shared by :sharingUser has the following tags
+ * @Then /^"([^"]*)" (shared|owned) by "([^"]*)" has the following tags$/
* @param string $fileName
* @param string $sharingUser
* @param TableNode $table
* @throws \Exception
*/
- public function sharedByHasTheFollowingTags($fileName, $sharingUser, TableNode $table) {
+ public function sharedByHasTheFollowingTags($fileName, $sharedOrOwnedBy, $sharingUser, TableNode $table) {
$loadedExpectedTags = $table->getTable();
$expectedTags = [];
foreach($loadedExpectedTags as $expected) {
diff --git a/build/integration/features/bootstrap/WebDav.php b/build/integration/features/bootstrap/WebDav.php
index 8a34d90b849..680d8f96e7c 100644
--- a/build/integration/features/bootstrap/WebDav.php
+++ b/build/integration/features/bootstrap/WebDav.php
@@ -31,6 +31,7 @@
use GuzzleHttp\Client as GClient;
use GuzzleHttp\Message\ResponseInterface;
use Sabre\DAV\Client as SClient;
+use Sabre\DAV\Xml\Property\ResourceType;
require __DIR__ . '/../../vendor/autoload.php';
@@ -328,6 +329,14 @@ trait WebDav {
}
$value = $keys[$key];
+ if ($value instanceof ResourceType) {
+ $value = $value->getValue();
+ if (empty($value)) {
+ $value = '';
+ } else {
+ $value = $value[0];
+ }
+ }
if ($value != $expectedValue) {
throw new \Exception("Property \"$key\" found with value \"$value\", expected \"$expectedValue\"");
}
@@ -397,6 +406,30 @@ trait WebDav {
return $response;
}
+ /* Returns the elements of a report command
+ * @param string $user
+ * @param string $path
+ * @param string $properties properties which needs to be included in the report
+ * @param string $filterRules filter-rules to choose what needs to appear in the report
+ */
+ public function reportFolder($user, $path, $properties, $filterRules){
+ $client = $this->getSabreClient($user);
+
+ $body = '<?xml version="1.0" encoding="utf-8" ?>
+ <oc:filter-files xmlns:a="DAV:" xmlns:oc="http://owncloud.org/ns" >
+ <a:prop>
+ ' . $properties . '
+ </a:prop>
+ <oc:filter-rules>
+ ' . $filterRules . '
+ </oc:filter-rules>
+ </oc:filter-files>';
+
+ $response = $client->request('REPORT', $this->makeSabrePath($user, $path), $body);
+ $parsedResponse = $client->parseMultistatus($response['body']);
+ return $parsedResponse;
+ }
+
public function makeSabrePath($user, $path) {
return $this->encodePath($this->getDavFilesPath($user) . $path);
}
@@ -463,10 +496,11 @@ trait WebDav {
public function userAddsAFileTo($user, $bytes, $destination){
$filename = "filespecificSize.txt";
$this->createFileSpecificSize($filename, $bytes);
- PHPUnit_Framework_Assert::assertEquals(1, file_exists("data/$filename"));
- $this->userUploadsAFileTo($user, "data/$filename", $destination);
- $this->removeFile("data/", $filename);
- PHPUnit_Framework_Assert::assertEquals(1, file_exists("../../data/$user/files$destination"));
+ PHPUnit_Framework_Assert::assertEquals(1, file_exists("work/$filename"));
+ $this->userUploadsAFileTo($user, "work/$filename", $destination);
+ $this->removeFile("work/", $filename);
+ $expectedElements = new \Behat\Gherkin\Node\TableNode([["$destination"]]);
+ $this->checkElementList($user, $expectedElements);
}
/**
@@ -505,6 +539,7 @@ trait WebDav {
*/
public function userCreatedAFolder($user, $destination) {
try {
+ $destination = '/' . ltrim($destination, '/');
$this->response = $this->makeDavRequest($user, "MKCOL", $destination, []);
} catch (\GuzzleHttp\Exception\ServerException $e) {
// 4xx and 5xx responses cause an exception
@@ -627,7 +662,6 @@ trait WebDav {
$this->asGetsPropertiesOfFolderWith($user, 'entry', $path, $propertiesTable);
$pathETAG[$path] = $this->response['{DAV:}getetag'];
$this->storedETAG[$user]= $pathETAG;
- print_r($this->storedETAG[$user][$path]);
}
/**
@@ -647,4 +681,52 @@ trait WebDav {
$this->asGetsPropertiesOfFolderWith($user, 'entry', $path, $propertiesTable);
PHPUnit_Framework_Assert::assertNotEquals($this->response['{DAV:}getetag'], $this->storedETAG[$user][$path]);
}
+
+ /**
+ * @When Connecting to dav endpoint
+ */
+ public function connectingToDavEndpoint() {
+ try {
+ $this->response = $this->makeDavRequest(null, 'PROPFIND', '', []);
+ } catch (\GuzzleHttp\Exception\ClientException $e) {
+ $this->response = $e->getResponse();
+ }
+ }
+
+ /**
+ * @Then there are no duplicate headers
+ */
+ public function thereAreNoDuplicateHeaders() {
+ $headers = $this->response->getHeaders();
+ foreach ($headers as $headerName => $headerValues) {
+ // if a header has multiple values, they must be different
+ if (count($headerValues) > 1 && count(array_unique($headerValues)) < count($headerValues)) {
+ throw new \Exception('Duplicate header found: ' . $headerName);
+ }
+ }
+ }
+
+ /**
+ * @Then /^user "([^"]*)" in folder "([^"]*)" should have favorited the following elements$/
+ * @param string $user
+ * @param string $folder
+ * @param \Behat\Gherkin\Node\TableNode|null $expectedElements
+ */
+ public function checkFavoritedElements($user, $folder, $expectedElements){
+ $elementList = $this->reportFolder($user,
+ $folder,
+ '<oc:favorite/>',
+ '<oc:favorite>1</oc:favorite>');
+ if ($expectedElements instanceof \Behat\Gherkin\Node\TableNode) {
+ $elementRows = $expectedElements->getRows();
+ $elementsSimplified = $this->simplifyArray($elementRows);
+ foreach($elementsSimplified as $expectedElement) {
+ $webdavPath = "/" . $this->getDavFilesPath($user) . $expectedElement;
+ if (!array_key_exists($webdavPath,$elementList)){
+ PHPUnit_Framework_Assert::fail("$webdavPath" . " is not in report answer");
+ }
+ }
+ }
+ }
+
}
diff --git a/build/integration/features/carddav.feature b/build/integration/features/carddav.feature
index ee9d877085d..4fbe403c7db 100644
--- a/build/integration/features/carddav.feature
+++ b/build/integration/features/carddav.feature
@@ -21,3 +21,33 @@ Feature: carddav
Scenario: Creating a new addressbook
When "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
Then "admin" requests addressbook "admin/MyAddressbook" with statuscode "200"
+
+ Scenario: Accessing ones own contact
+ Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
+ Given "admin" uploads the contact "bjoern.vcf" to the addressbook "MyAddressbook"
+ When Downloading the contact "bjoern.vcf" from addressbook "MyAddressbook" as user "admin"
+ Then The following HTTP headers should be set
+ |Content-Disposition|attachment; filename*=UTF-8''bjoern.vcf; filename="bjoern.vcf"|
+ |Content-Type|text/vcard; charset=utf-8|
+ |Content-Security-Policy|default-src 'none';|
+ |X-Content-Type-Options |nosniff|
+ |X-Download-Options|noopen|
+ |X-Frame-Options|Sameorigin|
+ |X-Permitted-Cross-Domain-Policies|none|
+ |X-Robots-Tag|none|
+ |X-XSS-Protection|1; mode=block|
+
+ Scenario: Exporting the picture of ones own contact
+ Given "admin" creates an addressbook named "MyAddressbook" with statuscode "201"
+ Given "admin" uploads the contact "bjoern.vcf" to the addressbook "MyAddressbook"
+ When Exporting the picture of contact "bjoern.vcf" from addressbook "MyAddressbook" as user "admin"
+ Then The following HTTP headers should be set
+ |Content-Disposition|attachment|
+ |Content-Type|image/jpeg|
+ |Content-Security-Policy|default-src 'none';|
+ |X-Content-Type-Options |nosniff|
+ |X-Download-Options|noopen|
+ |X-Frame-Options|Sameorigin|
+ |X-Permitted-Cross-Domain-Policies|none|
+ |X-Robots-Tag|none|
+ |X-XSS-Protection|1; mode=block|
diff --git a/build/integration/features/favorites.feature b/build/integration/features/favorites.feature
index 5e31e1902f8..9722948dac2 100644
--- a/build/integration/features/favorites.feature
+++ b/build/integration/features/favorites.feature
@@ -19,7 +19,7 @@ Feature: favorite
And user "user0" unfavorites element "/FOLDER"
Then as "user0" gets properties of folder "/FOLDER" with
|{http://owncloud.org/ns}favorite|
- And the single response should contain a property "{http://owncloud.org/ns}favorite" with value ""
+ And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "0"
Scenario: Favorite a file
Given using old dav path
@@ -38,7 +38,7 @@ Feature: favorite
And user "user0" unfavorites element "/textfile0.txt"
Then as "user0" gets properties of file "/textfile0.txt" with
|{http://owncloud.org/ns}favorite|
- And the single response should contain a property "{http://owncloud.org/ns}favorite" with value ""
+ And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "0"
Scenario: Favorite a folder new endpoint
Given using new dav path
@@ -57,7 +57,7 @@ Feature: favorite
And user "user0" unfavorites element "/FOLDER"
Then as "user0" gets properties of folder "/FOLDER" with
|{http://owncloud.org/ns}favorite|
- And the single response should contain a property "{http://owncloud.org/ns}favorite" with value ""
+ And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "0"
Scenario: Favorite a file new endpoint
Given using new dav path
@@ -76,5 +76,61 @@ Feature: favorite
And user "user0" unfavorites element "/textfile0.txt"
Then as "user0" gets properties of file "/textfile0.txt" with
|{http://owncloud.org/ns}favorite|
- And the single response should contain a property "{http://owncloud.org/ns}favorite" with value ""
+ And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "0"
+
+ Scenario: Get favorited elements of a folder
+ Given using old dav path
+ And As an "admin"
+ And user "user0" exists
+ When user "user0" favorites element "/FOLDER"
+ And user "user0" favorites element "/textfile0.txt"
+ And user "user0" favorites element "/textfile1.txt"
+ Then user "user0" in folder "/" should have favorited the following elements
+ | /FOLDER |
+ | /textfile0.txt |
+ | /textfile1.txt |
+
+ Scenario: Get favorited elements of a folder using new path
+ Given using new dav path
+ And As an "admin"
+ And user "user0" exists
+ When user "user0" favorites element "/FOLDER"
+ And user "user0" favorites element "/textfile0.txt"
+ And user "user0" favorites element "/textfile1.txt"
+ Then user "user0" in folder "/" should have favorited the following elements
+ | /FOLDER |
+ | /textfile0.txt |
+ | /textfile1.txt |
+
+ Scenario: Get favorited elements of a subfolder
+ Given using old dav path
+ And As an "admin"
+ And user "user0" exists
+ And user "user0" created a folder "/subfolder"
+ And User "user0" moves file "/textfile0.txt" to "/subfolder/textfile0.txt"
+ And User "user0" moves file "/textfile1.txt" to "/subfolder/textfile1.txt"
+ And User "user0" moves file "/textfile2.txt" to "/subfolder/textfile2.txt"
+ When user "user0" favorites element "/subfolder/textfile0.txt"
+ And user "user0" favorites element "/subfolder/textfile1.txt"
+ And user "user0" favorites element "/subfolder/textfile2.txt"
+ And user "user0" unfavorites element "/subfolder/textfile1.txt"
+ Then user "user0" in folder "/subfolder" should have favorited the following elements
+ | /subfolder/textfile0.txt |
+ | /subfolder/textfile2.txt |
+
+ Scenario: Get favorited elements of a subfolder using new path
+ Given using old dav path
+ And As an "admin"
+ And user "user0" exists
+ And user "user0" created a folder "/subfolder"
+ And User "user0" moves file "/textfile0.txt" to "/subfolder/textfile0.txt"
+ And User "user0" moves file "/textfile1.txt" to "/subfolder/textfile1.txt"
+ And User "user0" moves file "/textfile2.txt" to "/subfolder/textfile2.txt"
+ When user "user0" favorites element "/subfolder/textfile0.txt"
+ And user "user0" favorites element "/subfolder/textfile1.txt"
+ And user "user0" favorites element "/subfolder/textfile2.txt"
+ And user "user0" unfavorites element "/subfolder/textfile1.txt"
+ Then user "user0" in folder "/subfolder" should have favorited the following elements
+ | /subfolder/textfile0.txt |
+ | /subfolder/textfile2.txt |
diff --git a/build/integration/features/tags.feature b/build/integration/features/tags.feature
index d793c0d3c61..0c6cd06f9f9 100644
--- a/build/integration/features/tags.feature
+++ b/build/integration/features/tags.feature
@@ -70,12 +70,13 @@ Feature: tags
When "user0" edits the tag with name "TagWithGroups" and sets its groups to "group1|group3"
Then The response should have a status code "403"
- Scenario: Deleting a normal tag as regular user should work
+ Scenario: Deleting a normal tag as regular user should fail
Given user "user0" exists
Given "admin" creates a "normal" tag with name "MySuperAwesomeTagName"
When "user0" deletes the tag with name "MySuperAwesomeTagName"
- Then The response should have a status code "204"
- And "0" tags should exist for "admin"
+ Then The response should have a status code "403"
+ And The following tags should exist for "admin"
+ |MySuperAwesomeTagName|true|true|
Scenario: Deleting a not user-assignable tag as regular user should fail
Given user "user0" exists
@@ -93,6 +94,12 @@ Feature: tags
And The following tags should exist for "admin"
|MySuperAwesomeTagName|false|true|
+ Scenario: Deleting a normal tag as admin should work
+ Given "admin" creates a "normal" tag with name "MySuperAwesomeTagName"
+ When "admin" deletes the tag with name "MySuperAwesomeTagName"
+ Then The response should have a status code "204"
+ And "0" tags should exist for "admin"
+
Scenario: Deleting a not user-assignable tag as admin should work
Given "admin" creates a "not user-assignable" tag with name "MySuperAwesomeTagName"
When "admin" deletes the tag with name "MySuperAwesomeTagName"
@@ -425,3 +432,12 @@ Feature: tags
Then The response should have a status code "201"
And the user "user0" cannot assign the "not user-assignable" tag with name "TagWithGroups"
+ Scenario: Assign a normal tag to a file
+ Given user "user0" exists
+ And "admin" creates a "normal" tag with name "Etiqueta"
+ And As an "user0"
+ When "user0" adds the tag "Etiqueta" to "/textfile0.txt" owned by "user0"
+ Then The response should have a status code "201"
+ And "textfile0.txt" owned by "user0" has the following tags
+ | Etiqueta |
+
diff --git a/build/integration/features/transfer-ownership.feature b/build/integration/features/transfer-ownership.feature
new file mode 100644
index 00000000000..92361f70900
--- /dev/null
+++ b/build/integration/features/transfer-ownership.feature
@@ -0,0 +1,119 @@
+Feature: transfer-ownership
+
+ Scenario: transfering ownership of a file
+ Given user "user0" exists
+ And user "user1" exists
+ And User "user0" uploads file "data/textfile.txt" to "/somefile.txt"
+ When transfering ownership from "user0" to "user1"
+ And the command was successful
+ And As an "user1"
+ And using received transfer folder of "user1" as dav path
+ Then Downloaded content when downloading file "/somefile.txt" with range "bytes=0-6" should be "This is"
+
+ Scenario: transfering ownership of a folder
+ Given user "user0" exists
+ And user "user1" exists
+ And User "user0" created a folder "/test"
+ And User "user0" uploads file "data/textfile.txt" to "/test/somefile.txt"
+ When transfering ownership from "user0" to "user1"
+ And the command was successful
+ And As an "user1"
+ And using received transfer folder of "user1" as dav path
+ Then Downloaded content when downloading file "/test/somefile.txt" with range "bytes=0-6" should be "This is"
+
+ Scenario: transfering ownership of file shares
+ Given user "user0" exists
+ And user "user1" exists
+ And user "user2" exists
+ And User "user0" uploads file "data/textfile.txt" to "/somefile.txt"
+ And file "/somefile.txt" of user "user0" is shared with user "user2" with permissions 19
+ When transfering ownership from "user0" to "user1"
+ And the command was successful
+ And As an "user2"
+ Then Downloaded content when downloading file "/somefile.txt" with range "bytes=0-6" should be "This is"
+
+ Scenario: transfering ownership of folder shared with third user
+ Given user "user0" exists
+ And user "user1" exists
+ And user "user2" exists
+ And User "user0" created a folder "/test"
+ And User "user0" uploads file "data/textfile.txt" to "/test/somefile.txt"
+ And folder "/test" of user "user0" is shared with user "user2" with permissions 31
+ When transfering ownership from "user0" to "user1"
+ And the command was successful
+ And As an "user2"
+ Then Downloaded content when downloading file "/test/somefile.txt" with range "bytes=0-6" should be "This is"
+
+ Scenario: transfering ownership of folder shared with transfer recipient
+ Given user "user0" exists
+ And user "user1" exists
+ And User "user0" created a folder "/test"
+ And User "user0" uploads file "data/textfile.txt" to "/test/somefile.txt"
+ And folder "/test" of user "user0" is shared with user "user1" with permissions 31
+ When transfering ownership from "user0" to "user1"
+ And the command was successful
+ And As an "user1"
+ Then as "user1" the folder "/test" does not exist
+ And using received transfer folder of "user1" as dav path
+ And Downloaded content when downloading file "/test/somefile.txt" with range "bytes=0-6" should be "This is"
+
+ Scenario: transfering ownership of folder doubly shared with third user
+ Given group "group1" exists
+ And user "user0" exists
+ And user "user1" exists
+ And user "user2" exists
+ And user "user2" belongs to group "group1"
+ And User "user0" created a folder "/test"
+ And User "user0" uploads file "data/textfile.txt" to "/test/somefile.txt"
+ And folder "/test" of user "user0" is shared with group "group1" with permissions 31
+ And folder "/test" of user "user0" is shared with user "user2" with permissions 31
+ When transfering ownership from "user0" to "user1"
+ And the command was successful
+ And As an "user2"
+ Then Downloaded content when downloading file "/test/somefile.txt" with range "bytes=0-6" should be "This is"
+
+ Scenario: transfering ownership does not transfer received shares
+ Given user "user0" exists
+ And user "user1" exists
+ And user "user2" exists
+ And User "user2" created a folder "/test"
+ And folder "/test" of user "user2" is shared with user "user0" with permissions 31
+ When transfering ownership from "user0" to "user1"
+ And the command was successful
+ And As an "user1"
+ And using received transfer folder of "user1" as dav path
+ Then as "user1" the folder "/test" does not exist
+
+ @local_storage
+ Scenario: transfering ownership does not transfer external storage
+ Given user "user0" exists
+ And user "user1" exists
+ When transfering ownership from "user0" to "user1"
+ And the command was successful
+ And As an "user1"
+ And using received transfer folder of "user1" as dav path
+ Then as "user1" the folder "/local_storage" does not exist
+
+ Scenario: transfering ownership does not fail with shared trashed files
+ Given user "user0" exists
+ And user "user1" exists
+ And user "user2" exists
+ And User "user0" created a folder "/sub"
+ And User "user0" created a folder "/sub/test"
+ And folder "/sub/test" of user "user0" is shared with user "user2" with permissions 31
+ And User "user0" deletes folder "/sub"
+ When transfering ownership from "user0" to "user1"
+ Then the command was successful
+
+ Scenario: transfering ownership fails with invalid source user
+ Given user "user0" exists
+ When transfering ownership from "invalid_user" to "user0"
+ Then the command error output contains the text "Unknown source user"
+ And the command failed with exit code 1
+
+ Scenario: transfering ownership fails with invalid target user
+ Given user "user0" exists
+ When transfering ownership from "user0" to "invalid_user"
+ Then the command error output contains the text "Unknown target user"
+ And the command failed with exit code 1
+
diff --git a/build/integration/features/webdav-related.feature b/build/integration/features/webdav-related.feature
index d90eb038e0b..c3aa6145527 100644
--- a/build/integration/features/webdav-related.feature
+++ b/build/integration/features/webdav-related.feature
@@ -2,6 +2,22 @@ Feature: webdav-related
Background:
Given using api version "1"
+ Scenario: Unauthenticated call old dav path
+ Given using old dav path
+ When connecting to dav endpoint
+ Then the HTTP status code should be "401"
+ And there are no duplicate headers
+ And The following headers should be set
+ |WWW-Authenticate|Basic realm="Nextcloud"|
+
+ Scenario: Unauthenticated call new dav path
+ Given using new dav path
+ When connecting to dav endpoint
+ Then the HTTP status code should be "401"
+ And there are no duplicate headers
+ And The following headers should be set
+ |WWW-Authenticate|Basic realm="Nextcloud"|
+
Scenario: Moving a file
Given using old dav path
And As an "admin"
@@ -427,3 +443,39 @@ Feature: webdav-related
And User "user0" uploads file with content "copytest" to "/copytest.txt"
When User "user0" copies file "/copytest.txt" to "/testcopypermissionsNotAllowed/copytest.txt"
Then the HTTP status code should be "403"
+
+ Scenario: Uploading a file as recipient with limited permissions
+ Given using new dav path
+ And As an "admin"
+ And user "user0" exists
+ And user "user1" exists
+ And user "user0" has a quota of "10 MB"
+ And user "user1" has a quota of "10 MB"
+ And As an "user1"
+ And user "user1" created a folder "/testfolder"
+ And as "user1" creating a share with
+ | path | testfolder |
+ | shareType | 0 |
+ | permissions | 23 |
+ | shareWith | user0 |
+ And As an "user0"
+ And User "user0" uploads file "data/textfile.txt" to "/testfolder/asdf.txt"
+ And As an "user1"
+ When User "user1" deletes file "/testfolder/asdf.txt"
+ Then the HTTP status code should be "204"
+
+ Scenario: Creating a folder
+ Given using old dav path
+ And user "user0" exists
+ And user "user0" created a folder "/test_folder"
+ When as "user0" gets properties of folder "/test_folder" with
+ |{DAV:}resourcetype|
+ Then the single response should contain a property "{DAV:}resourcetype" with value "{DAV:}collection"
+
+ Scenario: Creating a folder with special chars
+ Given using old dav path
+ And user "user0" exists
+ And user "user0" created a folder "/test_folder:5"
+ When as "user0" gets properties of folder "/test_folder:5" with
+ |{DAV:}resourcetype|
+ Then the single response should contain a property "{DAV:}resourcetype" with value "{DAV:}collection"
diff --git a/build/integration/ldap_features/ldap-ocs.feature b/build/integration/ldap_features/ldap-ocs.feature
new file mode 100644
index 00000000000..a9ad0478702
--- /dev/null
+++ b/build/integration/ldap_features/ldap-ocs.feature
@@ -0,0 +1,70 @@
+Feature: LDAP
+ Background:
+ Given using api version "2"
+
+ Scenario: Creating an new, empty configuration
+ Given As an "admin"
+ When sending "POST" to "/apps/user_ldap/api/v1/config"
+ Then the OCS status code should be "200"
+ And the HTTP status code should be "200"
+ And the response should contain a tag "configID"
+
+ Scenario: Delete a non-existing configuration
+ Given As an "admin"
+ When sending "DELETE" to "/apps/user_ldap/api/v1/config/s666"
+ Then the OCS status code should be "404"
+ And the HTTP status code should be "404"
+
+ Scenario: Create and delete a configuration
+ Given As an "admin"
+ And creating an LDAP configuration at "/apps/user_ldap/api/v1/config"
+ When deleting the LDAP configuration
+ Then the OCS status code should be "200"
+ And the HTTP status code should be "200"
+
+ Scenario: Create and modify a configuration
+ Given As an "admin"
+ And creating an LDAP configuration at "/apps/user_ldap/api/v1/config"
+ When setting the LDAP configuration to
+ | configData[ldapHost] | ldaps://my.ldap.server |
+ Then the OCS status code should be "200"
+ And the HTTP status code should be "200"
+
+ Scenario: Modifying a non-existing configuration
+ Given As an "admin"
+ When sending "PUT" to "/apps/user_ldap/api/v1/config/s666" with
+ | configData[ldapHost] | ldaps://my.ldap.server |
+ Then the OCS status code should be "404"
+ And the HTTP status code should be "404"
+
+ Scenario: Modifying an existing configuration with malformed configData
+ Given As an "admin"
+ And creating an LDAP configuration at "/apps/user_ldap/api/v1/config"
+ When setting the LDAP configuration to
+ | configData | ldapHost=ldaps://my.ldap.server |
+ Then the OCS status code should be "400"
+ And the HTTP status code should be "400"
+
+ Scenario: create, modify and get a configuration
+ Given As an "admin"
+ And creating an LDAP configuration at "/apps/user_ldap/api/v1/config"
+ And setting the LDAP configuration to
+ | configData[ldapHost] | ldaps://my.ldap.server |
+ | configData[ldapLoginFilter] | (&(\|(objectclass=inetOrgPerson))(uid=%uid)) |
+ | configData[ldapAgentPassword] | psst,secret |
+ When getting the LDAP configuration with showPassword "0"
+ Then the OCS status code should be "200"
+ And the HTTP status code should be "200"
+ And the response should contain a tag "ldapHost" with value "ldaps://my.ldap.server"
+ And the response should contain a tag "ldapLoginFilter" with value "(&(|(objectclass=inetOrgPerson))(uid=%uid))"
+ And the response should contain a tag "ldapAgentPassword" with value "***"
+
+ Scenario: receiving password in plain text
+ Given As an "admin"
+ And creating an LDAP configuration at "/apps/user_ldap/api/v1/config"
+ And setting the LDAP configuration to
+ | configData[ldapAgentPassword] | psst,secret |
+ When getting the LDAP configuration with showPassword "1"
+ Then the OCS status code should be "200"
+ And the HTTP status code should be "200"
+ And the response should contain a tag "ldapAgentPassword" with value "psst,secret"
diff --git a/build/integration/run.sh b/build/integration/run.sh
index 145415fd079..83600d8323e 100755
--- a/build/integration/run.sh
+++ b/build/integration/run.sh
@@ -1,22 +1,15 @@
#!/usr/bin/env bash
-COMPOSER=$(which composer)
-
+OC_PATH=../../
+OCC=${OC_PATH}occ
SCENARIO_TO_RUN=$1
HIDE_OC_LOGS=$2
-if [ -x "$COMPOSER" ]; then
- echo "Using composer executable $COMPOSER"
-else
- echo "Could not find composer executable" >&2
- exit 1
-fi
-
-INSTALLED=$(../../occ status | grep installed: | cut -d " " -f 5)
+INSTALLED=$($OCC status | grep installed: | cut -d " " -f 5)
if [ "$INSTALLED" == "true" ]; then
# Disable bruteforce protection because the integration tests do trigger them
- ../../occ config:system:set auth.bruteforce.protection.enabled --value false --type bool
+ $OCC config:system:set auth.bruteforce.protection.enabled --value false --type bool
else
if [ "$SCENARIO_TO_RUN" != "setup_features/setup.feature" ]; then
echo "Nextcloud instance needs to be installed" >&2
@@ -46,33 +39,36 @@ export TEST_SERVER_URL="http://localhost:$PORT/ocs/"
export TEST_SERVER_FED_URL="http://localhost:$PORT_FED/ocs/"
if [ "$INSTALLED" == "true" ]; then
+
#Enable external storage app
- ../../occ app:enable files_external
+ $OCC app:enable files_external
mkdir -p work/local_storage
- OUTPUT_CREATE_STORAGE=`../../occ files_external:create local_storage local null::null -c datadir=./build/integration/work/local_storage`
+ OUTPUT_CREATE_STORAGE=`$OCC files_external:create local_storage local null::null -c datadir=./build/integration/work/local_storage`
ID_STORAGE=`echo $OUTPUT_CREATE_STORAGE | awk {'print $5'}`
- ../../occ files_external:option $ID_STORAGE enable_sharing true
+ $OCC files_external:option $ID_STORAGE enable_sharing true
+
fi
-vendor/bin/behat -f junit -f pretty $SCENARIO_TO_RUN
+vendor/bin/behat --strict -f junit -f pretty $SCENARIO_TO_RUN
RESULT=$?
kill $PHPPID
kill $PHPPID_FED
if [ "$INSTALLED" -eq "true" ]; then
- ../../occ files_external:delete -y $ID_STORAGE
+
+ $OCC files_external:delete -y $ID_STORAGE
#Disable external storage app
- ../../occ app:disable files_external
+ $OCC app:disable files_external
fi
if [ -z $HIDE_OC_LOGS ]; then
- tail "../../data/nextcloud.log"
+ tail "${OC_PATH}/data/nextcloud.log"
fi
+echo "runsh: Exit code: $RESULT"
exit $RESULT
-
diff --git a/build/package.json b/build/package.json
index 6058d6785e0..67e999aaf31 100644
--- a/build/package.json
+++ b/build/package.json
@@ -17,7 +17,8 @@
"karma-coverage": "*",
"karma-phantomjs-launcher": "*",
"phantomjs-prebuilt": "*",
- "jasmine-core": "~2.5.2"
+ "jasmine-core": "~2.5.2",
+ "node-sass": "~4.1.1"
},
"engine": "node >= 0.8"
}
diff --git a/config/config.sample.php b/config/config.sample.php
index 8b714a1763c..3d1829e17e6 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -74,8 +74,10 @@ $CONFIG = array(
/**
- * Where user files are stored; this defaults to ``data/`` in the Nextcloud
- * directory. The SQLite database is also stored here, when you use SQLite.
+ * Where user files are stored. The SQLite database is also stored here, when
+ * you use SQLite.
+ *
+ * Default to ``data/`` in the Nextcloud directory.
*/
'datadirectory' => '/var/www/nextcloud/data',
@@ -93,7 +95,8 @@ $CONFIG = array(
* - sqlite (SQLite3)
* - mysql (MySQL/MariaDB)
* - pgsql (PostgreSQL)
- * - oci (Oracle)
+ *
+ * Defaults to ``sqlite``
*/
'dbtype' => 'sqlite',
@@ -126,6 +129,8 @@ $CONFIG = array(
/**
* Prefix for the Nextcloud tables in the database.
+ *
+ * Default to ``oc_``
*/
'dbtableprefix' => '',
@@ -134,6 +139,8 @@ $CONFIG = array(
* Indicates whether the Nextcloud instance was installed successfully; ``true``
* indicates a successful installation, and ``false`` indicates an unsuccessful
* installation.
+ *
+ * Defaults to ``false``
*/
'installed' => false,
@@ -151,6 +158,8 @@ $CONFIG = array(
* French. It overrides automatic language detection on public pages like login
* or shared items. User's language preferences configured under "personal ->
* language" override this setting after they have logged in.
+ *
+ * Defaults to ``en``
*/
'default_language' => 'en',
@@ -160,6 +169,8 @@ $CONFIG = array(
* gallery. You can use a comma-separated list of app names, so if the first
* app is not enabled for a user then Nextcloud will try the second one, and so
* on. If no enabled apps are found it defaults to the Files app.
+ *
+ * Defaults to ``files``
*/
'defaultapp' => 'files',
@@ -173,6 +184,8 @@ $CONFIG = array(
* ``true`` enables avatars, or user profile photos. These appear on the User
* page, on user's Personal pages and are used by some apps (contacts, mail,
* etc). ``false`` disables them.
+ *
+ * Defaults to ``true``
*/
'enable_avatars' => true,
@@ -183,21 +196,25 @@ $CONFIG = array(
'allow_user_to_change_display_name' => true,
/**
- * Lifetime of the remember login cookie, which is set when the user clicks the
- * ``remember`` checkbox on the login screen. The default is 15 days, expressed
- * in seconds.
+ * Lifetime of the remember login cookie, which is set when the user clicks
+ * the ``remember`` checkbox on the login screen.
+ *
+ * Defaults to ``60*60*24*15`` seconds (15 days)
*/
'remember_login_cookie_lifetime' => 60*60*24*15,
/**
- * The lifetime of a session after inactivity; the default is 24 hours,
- * expressed in seconds.
+ * The lifetime of a session after inactivity.
+ *
+ * Defaults to ``60*60*24`` seconds (24 hours)
*/
'session_lifetime' => 60 * 60 * 24,
/**
* Enable or disable session keep-alive when a user is logged in to the Web UI.
* Enabling this sends a "heartbeat" to the server to keep it from timing out.
+ *
+ * Defaults to ``true``
*/
'session_keepalive' => true,
@@ -205,6 +222,8 @@ $CONFIG = array(
* Enforce token authentication for clients, which blocks requests using the user
* password for enhanced security. Users need to generate tokens in personal settings
* which can be used as passwords on their clients.
+ *
+ * Defaults to ``false``
*/
'token_auth_enforced' => false,
@@ -212,6 +231,8 @@ $CONFIG = array(
* Whether the bruteforce protection shipped with Nextcloud should be enabled or not.
*
* Disabling this is discouraged for security reasons.
+ *
+ * Defaults to ``true``
*/
'auth.bruteforce.protection.enabled' => true,
@@ -219,6 +240,8 @@ $CONFIG = array(
* The directory where the skeleton files are located. These files will be
* copied to the data directory of new users. Leave empty to not copy any
* skeleton files.
+ *
+ * Defaults to ``core/skeleton`` in the Nextcloud directory.
*/
'skeletondirectory' => '/path/to/nextcloud/core/skeleton',
@@ -259,11 +282,15 @@ $CONFIG = array(
/**
* FROM address that overrides the built-in ``sharing-noreply`` and
* ``lostpassword-noreply`` FROM addresses.
+ *
+ * Defaults to different from addresses depending on the feature.
*/
'mail_from_address' => 'nextcloud',
/**
* Enable SMTP class debugging.
+ *
+ * Defaults to ``false``
*/
'mail_smtpdebug' => false,
@@ -282,19 +309,25 @@ $CONFIG = array(
*
* For ``qmail`` the binary is /var/qmail/bin/sendmail, and it must be installed
* on your Unix system.
+ *
+ * Defaults to ``php``
*/
-'mail_smtpmode' => 'sendmail',
+'mail_smtpmode' => 'php',
/**
* This depends on ``mail_smtpmode``. Specify the IP address of your mail
* server host. This may contain multiple hosts separated by a semi-colon. If
* you need to specify the port number append it to the IP address separated by
* a colon, like this: ``127.0.0.1:24``.
+ *
+ * Defaults to ``127.0.0.1``
*/
'mail_smtphost' => '127.0.0.1',
/**
* This depends on ``mail_smtpmode``. Specify the port for sending mail.
+ *
+ * Defaults to ``25``
*/
'mail_smtpport' => 25,
@@ -302,36 +335,48 @@ $CONFIG = array(
* This depends on ``mail_smtpmode``. This sets the SMTP server timeout, in
* seconds. You may need to increase this if you are running an anti-malware or
* spam scanner.
+ *
+ * Defaults to ``10`` seconds
*/
'mail_smtptimeout' => 10,
/**
* This depends on ``mail_smtpmode``. Specify when you are using ``ssl`` or
* ``tls``, or leave empty for no encryption.
+ *
+ * Defaults to ``''`` (empty string)
*/
'mail_smtpsecure' => '',
/**
* This depends on ``mail_smtpmode``. Change this to ``true`` if your mail
* server requires authentication.
+ *
+ * Defaults to ``false``
*/
'mail_smtpauth' => false,
/**
* This depends on ``mail_smtpmode``. If SMTP authentication is required, choose
- * the authentication type as ``LOGIN`` (default) or ``PLAIN``.
+ * the authentication type as ``LOGIN`` or ``PLAIN``.
+ *
+ * Defaults to ``LOGIN``
*/
'mail_smtpauthtype' => 'LOGIN',
/**
* This depends on ``mail_smtpauth``. Specify the username for authenticating to
* the SMTP server.
+ *
+ * Defaults to ``''`` (empty string)
*/
'mail_smtpname' => '',
/**
* This depends on ``mail_smtpauth``. Specify the password for authenticating to
* the SMTP server.
+ *
+ * Default to ``''`` (empty string)
*/
'mail_smtppassword' => '',
@@ -371,6 +416,8 @@ $CONFIG = array(
* expression for the remote IP address. For example, defining a range of IP
* addresses starting with ``10.0.0.`` and ending with 1 to 3:
* ``^10\.0\.0\.[1-3]$``
+ *
+ * Defaults to ``''`` (empty string)
*/
'overwritecondaddr' => '',
@@ -379,6 +426,8 @@ $CONFIG = array(
* are generated within Nextcloud using any kind of command line tools (cron or
* occ). The value should contain the full base URL:
* ``https://www.example.com/nextcloud``
+ *
+ * Defaults to ``''`` (empty string)
*/
'overwrite.cli.url' => '',
@@ -404,6 +453,8 @@ $CONFIG = array(
*
* - `mod_rewrite` is installed
* - `mod_env` is installed
+ *
+ * Defaults to ``''`` (empty string)
*/
'htaccess.RewriteBase' => '/',
@@ -420,12 +471,16 @@ $CONFIG = array(
/**
* The URL of your proxy server, for example ``proxy.example.com:8081``.
+ *
+ * Defaults to ``''`` (empty string)
*/
'proxy' => '',
/**
* The optional authentication for the proxy to use to connect to the internet.
* The format is: ``username:password``.
+ *
+ * Defaults to ``''`` (empty string)
*/
'proxyuserpwd' => '',
@@ -466,6 +521,8 @@ $CONFIG = array(
* delete when exceeds D2 days
* * ``disabled``
* trash bin auto clean disabled, files and folders will be kept forever
+ *
+ * Defaults to ``auto``
*/
'trashbin_retention_obligation' => 'auto',
@@ -505,6 +562,8 @@ $CONFIG = array(
* keep versions for at least D1 days and delete when exceeds D2 days
* * ``disabled``
* versions auto clean disabled, versions will be kept forever
+ *
+ * Defaults to ``auto``
*/
'versions_retention_obligation' => 'auto',
@@ -519,17 +578,23 @@ $CONFIG = array(
* Checks an app before install whether it uses private APIs instead of the
* proper public APIs. If this is set to true it will only allow to install or
* enable apps that pass this check.
+ *
+ * Defaults to ``false``
*/
'appcodechecker' => true,
/**
* Check if Nextcloud is up-to-date and shows a notification if a new version is
* available.
+ *
+ * Defaults to ``true``
*/
'updatechecker' => true,
/**
* URL that Nextcloud should use to look for updates
+ *
+ * Defaults to ``https://updates.nextcloud.com/updater_server/``
*/
'updater.server.url' => 'https://updates.nextcloud.com/updater_server/',
@@ -538,7 +603,7 @@ $CONFIG = array(
*
* Supported values:
* - ``daily``
- * - ``beta`
+ * - ``beta``
* - ``stable``
* - ``production``
*/
@@ -546,6 +611,8 @@ $CONFIG = array(
/**
* Is Nextcloud connected to the Internet or running in a closed network?
+ *
+ * Defaults to ``true``
*/
'has_internet_connection' => true,
@@ -559,6 +626,8 @@ $CONFIG = array(
* Allows Nextcloud to verify a working .well-known URL redirects. This is done
* by attempting to make a request from JS to
* https://your-domain.com/.well-known/caldav/
+ *
+ * Defaults to ``true``
*/
'check_for_working_wellknown_setup' => true,
@@ -568,6 +637,8 @@ $CONFIG = array(
* If it is not, then any options controlled by ``.htaccess``, such as large
* file uploads, will not work. It also runs checks on the ``data/`` directory,
* which verifies that it can't be accessed directly through the Web server.
+ *
+ * Defaults to ``true``
*/
'check_for_working_htaccess' => true,
@@ -578,6 +649,8 @@ $CONFIG = array(
* all options via the Web interface. Furthermore, when updating Nextcloud
* it is required to make the configuration file writable again for the update
* process.
+ *
+ * Defaults to ``false``
*/
'config_is_read_only' => false,
@@ -591,11 +664,14 @@ $CONFIG = array(
* If syslogging is desired, set this parameter to ``syslog``.
* Setting this parameter to ``errorlog`` will use the PHP error_log function
* for logging.
+ *
+ * Defaults to ``file``
*/
'log_type' => 'file',
/**
* Log file path for the Nextcloud logging type.
+ *
* Defaults to ``[datadirectory]/nextcloud.log``
*/
'logfile' => '/var/log/nextcloud.log',
@@ -603,6 +679,8 @@ $CONFIG = array(
/**
* Loglevel to start logging at. Valid values are: 0 = Debug, 1 = Info, 2 =
* Warning, 3 = Error, and 4 = Fatal. The default value is Warning.
+ *
+ * Defaults to ``2``
*/
'loglevel' => 2,
@@ -637,12 +715,17 @@ $CONFIG = array(
/**
* This uses PHP.date formatting; see http://php.net/manual/en/function.date.php
+ *
+ * Defaults to ISO 8601 ``2005-08-15T15:52:01+00:00`` - see \DateTime::ATOM
+ * (https://secure.php.net/manual/en/class.datetime.php#datetime.constants.atom)
*/
'logdateformat' => 'F d, Y H:i:s',
/**
- * The default timezone for logfiles is UTC. You may change this; see
+ * The timezone for logfiles. You may change this; see
* http://php.net/manual/en/timezones.php
+ *
+ * Defaults to ``UTC``
*/
'logtimezone' => 'Europe/Berlin',
@@ -654,6 +737,8 @@ $CONFIG = array(
/**
* Log successful cron runs.
+ *
+ * Defaults to ``true``
*/
'cron_log' => true,
@@ -663,6 +748,8 @@ $CONFIG = array(
* = 100 * 1024 * 1024 bytes). A new logfile is created with a new name when the
* old logfile reaches your limit. If a rotated log file is already present, it
* will be overwritten.
+ *
+ * Defaults to ``0`` (no rotation)
*/
'log_rotate_size' => false,
@@ -676,6 +763,11 @@ $CONFIG = array(
/**
* This section is for configuring the download links for Nextcloud clients, as
* seen in the first-run wizard and on Personal pages.
+ *
+ * Defaults to
+ * * Desktop client: ``https://nextcloud.com/install/#install-clients``
+ * * Android client: ``https://play.google.com/store/apps/details?id=com.nextcloud.client``
+ * * iOS client : ``https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8``
*/
'customclient_desktop' =>
'https://nextcloud.com/install/#install-clients',
@@ -692,6 +784,8 @@ $CONFIG = array(
/**
* When enabled, admins may install apps from the Nextcloud app store.
+ *
+ * Defaults to ``true``
*/
'appstoreenabled' => true,
@@ -733,16 +827,22 @@ $CONFIG = array(
*
* Valid values are ``true``, to enable previews, or
* ``false``, to disable previews
+ *
+ * Defaults to ``true``
*/
'enable_previews' => true,
/**
* The maximum width, in pixels, of a preview. A value of ``null`` means there
* is no limit.
+ *
+ * Defaults to ``2048``
*/
'preview_max_x' => 2048,
/**
* The maximum height, in pixels, of a preview. A value of ``null`` means there
* is no limit.
+ *
+ * Defaults to ``2048``
*/
'preview_max_y' => 2048,
/**
@@ -750,26 +850,30 @@ $CONFIG = array(
* preview system generates blurry previews, you might want to consider setting
* a maximum scale factor. By default, pictures are upscaled to 10 times the
* original size. A value of ``1`` or ``null`` disables scaling.
+ *
+ * Defaults to ``2``
*/
'preview_max_scale_factor' => 10,
/**
* max file size for generating image previews with imagegd (default behaviour)
- * If the image is bigger, it'll try other preview generators,
- * but will most likely show the default mimetype icon
+ * If the image is bigger, it'll try other preview generators, but will most
+ * likely show the default mimetype icon. Set to -1 for no limit.
*
- * Value represents the maximum filesize in megabytes
- * Default is 50
- * Set to -1 for no limit
+ * Defaults to ``50`` megabytes
*/
'preview_max_filesize_image' => 50,
/**
* custom path for LibreOffice/OpenOffice binary
+ *
+ * Defaults to ``''`` (empty string)
*/
'preview_libreoffice_path' => '/usr/bin/libreoffice',
/**
* Use this if LibreOffice/OpenOffice requires additional arguments.
+ *
+ * Defaults to ``''`` (empty string)
*/
'preview_office_cl_parameters' =>
' --headless --nologo --nofirststartwizard --invisible --norestore '.
@@ -778,17 +882,6 @@ $CONFIG = array(
/**
* Only register providers that have been explicitly enabled
*
- * The following providers are enabled by default:
- *
- * - OC\Preview\PNG
- * - OC\Preview\JPEG
- * - OC\Preview\GIF
- * - OC\Preview\BMP
- * - OC\Preview\XBitmap
- * - OC\Preview\MarkDown
- * - OC\Preview\MP3
- * - OC\Preview\TXT
- *
* The following providers are disabled by default due to performance or privacy
* concerns:
*
@@ -818,6 +911,17 @@ $CONFIG = array(
* - OC\Preview\MSOffice2007
* - OC\Preview\OpenDocument
* - OC\Preview\StarOffice
+ *
+ * Defaults to the following providers:
+ *
+ * - OC\Preview\BMP
+ * - OC\Preview\GIF
+ * - OC\Preview\JPEG
+ * - OC\Preview\MarkDown
+ * - OC\Preview\MP3
+ * - OC\Preview\PNG
+ * - OC\Preview\TXT
+ * - OC\Preview\XBitmap
*/
'enabledPreviewProviders' => array(
'OC\Preview\PNG',
@@ -841,6 +945,8 @@ $CONFIG = array(
* existence and marks them as ready to be cleaned up. The number is always
* minutes. Setting it to 0 disables the feature.
* See command line (occ) methods ``ldap:show-remnants`` and ``user:delete``
+ *
+ * Defaults to ``51`` minutes
*/
'ldapUserCleanupInterval' => 51,
@@ -854,6 +960,8 @@ $CONFIG = array(
* Replaces the default Comments Manager Factory. This can be utilized if an
* own or 3rdParty CommentsManager should be used that – for instance – uses the
* filesystem instead of the database to keep the comments.
+ *
+ * Defaults to ``\OC\Comments\ManagerFactory``
*/
'comments.managerFactory' => '\OC\Comments\ManagerFactory',
@@ -861,6 +969,8 @@ $CONFIG = array(
* Replaces the default System Tags Manager Factory. This can be utilized if an
* own or 3rdParty SystemTagsManager should be used that – for instance – uses the
* filesystem instead of the database to keep the comments.
+ *
+ * Defaults to ``\OC\SystemTag\ManagerFactory``
*/
'systemtags.managerFactory' => '\OC\SystemTag\ManagerFactory',
@@ -878,12 +988,16 @@ $CONFIG = array(
* doing some maintenance work, you need to set the value of the maintenance
* parameter to true. Please keep in mind that users who are already logged-in
* are kicked out of Nextcloud instantly.
+ *
+ * Defaults to ``false``
*/
'maintenance' => false,
/**
* When set to ``true``, the Nextcloud instance will be unavailable for all
* users who are not in the ``admin`` group.
+ *
+ * Defaults to ``false``
*/
'singleuser' => false,
@@ -894,6 +1008,8 @@ $CONFIG = array(
/**
* Extra SSL options to be used for configuration.
+ *
+ * Defaults to an empty array.
*/
'openssl' => array(
'config' => '/absolute/location/of/openssl.cnf',
@@ -909,7 +1025,6 @@ $CONFIG = array(
*
* Available cache backends:
*
- * * ``\OC\Memcache\APC`` Alternative PHP Cache backend
* * ``\OC\Memcache\APCu`` APC user backend
* * ``\OC\Memcache\ArrayCache`` In-memory array-based backend (not recommended)
* * ``\OC\Memcache\Memcached`` Memcached backend
@@ -928,6 +1043,8 @@ $CONFIG = array(
* Memory caching backend for locally stored data
*
* * Used for host-specific data, e.g. file paths
+ *
+ * Defaults to ``none``
*/
'memcache.local' => '\OC\Memcache\APCu',
@@ -936,6 +1053,8 @@ $CONFIG = array(
*
* * Used for installation-specific data, e.g. database caching
* * If unset, defaults to the value of memcache.local
+ *
+ * Defaults to ``none``
*/
'memcache.distributed' => '\OC\Memcache\Memcached',
@@ -995,6 +1114,8 @@ $CONFIG = array(
* ``$user`` is the current user. When specified, the format will change to
* ``$cache_path/$user`` where ``$cache_path`` is the configured cache directory
* and ``$user`` is the user.
+ *
+ * Defaults to ``''`` (empty string)
*/
'cache_path' => '',
@@ -1003,8 +1124,10 @@ $CONFIG = array(
* garbage collection (in seconds). Increase this value if users have
* issues uploading very large files via the Nextcloud Client as upload isn't
* completed within one day.
+ *
+ * Defaults to ``60*60*24`` (1 day)
*/
-'cache_chunk_gc_ttl' => 86400, // 60*60*24 = 1 day
+'cache_chunk_gc_ttl' => 60*60*24,
/**
* Using Object Store with Nextcloud
@@ -1066,6 +1189,8 @@ $CONFIG = array(
* Replaces the default Share Provider Factory. This can be utilized if
* own or 3rdParty Share Providers be used that – for instance – uses the
* filesystem instead of the database to keep the share information.
+ *
+ * Defaults to ``\OC\Share20\ProviderFactory``
*/
'sharing.managerFactory' => '\OC\Share20\ProviderFactory',
@@ -1126,6 +1251,11 @@ $CONFIG = array(
* - mysql (MySQL)
* - pgsql (PostgreSQL)
* - oci (Oracle)
+ *
+ * Defaults to the following databases:
+ * - sqlite (SQLite3)
+ * - mysql (MySQL)
+ * - pgsql (PostgreSQL)
*/
'supportedDatabases' => array(
'sqlite',
@@ -1154,17 +1284,23 @@ $CONFIG = array(
* Blacklist a specific file or files and disallow the upload of files
* with this name. ``.htaccess`` is blocked by default.
* WARNING: USE THIS ONLY IF YOU KNOW WHAT YOU ARE DOING.
+ *
+ * Defaults to ``array('.htaccess')``
*/
'blacklisted_files' => array('.htaccess'),
/**
* Define a default folder for shared files and folders other than root.
+ *
+ * Defaults to ``/``
*/
'share_folder' => '/',
/**
* If you are applying a theme to Nextcloud, enter the name of the theme here.
* The default location for themes is ``nextcloud/themes/``.
+ *
+ * Defaults to the theming app which is shipped since Nextcloud 9
*/
'theme' => '',
@@ -1183,12 +1319,16 @@ $CONFIG = array(
* When changing this, note that older unsupported versions of the Nextcloud desktop
* client may not function as expected, and could lead to permanent data loss for
* clients or other unexpected results.
+ *
+ * Defaults to ``2.0.0``
*/
'minimum.supported.desktop.version' => '2.0.0',
/**
* EXPERIMENTAL: option whether to include external storage in quota
* calculation, defaults to false.
+ *
+ * Defaults to ``false``
*/
'quota_include_external_storage' => false,
@@ -1203,6 +1343,8 @@ $CONFIG = array(
*
* 1 -> Check each file or folder at most once per request, recommended for
* general use if outside changes might happen.
+ *
+ * Defaults to ``0``
*/
'filesystem_check_changes' => 0,
@@ -1211,18 +1353,24 @@ $CONFIG = array(
* same storage as the upload target. Setting this to false will store the part
* files in the root of the users folder which might be required to work with certain
* external storage setups that have limited rename capabilities.
+ *
+ * Defaults to ``true``
*/
'part_file_in_storage' => true,
/**
* Where ``mount.json`` file should be stored, defaults to ``data/mount.json``
* in the Nextcloud directory.
+ *
+ * Defaults to ``data/mount.json`` in the Nextcloud directory.
*/
'mount_file' => '/var/www/nextcloud/data/mount.json',
/**
* When ``true``, prevent Nextcloud from changing the cache due to changes in
* the filesystem for all storage.
+ *
+ * Defaults to ``false``
*/
'filesystem_cache_readonly' => false,
@@ -1237,6 +1385,7 @@ $CONFIG = array(
*
* If you configure these also consider setting `forwarded_for_headers` which
* otherwise defaults to `HTTP_X_FORWARDED_FOR` (the `X-Forwarded-For` header).
+ * Defaults to an empty array.
*/
'trusted_proxies' => array('203.0.113.45', '198.51.100.128'),
@@ -1248,7 +1397,7 @@ $CONFIG = array(
* If set incorrectly, a client can spoof their IP address as visible to
* Nextcloud, bypassing access controls and making logs useless!
*
- * Defaults to 'HTTP_X_FORWARED_FOR' if unset
+ * Defaults to ``'HTTP_X_FORWARED_FOR'``
*/
'forwarded_for_headers' => array('HTTP_X_FORWARDED', 'HTTP_FORWARDED_FOR'),
@@ -1256,8 +1405,10 @@ $CONFIG = array(
* max file size for animating gifs on public-sharing-site.
* If the gif is bigger, it'll show a static preview
*
- * Value represents the maximum filesize in megabytes. Default is ``10``. Set to
- * ``-1`` for no limit.
+ * Value represents the maximum filesize in megabytes. Set to ``-1`` for
+ * no limit.
+ *
+ * Defaults to ``10`` megabytes
*/
'max_filesize_animated_gifs_public_sharing' => 10,
@@ -1271,6 +1422,8 @@ $CONFIG = array(
* be caused by concurrent operations. Mainly relevant for
* very large installations with many users working with
* shared files.
+ *
+ * Defaults to ``true``
*/
'filelocking.enabled' => true,
@@ -1279,15 +1432,18 @@ $CONFIG = array(
*
* Any lock older than this will be automatically cleaned up.
*
- * If not set this defaults to either 1 hour or the php max_execution_time, whichever is higher.
+ * Defaults to ``60*60`` seconds (1 hour) or the php
+ * max_execution_time, whichever is higher.
*/
-'filelocking.ttl' => 3600,
+'filelocking.ttl' => 60*60,
/**
* Memory caching backend for file locking
*
* Because most memcache backends can clean values without warning using redis
* is highly recommended to *avoid data loss*.
+ *
+ * Defaults to ``none``
*/
'memcache.locking' => '\\OC\\Memcache\\Redis',
@@ -1301,6 +1457,8 @@ $CONFIG = array(
*
* Only enable this for local development and not in production environments
* This will disable the minifier and outputs some additional debug information
+ *
+ * Defaults to ``false``
*/
'debug' => false,
@@ -1314,6 +1472,8 @@ $CONFIG = array(
*
* Updating/Deleting this value can make connected clients stall until
* the user has resolved conflicts.
+ *
+ * Defaults to ``''`` (empty string)
*/
'data-fingerprint' => '',
diff --git a/core/Application.php b/core/Application.php
index 545b5fe420b..6621964c289 100644
--- a/core/Application.php
+++ b/core/Application.php
@@ -30,10 +30,13 @@
namespace OC\Core;
-use OC\AppFramework\Utility\SimpleContainer;
+use OC\Core\Controller\OCJSController;
use OC\Security\IdentityProof\Manager;
+use OC\Server;
use OCP\AppFramework\App;
-use OCP\Files\IAppData;
+use OC\Core\Controller\CssController;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IRequest;
use OCP\Util;
/**
@@ -57,5 +60,32 @@ class Application extends App {
\OC::$server->getCrypto()
);
});
+ $container->registerService(CssController::class, function () use ($container) {
+ return new CssController(
+ $container->query('appName'),
+ $container->query(IRequest::class),
+ \OC::$server->getAppDataDir('css'),
+ $container->query(ITimeFactory::class)
+ );
+ });
+ $container->registerService(OCJSController::class, function () use ($container) {
+ /** @var Server $server */
+ $server = $container->getServer();
+ return new OCJSController(
+ $container->query('appName'),
+ $server->getRequest(),
+ $server->getL10N('core'),
+ // This is required for the theming to overwrite the `OC_Defaults`, see
+ // https://github.com/nextcloud/server/issues/3148
+ $server->getThemingDefaults(),
+ $server->getAppManager(),
+ $server->getSession(),
+ $server->getUserSession(),
+ $server->getConfig(),
+ $server->getGroupManager(),
+ $server->getIniWrapper(),
+ $server->getURLGenerator()
+ );
+ });
}
}
diff --git a/core/Command/Config/ListConfigs.php b/core/Command/Config/ListConfigs.php
index 2737bc2cea4..94b493c9244 100644
--- a/core/Command/Config/ListConfigs.php
+++ b/core/Command/Config/ListConfigs.php
@@ -89,14 +89,14 @@ class ListConfigs extends Base {
'apps' => [],
];
foreach ($apps as $appName) {
- $configs['apps'][$appName] = $this->appConfig->getValues($appName, false);
+ $configs['apps'][$appName] = $this->getAppConfigs($appName, $noSensitiveValues);
}
break;
default:
$configs = [
'apps' => [
- $app => $this->appConfig->getValues($app, false),
+ $app => $this->getAppConfigs($app, $noSensitiveValues),
],
];
}
@@ -130,6 +130,21 @@ class ListConfigs extends Base {
}
/**
+ * Get the app configs
+ *
+ * @param string $app
+ * @param bool $noSensitiveValues
+ * @return array
+ */
+ protected function getAppConfigs($app, $noSensitiveValues) {
+ if ($noSensitiveValues) {
+ return $this->appConfig->getFilteredValues($app, false);
+ } else {
+ return $this->appConfig->getValues($app, false);
+ }
+ }
+
+ /**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
diff --git a/core/Command/Integrity/CheckApp.php b/core/Command/Integrity/CheckApp.php
index 0774cca6582..3e4d8b9cba7 100644
--- a/core/Command/Integrity/CheckApp.php
+++ b/core/Command/Integrity/CheckApp.php
@@ -66,6 +66,9 @@ class CheckApp extends Base {
$path = strval($input->getOption('path'));
$result = $this->checker->verifyAppSignature($appid, $path);
$this->writeArrayInOutputFormat($input, $output, $result);
+ if (count($result)>0){
+ return 1;
+ }
}
}
diff --git a/core/Command/Integrity/CheckCore.php b/core/Command/Integrity/CheckCore.php
index 5aaf9c2dec8..a3426ce9345 100644
--- a/core/Command/Integrity/CheckCore.php
+++ b/core/Command/Integrity/CheckCore.php
@@ -60,5 +60,8 @@ class CheckCore extends Base {
protected function execute(InputInterface $input, OutputInterface $output) {
$result = $this->checker->verifyCoreSignature();
$this->writeArrayInOutputFormat($input, $output, $result);
+ if (count($result)>0){
+ return 1;
+ }
}
}
diff --git a/core/Command/Integrity/SignApp.php b/core/Command/Integrity/SignApp.php
index 3bc79eb0114..26d2791475b 100644
--- a/core/Command/Integrity/SignApp.php
+++ b/core/Command/Integrity/SignApp.php
@@ -101,8 +101,13 @@ class SignApp extends Command {
$x509 = new X509();
$x509->loadX509($keyBundle);
$x509->setPrivateKey($rsa);
- $this->checker->writeAppSignature($path, $x509, $rsa);
-
- $output->writeln('Successfully signed "'.$path.'"');
+ try {
+ $this->checker->writeAppSignature($path, $x509, $rsa);
+ $output->writeln('Successfully signed "'.$path.'"');
+ } catch (\Exception $e){
+ $output->writeln('Error: ' . $e->getMessage());
+ return 1;
+ }
+ return 0;
}
}
diff --git a/core/Command/Integrity/SignCore.php b/core/Command/Integrity/SignCore.php
index 440c3da3b23..8f951204a58 100644
--- a/core/Command/Integrity/SignCore.php
+++ b/core/Command/Integrity/SignCore.php
@@ -23,12 +23,10 @@
namespace OC\Core\Command\Integrity;
use OC\IntegrityCheck\Checker;
-use OC\IntegrityCheck\Helpers\EnvironmentHelper;
use OC\IntegrityCheck\Helpers\FileAccessHelper;
use phpseclib\Crypt\RSA;
use phpseclib\File\X509;
use Symfony\Component\Console\Command\Command;
-use OCP\IConfig;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
@@ -94,8 +92,14 @@ class SignCore extends Command {
$x509 = new X509();
$x509->loadX509($keyBundle);
$x509->setPrivateKey($rsa);
- $this->checker->writeCoreSignature($x509, $rsa, $path);
- $output->writeln('Successfully signed "core"');
+ try {
+ $this->checker->writeCoreSignature($x509, $rsa, $path);
+ $output->writeln('Successfully signed "core"');
+ } catch (\Exception $e){
+ $output->writeln('Error: ' . $e->getMessage());
+ return 1;
+ }
+ return 0;
}
}
diff --git a/core/Controller/CssController.php b/core/Controller/CssController.php
new file mode 100644
index 00000000000..1206c95a5b8
--- /dev/null
+++ b/core/Controller/CssController.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ (skjnldsv@protonmail.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\Core\Controller;
+
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\NotFoundResponse;
+use OCP\AppFramework\Http\FileDisplayResponse;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\Files\IAppData;
+use OCP\Files\NotFoundException;
+use OCP\IRequest;
+
+class CssController extends Controller {
+
+ /** @var IAppData */
+ protected $appData;
+
+ /** @var ITimeFactory */
+ protected $timeFactory;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param IAppData $appData
+ * @param ITimeFactory $timeFactory
+ */
+ public function __construct($appName, IRequest $request, IAppData $appData, ITimeFactory $timeFactory) {
+ parent::__construct($appName, $request);
+
+ $this->appData = $appData;
+ $this->timeFactory = $timeFactory;
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @param string $fileName css filename with extension
+ * @param string $appName css folder name
+ * @return FileDisplayResponse|NotFoundResponse
+ */
+ public function getCss($fileName, $appName) {
+ try {
+ $folder = $this->appData->getFolder($appName);
+ $cssFile = $folder->getFile($fileName);
+ } catch(NotFoundException $e) {
+ return new NotFoundResponse();
+ }
+
+ $response = new FileDisplayResponse($cssFile, Http::STATUS_OK, ['Content-Type' => 'text/css']);
+ $response->cacheFor(86400);
+ $expires = new \DateTime();
+ $expires->setTimestamp($this->timeFactory->getTime());
+ $expires->add(new \DateInterval('PT24H'));
+ $response->addHeader('Expires', $expires->format(\DateTime::RFC1123));
+ $response->addHeader('Pragma', 'cache');
+ return $response;
+ }
+}
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index 92ea3014ba2..c0e7be280b8 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -160,7 +160,6 @@ class LoginController extends Controller {
}
$parameters['alt_login'] = OC_App::getAlternativeLogIns();
- $parameters['rememberLoginAllowed'] = OC_Util::rememberLoginAllowed();
$parameters['rememberLoginState'] = !empty($remember_login) ? $remember_login : 0;
if (!is_null($user) && $user !== '') {
@@ -171,6 +170,8 @@ class LoginController extends Controller {
$parameters['user_autofocus'] = true;
}
+ \OC_Util::addStyle('guest');
+
return new TemplateResponse(
$this->appName, 'login', $parameters, 'guest'
);
@@ -206,8 +207,8 @@ 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());
- $this->throttler->sleepDelay($this->request->getRemoteAddress());
+ $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress(), 'login');
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'login');
// 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
@@ -235,7 +236,7 @@ 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());
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'login');
}
$this->session->set('loginMessages', [
['invalidpassword'], []
@@ -300,19 +301,15 @@ class LoginController extends Controller {
* @return DataResponse
*/
public function confirmPassword($password) {
- $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress());
- $this->throttler->sleepDelay($this->request->getRemoteAddress());
-
- $user = $this->userSession->getUser();
- if (!$user instanceof IUser) {
- return new DataResponse([], Http::STATUS_UNAUTHORIZED);
- }
+ $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress(), 'sudo');
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'sudo');
- $loginResult = $this->userManager->checkPassword($user->getUID(), $password);
+ $loginName = $this->userSession->getLoginName();
+ $loginResult = $this->userManager->checkPassword($loginName, $password);
if ($loginResult === false) {
- $this->throttler->registerAttempt('sudo', $this->request->getRemoteAddress(), ['user' => $user->getUID()]);
+ $this->throttler->registerAttempt('sudo', $this->request->getRemoteAddress(), ['user' => $loginName]);
if ($currentDelay === 0) {
- $this->throttler->sleepDelay($this->request->getRemoteAddress());
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'sudo');
}
return new DataResponse([], Http::STATUS_FORBIDDEN);
diff --git a/core/Controller/LostController.php b/core/Controller/LostController.php
index 01c107e8326..8a8a50343ed 100644
--- a/core/Controller/LostController.php
+++ b/core/Controller/LostController.php
@@ -30,6 +30,7 @@
namespace OC\Core\Controller;
+use OCA\Encryption\Exceptions\PrivateKeyMissingException;
use \OCP\AppFramework\Controller;
use \OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Utility\ITimeFactory;
@@ -154,7 +155,7 @@ class LostController extends Controller {
* @param string $userId
* @throws \Exception
*/
- private function checkPasswordResetToken($token, $userId) {
+ protected function checkPasswordResetToken($token, $userId) {
$user = $this->userManager->get($userId);
if($user === null) {
throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is invalid'));
@@ -201,6 +202,7 @@ class LostController extends Controller {
/**
* @PublicPage
+ * @BruteForceProtection passwordResetEmail
*
* @param string $user
* @return array
@@ -233,6 +235,8 @@ class LostController extends Controller {
$this->checkPasswordResetToken($token, $userId);
$user = $this->userManager->get($userId);
+ \OC_Hook::emit('\OC\Core\LostPassword\Controller\LostController', 'pre_passwordReset', array('uid' => $userId, 'password' => $password));
+
if (!$user->setPassword($password)) {
throw new \Exception();
}
diff --git a/core/Controller/OCSController.php b/core/Controller/OCSController.php
index c59b0d7ad3f..1deb5e958bd 100644
--- a/core/Controller/OCSController.php
+++ b/core/Controller/OCSController.php
@@ -106,20 +106,6 @@ class OCSController extends \OCP\AppFramework\OCSController {
}
/**
- * @NoAdminRequired
- * @return DataResponse
- */
- public function getCurrentUser() {
- $userObject = $this->userSession->getUser();
- $data = [
- 'id' => $userObject->getUID(),
- 'display-name' => $userObject->getDisplayName(),
- 'email' => $userObject->getEMailAddress(),
- ];
- return new DataResponse($data);
- }
-
- /**
* @PublicPage
*
* @param string $login
@@ -128,7 +114,7 @@ class OCSController extends \OCP\AppFramework\OCSController {
*/
public function personCheck($login = '', $password = '') {
if ($login !== '' && $password !== '') {
- $this->throttler->sleepDelay($this->request->getRemoteAddress());
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'login');
if ($this->userManager->checkPassword($login, $password)) {
return new DataResponse([
'person' => [
diff --git a/core/Controller/SetupController.php b/core/Controller/SetupController.php
index bb7c8c4969d..87508423cd3 100644
--- a/core/Controller/SetupController.php
+++ b/core/Controller/SetupController.php
@@ -92,6 +92,7 @@ class SetupController {
\OC_Util::addVendorScript('strengthify/jquery.strengthify');
\OC_Util::addVendorStyle('strengthify/strengthify');
+ \OC_Util::addStyle('guest');
\OC_Util::addScript('setup');
\OC_Template::printGuestPage('', 'installation', $parameters);
}
diff --git a/core/Controller/TwoFactorChallengeController.php b/core/Controller/TwoFactorChallengeController.php
index b2614138123..fd4811d3ff6 100644
--- a/core/Controller/TwoFactorChallengeController.php
+++ b/core/Controller/TwoFactorChallengeController.php
@@ -29,6 +29,7 @@ use OC_Util;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\TemplateResponse;
+use OCP\Authentication\TwoFactorAuth\TwoFactorException;
use OCP\IRequest;
use OCP\ISession;
use OCP\IURLGenerator;
@@ -115,19 +116,23 @@ class TwoFactorChallengeController extends Controller {
$backupProvider = null;
}
+ $errorMessage = '';
+ $error = false;
if ($this->session->exists('two_factor_auth_error')) {
$this->session->remove('two_factor_auth_error');
$error = true;
- } else {
- $error = false;
+ $errorMessage = $this->session->get("two_factor_auth_error_message");
+ $this->session->remove('two_factor_auth_error_message');
}
$tmpl = $provider->getTemplate($user);
$tmpl->assign('redirect_url', $redirect_url);
$data = [
'error' => $error,
+ 'error_message' => $errorMessage,
'provider' => $provider,
'backupProvider' => $backupProvider,
'logout_attribute' => $this->getLogoutAttribute(),
+ 'redirect_url' => $redirect_url,
'template' => $tmpl->fetchPage(),
];
return new TemplateResponse($this->appName, 'twofactorshowchallenge', $data, 'guest');
@@ -150,11 +155,20 @@ class TwoFactorChallengeController extends Controller {
return new RedirectResponse($this->urlGenerator->linkToRoute('core.TwoFactorChallenge.selectChallenge'));
}
- if ($this->twoFactorManager->verifyChallenge($challengeProviderId, $user, $challenge)) {
- if (!is_null($redirect_url)) {
- return new RedirectResponse($this->urlGenerator->getAbsoluteURL(urldecode($redirect_url)));
+ try {
+ if ($this->twoFactorManager->verifyChallenge($challengeProviderId, $user, $challenge)) {
+ if (!is_null($redirect_url)) {
+ return new RedirectResponse($this->urlGenerator->getAbsoluteURL(urldecode($redirect_url)));
+ }
+ return new RedirectResponse(OC_Util::getDefaultPageUrl());
}
- return new RedirectResponse(OC_Util::getDefaultPageUrl());
+ } catch (TwoFactorException $e) {
+ /*
+ * The 2FA App threw an TwoFactorException. Now we display more
+ * information to the user. The exception text is stored in the
+ * session to be used in showChallenge()
+ */
+ $this->session->set('two_factor_auth_error_message', $e->getMessage());
}
$this->session->set('two_factor_auth_error', true);
diff --git a/core/css/apps.css b/core/css/apps.css
deleted file mode 100644
index e709f9d901f..00000000000
--- a/core/css/apps.css
+++ /dev/null
@@ -1,700 +0,0 @@
-/* APP STYLING -------------------------------------------------------------- */
-
-
-#app {
- height: 100%;
- width: 100%;
-}
-#app * {
- box-sizing: border-box;
-}
-
-
-
-
-
-/* APP-NAVIGATION ------------------------------------------------------------*/
-
-
-/* Navigation: folder like structure */
-#app-navigation {
- width: 250px;
- height: 100%;
- float: left;
- box-sizing: border-box;
- background-color: #fff;
- padding-bottom: 44px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- border-right: 1px solid #eee;
-}
-#app-navigation > ul {
- position: relative;
- height: 100%;
- width: inherit;
- overflow: auto;
- box-sizing: border-box;
-}
-#app-navigation li {
- position: relative;
- width: 100%;
- box-sizing: border-box;
-}
-
-#app-navigation.without-app-settings {
- padding-bottom: 0;
-}
-
-#app-navigation .active.with-menu > a,
-#app-navigation .with-counter > a {
- padding-right: 50px;
-}
-
-#app-navigation .active.with-menu.with-counter > a {
- padding-right: 90px;
-}
-
-#app-navigation .with-icon a,
-#app-navigation .app-navigation-entry-loading a {
- padding-left: 44px;
- background-size: 16px 16px;
- background-position: 14px center;
- background-repeat: no-repeat;
-}
-
-#app-navigation li > a {
- display: block;
- width: 100%;
- line-height: 44px;
- min-height: 44px;
- padding: 0 12px;
- overflow: hidden;
- box-sizing: border-box;
- white-space: nowrap;
- text-overflow: ellipsis;
- color: #000;
- opacity: .57;
-}
-#app-navigation .active,
-#app-navigation .active a,
-#app-navigation li:hover > a,
-#app-navigation li:focus > a,
-#app-navigation a:focus,
-#app-navigation .selected,
-#app-navigation .selected a {
- opacity: 1;
-}
-
-#app-navigation .collapse {
- display: none; /* hide collapse button initially */
-}
-#app-navigation .collapsible > .collapse {
- position: absolute;
- height: 44px;
- width: 44px;
- margin: 0;
- padding: 0;
- background: none; background-image: url('../img/actions/triangle-s.svg?v=1');
- background-size: 16px; background-repeat: no-repeat; background-position: center;
- border: none;
- border-radius: 0;
- outline: none !important;
- box-shadow: none;
-}
-#app-navigation .collapsible:hover > a,
-#app-navigation .collapsible:focus > a {
- background-image: none;
-}
-#app-navigation .collapsible:hover > .collapse,
-#app-navigation .collapsible:focus > .collapse {
- display: block;
-}
-
-#app-navigation .collapsible .collapse {
- -webkit-transform: rotate(-90deg);
- -ms-transform:rotate(-90deg);
- transform: rotate(-90deg);
-}
-#app-navigation .collapsible.open .collapse {
- -webkit-transform: rotate(0);
- -ms-transform:rotate(0);
- transform: rotate(0);
-}
-
-/* Second level nesting for lists */
-#app-navigation > ul ul {
- display: none;
-}
-#app-navigation > ul ul li > a {
- padding-left: 32px;
-}
-#app-navigation > .with-icon ul li > a,
-#app-navigation > .with-icon ul li.app-navigation-entry-loading > a {
- padding-left: 68px;
- background-position: 44px center;
-}
-
-#app-navigation .collapsible.open {
- background-image: linear-gradient(top, rgb(238,238,238) 0%, rgb(245,245,245) 100%);
- background-image: -webkit-linear-gradient(top, rgb(238,238,238) 0%, rgb(245,245,245) 100%);
- background-image: -ms-linear-gradient(top, rgb(238,238,238) 0%, rgb(245,245,245) 100%);
-}
-
-#app-navigation > ul .collapsible.open:hover,
-#app-navigation > ul .collapsible.open:focus {
- box-shadow: inset 0 0 3px #ddd;
-}
-
-#app-navigation > ul .collapsible.open ul {
- display: block;
-}
-
-
-/* Deleted entries with undo button */
-#app-navigation .app-navigation-entry-deleted {
- display: inline-block;
- height: 44px;
- width: 100%;
-}
-
- #app-navigation .app-navigation-entry-deleted-description {
- padding-left: 12px;
- position: relative;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- display: inline-block;
- width: calc(100% - 49px);
- line-height: 44px;
- float: left;
- }
-
- #app-navigation .app-navigation-entry-deleted-button {
- margin: 0;
- height: 44px;
- width: 44px;
- line-height: 44px;
- border: 0;
- display: inline-block;
- background-color: transparent;
- opacity: .5;
- }
-
- #app-navigation .app-navigation-entry-deleted-button:hover,
- #app-navigation .app-navigation-entry-deleted-button:focus {
- opacity: 1;
- }
-
-/* counter and actions, legacy code */
-#app-navigation .utils {
- position: absolute;
- padding: 7px 7px 0 0;
- right: 0;
- top: 0;
- bottom: 0;
- font-size: 12px;
-}
- #app-navigation .utils button,
- #app-navigation .utils .counter {
- width: 44px;
- height: 44px;
- padding-top: 12px;
- }
-
-
-/* drag and drop */
-#app-navigation .drag-and-drop {
- -webkit-transition: padding-bottom 500ms ease 0s;
- transition: padding-bottom 500ms ease 0s;
- padding-bottom: 40px;
-}
-#app-navigation .error {
- color: #dd1144;
-}
-
-#app-navigation .app-navigation-separator {
- border-bottom: 1px solid #ddd;
-}
-
-/**
- * App navigation utils, buttons and counters for drop down menu
- */
-#app-navigation .app-navigation-entry-utils {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 105;
-}
-
- #app-navigation .app-navigation-entry-utils ul {
- display: block !important;
- }
-
-
- #app-navigation .app-navigation-entry-utils li {
- float: left;
- width: 44px !important;
- height: 44px;
- line-height: 44px;
- }
-
- #app-navigation .active > .app-navigation-entry-utils li {
- display: inline-block;
- }
-
- #app-navigation .app-navigation-entry-utils button {
- height: 38px;
- width: 38px;
- line-height: 38px;
- float: left;
- }
-
- #app-navigation .app-navigation-entry-utils-menu-button {
- display: none;
- }
- #app-navigation .app-navigation-entry-utils-menu-button button {
- border: 0;
- opacity: .5;
- background-color: transparent;
- background-repeat: no-repeat;
- background-position: center;
- background-image: url('../img/actions/more.svg?v=1');
- }
-
- #app-navigation .app-navigation-entry-utils-menu-button:hover button,
- #app-navigation .app-navigation-entry-utils-menu-button:focus button {
- background-color: transparent;
- opacity: 1;
- }
-
- #app-navigation .app-navigation-entry-utils-counter {
- overflow: hidden;
- text-overflow: hidden;
- text-align: right;
- font-size: 9pt;
- width: 38px;
- line-height: 44px;
- padding: 0 10px;
- }
-
- #app-navigation .app-navigation-entry-utils ul,
- #app-navigation .app-navigation-entry-menu ul {
- list-style-type: none;
- }
-
-/* menu bubble / popover */
-.bubble,
-#app-navigation .app-navigation-entry-menu {
- position: absolute;
- background-color: #fff;
- color: #333;
- border-radius: 3px;
- border-top-right-radius: 0;
- z-index: 110;
- margin: 5px;
- margin-top: -5px;
- right: 0;
- -webkit-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
- -moz-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
- -ms-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
- -o-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
- filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
-}
-
-.ie .bubble,
-.ie #app-navigation .app-navigation-entry-menu,
-.ie .bubble:after,
-.ie #app-navigation .app-navigation-entry-menu:after,
-.edge .bubble,
-.edge #app-navigation .app-navigation-entry-menu,
-.edge .bubble:after,
-.edge #app-navigation .app-navigation-entry-menu:after {
- border: 1px solid #eee;
-}
-/* miraculous border arrow stuff */
-.bubble:after,
-#app-navigation .app-navigation-entry-menu:after {
- bottom: 100%;
- right: 6px; /* change this to adjust the arrow position */
- border: solid transparent;
- content: " ";
- height: 0;
- width: 0;
- position: absolute;
- pointer-events: none;
-}
-.bubble:after,
-#app-navigation .app-navigation-entry-menu:after {
- border-color: rgba(238, 238, 238, 0);
- border-bottom-color: #fff;
- border-width: 10px;
-}
-.bubble .action {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)" !important;
- filter: alpha(opacity=50) !important;
- opacity: .5 !important;
-}
-.bubble .action:hover,
-.bubble .action:focus,
-.bubble .action.active {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)" !important;
- filter: alpha(opacity=100) !important;
- opacity: 1 !important;
-}
-
-#app-navigation .app-navigation-entry-menu {
- display: none;
-}
-
-#app-navigation .app-navigation-entry-menu.open {
- display: block;
-}
-
- /* list of options for an entry */
- #app-navigation .app-navigation-entry-menu ul {
- display: block !important;
- }
-
- #app-navigation .app-navigation-entry-menu li {
- float: left;
- width: 38px !important;
- }
-
- #app-navigation .app-navigation-entry-menu li button {
- float: right;
- width: 36px !important;
- height: 36px;
- line-height: 36px;
- border: 0;
- opacity: .5;
- background-color: transparent;
- }
-
- #app-navigation .app-navigation-entry-menu li button:hover,
- #app-navigation .app-navigation-entry-menu li button:focus {
- opacity: 1;
- background-color: transparent;
- }
-
-/* editing an entry */
-#app-navigation .app-navigation-entry-edit {
- padding-left: 5px;
- padding-right: 5px;
- display: inline-block;
- height: 39px;
- width: 100%;
-}
-
- #app-navigation .app-navigation-entry-edit input {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- width: calc(100% - 36px);
- padding: 5px;
- margin-right: 0;
- height: 38px;
- float: left;
- border: 1px solid rgba(190,190,190,.9);
- }
-
- #app-navigation .app-navigation-entry-edit button,
- #app-navigation .app-navigation-entry-edit input[type="submit"] {
- width: 36px;
- height: 38px;
- float: left;
- }
-
- #app-navigation .app-navigation-entry-edit .icon-checkmark {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
- border-left: 0;
- margin-right: 0;
- }
-
-
-/* APP-CONTENT ---------------------------------------------------------------*/
-
-
-/* Part where the content will be loaded into */
-#app-content {
- position: relative;
- height: 100%;
- overflow-y: auto;
-}
-
-#app-content-wrapper {
- min-width: 100%;
- min-height: 100%;
-}
-
-/* APP-SIDEBAR ----------------------------------------------------------------*/
-
-/*
- Sidebar: a sidebar to be used within #app-content
- have it as first element within app-content in order to shrink other
- sibling containers properly. Compare Files app for example.
-*/
-#app-sidebar {
- position: fixed;
- top: 45px;
- right: 0;
- left: auto;
- bottom: 0;
- width: 27%;
- min-width: 300px;
- display: block;
- background: #fff;
- border-left: 1px solid #eee;
- -webkit-transition: margin-right 300ms;
- transition: margin-right 300ms;
- overflow-x: hidden;
- overflow-y: auto;
- visibility: visible;
- z-index: 500;
-}
-
-#app-content.with-app-sidebar {
- margin-right: 27%;
-}
-
-#app-sidebar.disappear {
- visibility: hidden;
-}
-
-/* APP-SETTINGS ---------------------------------------------------------------*/
-
-/* settings area */
-#app-settings {
- position: fixed;
- width: 250px; /* change to 100% when layout positions are absolute */
- bottom: 0;
- z-index: 140;
-}
-#app-settings.open #app-settings-content,
-#app-settings.opened #app-settings-content {
- display: block;
-}
-#app-settings-content {
- display: none;
- padding: 10px;
- background-color: #fff;
- /* restrict height of settings and make scrollable */
- max-height: 300px;
- overflow-y: auto;
-}
-#app-settings-content,
-#app-settings-header {
- border-right: 1px solid #eee;
- width: 250px;
- box-sizing: border-box;
-}
-
-/* display input fields at full width */
-#app-settings-content input[type='text'] {
- width: 93%;
-}
-
-.settings-button {
- display: block;
- height: 44px;
- width: 100%;
- padding: 0;
- margin: 0;
- background-color: #fff;
- background-image: url('../img/actions/settings.svg?v=1');
- background-position: 14px center;
- background-repeat: no-repeat;
- box-shadow: none;
- border: 0;
- border-radius: 0;
- text-align: left;
- padding-left: 42px;
- font-weight: normal;
-}
-.settings-button:hover,
-.settings-button:focus {
- background-color: #fff;
-}
-.settings-button.opened:hover,
-.settings-button.opened:focus {
- background-color: #fff;
-}
-
-/* buttons */
-button.loading {
- background-image: url('../img/loading.gif');
- background-position: right 10px center; background-repeat: no-repeat;
- background-size: 16px;
- padding-right: 30px;
-}
-
-/* general styles for the content area */
-.section {
- display: block;
- padding: 30px;
- color: #555;
- margin-bottom: 24px;
-}
-.section.hidden {
- display: none !important;
-}
-.sub-section {
- position: relative;
- margin-top: 10px;
- margin-left: 27px;
- margin-bottom: 10px;
-}
-/* no top border for first settings item */
-#app-content > .section:first-child {
- border-top: none;
-}
-
-/* heading styles */
-h2 {
- font-size: 20px;
- font-weight: 300;
- margin-bottom: 12px;
- line-height: 140%;
-}
-h3 {
- font-size: 15px;
- font-weight: 300;
- margin: 12px 0;
-}
-
-/* slight position correction of checkboxes and radio buttons */
-.section input[type="checkbox"],
-.section input[type="radio"] {
- vertical-align: -2px;
- margin-right: 4px;
-}
-.appear {
- opacity: 1;
- -webkit-transition: opacity 500ms ease 0s;
- -moz-transition: opacity 500ms ease 0s;
- -ms-transition: opacity 500ms ease 0s;
- -o-transition: opacity 500ms ease 0s;
- transition: opacity 500ms ease 0s;
-}
-.appear.transparent {
- opacity: 0;
-}
-
-
-/* do not use italic typeface style, instead lighter color */
-em {
- font-style: normal;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
-}
-
-/* generic dropdown style */
-.dropdown {
- background:#eee;
- border-bottom-left-radius: 5px;
- border-bottom-right-radius: 5px;
- box-shadow:0 1px 1px #777;
- display:block;
- margin-right: 0;
- position:absolute;
- right:0;
- width:420px;
- z-index:500;
- padding:16px;
-}
-
-/* generic tab styles */
-.tabHeaders {
- display: inline-block;
- margin: 15px;
-}
-.tabHeaders .tabHeader {
- float: left;
- padding: 5px;
- cursor: pointer;
-}
-.tabHeaders .tabHeader, .tabHeaders .tabHeader a {
- color: #888;
- margin-bottom: 1px;
-}
-.tabHeaders .tabHeader.selected {
- font-weight: 600;
-}
-.tabHeaders .tabHeader.selected,
-.tabHeaders .tabHeader:hover {
- border-bottom: 1px solid #333;
-}
-.tabHeaders .tabHeader.selected,
-.tabHeaders .tabHeader.selected a,
-.tabHeaders .tabHeader:hover,
-.tabHeaders .tabHeader:hover a {
- margin-bottom: 0px;
- color: #000;
-}
-.tabsContainer {
- clear: left;
-}
-.tabsContainer .tab {
- padding: 0 15px 15px;
-}
-
-/* popover menu styles (use together with "bubble" class) */
-.popovermenu .menuitem,
-.popovermenu .menuitem>span {
- cursor: pointer;
- vertical-align: middle;
-}
-
-.popovermenu .menuitem {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- filter: alpha(opacity=50);
- opacity: .5;
-}
-
-.popovermenu .menuitem:hover,
-.popovermenu .menuitem:focus,
-.popovermenu .menuitem.active {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- filter: alpha(opacity=100);
- opacity: 1;
-}
-
-.popovermenu .menuitem img {
- padding: initial;
-}
-
-.popovermenu a.menuitem,
-.popovermenu label.menuitem,
-.popovermenu .menuitem {
- padding: 10px !important;
- width: auto;
-}
-
-.popovermenu.hidden {
- display: none;
-}
-
-.popovermenu .menuitem {
- display: flex !important;
- line-height: 30px;
- color: #000;
- align-items: center;
-}
-
-.popovermenu .menuitem .icon,
-.popovermenu .menuitem .no-icon {
- display: inline-block;
- width: 16px;
- height: 16px;
- margin-right: 10px;
- vertical-align: middle;
-}
-
-.popovermenu .menuitem {
- opacity: 0.5;
-}
-
-.popovermenu li:hover .menuitem {
- opacity: 1;
-}
diff --git a/core/css/apps.scss b/core/css/apps.scss
new file mode 100644
index 00000000000..f1ddc95e092
--- /dev/null
+++ b/core/css/apps.scss
@@ -0,0 +1,688 @@
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, pgys <info@pexlab.space>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Stefan Weil <sw@weilnetz.de>
+ * @copyright Copyright (c) 2016, Roeland Jago Douma <rullzer@owncloud.com>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2015, Thomas Müller <thomas.mueller@tmit.eu>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+/* HEADING STYLING ---------------------------------------------------------- */
+
+h2 {
+ font-size: 20px;
+ font-weight: 300;
+ margin-bottom: 12px;
+ line-height: 140%;
+}
+h3 {
+ font-size: 15px;
+ font-weight: 300;
+ margin: 12px 0;
+}
+/* do not use italic typeface style, instead lighter color */
+em {
+ font-style: normal;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
+ opacity: .5;
+}
+
+/* APP STYLING -------------------------------------------------------------- */
+
+#app {
+ height: 100%;
+ width: 100%;
+ * {
+ box-sizing: border-box;
+ }
+}
+
+/* APP-NAVIGATION ------------------------------------------------------------*/
+
+/* Navigation: folder like structure */
+
+#app-navigation {
+ width: 250px;
+ height: 100%;
+ float: left;
+ box-sizing: border-box;
+ background-color: #fff;
+ padding-bottom: 44px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ border-right: 1px solid #eee;
+ display: flex;
+ flex-direction: column;
+ > ul {
+ position: relative;
+ height: 100%;
+ width: inherit;
+ overflow: auto;
+ box-sizing: border-box;
+ > li {
+ &:focus,
+ &:hover,
+ &.active,
+ a.selected {
+ &,
+ > a {
+ opacity: 1;
+ box-shadow: inset 2px 0 #0082c9;
+ }
+ }
+ }
+ }
+ li {
+ position: relative;
+ width: 100%;
+ box-sizing: border-box;
+ }
+ &.without-app-settings {
+ padding-bottom: 0;
+ }
+ .active.with-menu > a,
+ .with-counter > a {
+ padding-right: 50px;
+ }
+ .active.with-menu.with-counter > a {
+ padding-right: 90px;
+ }
+ .with-icon a,
+ .app-navigation-entry-loading a {
+ padding-left: 44px;
+ background-size: 16px 16px;
+ background-position: 14px center;
+ background-repeat: no-repeat;
+ }
+ li > a {
+ display: block;
+ width: 100%;
+ line-height: 44px;
+ min-height: 44px;
+ padding: 0 12px;
+ overflow: hidden;
+ box-sizing: border-box;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ color: #000;
+ opacity: .57;
+ }
+ li > a:first-child img {
+ margin-bottom: -3px;
+ margin-right: 11px;
+ width: 16px;
+ margin-left: 2px;
+ }
+ .collapse {
+ display: none;
+ /* hide collapse button initially */
+ }
+ .collapsible {
+ > .collapse {
+ position: absolute;
+ height: 44px;
+ width: 44px;
+ margin: 0;
+ padding: 0;
+ background: none;
+ background-image: url('../img/actions/triangle-s.svg?v=1');
+ background-size: 16px;
+ background-repeat: no-repeat;
+ background-position: center;
+ border: none;
+ border-radius: 0;
+ outline: none !important;
+ box-shadow: none;
+ }
+ &:hover > a,
+ &:focus > a {
+ background-image: none;
+ }
+ &:hover,
+ &:focus {
+ > .collapse {
+ display: block;
+ }
+ }
+ .collapse {
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ }
+ &.open {
+ .collapse {
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ }
+ background-image: linear-gradient(top, rgb(238, 238, 238) 0%, rgb(245, 245, 245) 100%);
+ background-image: -webkit-linear-gradient(top, rgb(238, 238, 238) 0%, rgb(245, 245, 245) 100%);
+ background-image: -ms-linear-gradient(top, rgb(238, 238, 238) 0%, rgb(245, 245, 245) 100%);
+ }
+ }
+ > {
+ /* Second level nesting for lists */
+ ul ul {
+ display: none;
+ li > a {
+ padding-left: 32px;
+ }
+ }
+ .with-icon ul li {
+ > a,
+ &.app-navigation-entry-loading > a {
+ padding-left: 68px;
+ background-position: 44px center;
+ }
+ }
+ }
+ > ul .collapsible.open {
+ &:hover,
+ &:focus {
+ box-shadow: inset 0 0 3px #ddd;
+ }
+ ul {
+ display: block;
+ }
+ }
+ /* Deleted entries with undo button */
+ .app-navigation-entry-deleted {
+ display: inline-block;
+ height: 44px;
+ width: 100%;
+ }
+ .app-navigation-entry-deleted-description {
+ padding-left: 12px;
+ position: relative;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ display: inline-block;
+ width: calc(100% - 49px);
+ line-height: 44px;
+ float: left;
+ }
+ .app-navigation-entry-deleted-button {
+ margin: 0;
+ height: 44px;
+ width: 44px;
+ line-height: 44px;
+ border: 0;
+ display: inline-block;
+ background-color: transparent;
+ opacity: .5;
+ &:hover, &:focus {
+ opacity: 1;
+ }
+ }
+ /* counter and actions, legacy code */
+ .utils {
+ position: absolute;
+ padding: 7px 7px 0 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ font-size: 12px;
+ button,
+ .counter {
+ width: 44px;
+ height: 44px;
+ padding-top: 12px;
+ }
+ }
+ /* drag and drop */
+ .drag-and-drop {
+ -webkit-transition: padding-bottom 500ms ease 0s;
+ transition: padding-bottom 500ms ease 0s;
+ padding-bottom: 40px;
+ }
+ .error {
+ color: #dd1144;
+ }
+ .app-navigation-separator {
+ border-bottom: 1px solid #ddd;
+ }
+
+ /**
+ * App navigation utils, buttons and counters for drop down menu
+ */
+ .app-navigation-entry-utils {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 105;
+ ul {
+ display: flex !important;
+ align-items: center;
+ justify-content: flex-end;
+ }
+ li {
+ width: 44px !important;
+ height: 44px;
+ }
+ }
+ .active > .app-navigation-entry-utils li {
+ display: inline-block;
+ }
+ .app-navigation-entry-utils button {
+ height: 100%;
+ width: 100%;
+ margin: 0;
+ box-shadow: none;
+ }
+ .app-navigation-entry-utils-menu-button {
+ button {
+ border: 0;
+ opacity: .5;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-image: url('../img/actions/more.svg?v=1');
+ }
+ &:hover button,
+ &:focus button {
+ background-color: transparent;
+ opacity: 1;
+ }
+ }
+ .app-navigation-entry-utils-counter {
+ overflow: hidden;
+ text-overflow: hidden;
+ text-align: right;
+ font-size: 9pt;
+ width: 38px;
+ line-height: 44px;
+ padding: 0 10px;
+ }
+ .app-navigation-entry-utils ul, .app-navigation-entry-menu ul {
+ list-style-type: none;
+ }
+
+ /* editing an entry */
+ .app-navigation-entry-edit {
+ padding-left: 5px;
+ padding-right: 5px;
+ display: inline-block;
+ height: 39px;
+ width: 100%;
+ input {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ width: calc(100% - 36px);
+ padding: 5px;
+ margin-right: 0;
+ height: 38px;
+ float: left;
+ border: 1px solid rgba(190, 190, 190, 0.9);
+ }
+ button,
+ input[type='submit'] {
+ width: 36px;
+ height: 38px;
+ float: left;
+ }
+ .icon-checkmark {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+ border-left: 0;
+ margin-right: 0;
+ }
+ }
+}
+
+/* APP-CONTENT ---------------------------------------------------------------*/
+/* Part where the content will be loaded into */
+#app-content {
+ position: relative;
+ height: 100%;
+ overflow-y: auto;
+ /* no top border for first settings item */
+ > .section:first-child {
+ border-top: none;
+ }
+ &.with-app-sidebar {
+ margin-right: 27%;
+ }
+}
+
+#app-content-wrapper {
+ min-width: 100%;
+ min-height: 100%;
+}
+
+/* APP-SIDEBAR ----------------------------------------------------------------*/
+
+/*
+ Sidebar: a sidebar to be used within #app-content
+ have it as first element within app-content in order to shrink other
+ sibling containers properly. Compare Files app for example.
+*/
+#app-sidebar {
+ position: fixed;
+ top: 45px;
+ right: 0;
+ left: auto;
+ bottom: 0;
+ width: 27%;
+ min-width: 300px;
+ display: block;
+ background: #fff;
+ border-left: 1px solid #eee;
+ -webkit-transition: margin-right 300ms;
+ transition: margin-right 300ms;
+ overflow-x: hidden;
+ overflow-y: auto;
+ visibility: visible;
+ z-index: 500;
+ &.disappear {
+ visibility: hidden;
+ }
+}
+
+/* APP-SETTINGS ---------------------------------------------------------------*/
+
+/* settings area */
+#app-settings {
+ position: fixed;
+ width: 250px;
+ /* change to 100% when layout positions are absolute */
+ bottom: 0;
+ z-index: 140;
+ &.open #app-settings-content,
+ &.opened #app-settings-content {
+ display: block;
+ }
+}
+
+#app-settings-content {
+ display: none;
+ padding: 10px;
+ background-color: #fff;
+ /* restrict height of settings and make scrollable */
+ max-height: 300px;
+ overflow-y: auto;
+ border-right: 1px solid #eee;
+ width: 250px;
+ box-sizing: border-box;
+
+ /* display input fields at full width */
+ input[type='text'] {
+ width: 93%;
+ }
+}
+
+#app-settings-header {
+ border-right: 1px solid #eee;
+ width: 250px;
+ box-sizing: border-box;
+}
+
+.settings-button {
+ display: block;
+ height: 44px;
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ background-color: #fff;
+ background-image: url('../img/actions/settings.svg?v=1');
+ background-position: 14px center;
+ background-repeat: no-repeat;
+ box-shadow: none;
+ border: 0;
+ border-radius: 0;
+ text-align: left;
+ padding-left: 42px;
+ font-weight: normal;
+ &:hover,
+ &:focus {
+ background-color: #fff;
+ }
+ &.opened {
+ &:hover, &:focus {
+ background-color: #fff;
+ }
+ }
+}
+
+/* GENERAL SECTION ---------------------------------------------------------- */
+.section {
+ display: block;
+ padding: 30px;
+ color: #555;
+ margin-bottom: 24px;
+ &.hidden {
+ display: none !important;
+ }
+ /* slight position correction of checkboxes and radio buttons */
+ input {
+ &[type='checkbox'],
+ &[type='radio'] {
+ vertical-align: -2px;
+ margin-right: 4px;
+ }
+ }
+}
+.sub-section {
+ position: relative;
+ margin-top: 10px;
+ margin-left: 27px;
+ margin-bottom: 10px;
+}
+
+.appear {
+ opacity: 1;
+ -webkit-transition: opacity 500ms ease 0s;
+ -moz-transition: opacity 500ms ease 0s;
+ -ms-transition: opacity 500ms ease 0s;
+ -o-transition: opacity 500ms ease 0s;
+ transition: opacity 500ms ease 0s;
+ &.transparent {
+ opacity: 0;
+ }
+}
+
+/* DROPDOWN ----------------------------------------------------------------- */
+.dropdown {
+ background: #eee;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ box-shadow: 0 1px 1px #777;
+ display: block;
+ margin-right: 0;
+ position: absolute;
+ right: 0;
+ width: 420px;
+ z-index: 500;
+ padding: 16px;
+}
+
+/* TABS --------------------------------------------------------------------- */
+.tabHeaders {
+ display: inline-block;
+ margin: 15px;
+ .tabHeader {
+ float: left;
+ padding: 5px;
+ cursor: pointer;
+ color: #888;
+ margin-bottom: 1px;
+ a {
+ color: #888;
+ margin-bottom: 1px;
+ }
+ &.selected {
+ font-weight: 600;
+ border-bottom: 1px solid #333;
+ }
+ &:hover {
+ border-bottom: 1px solid #333;
+ }
+ &.selected, &:hover {
+ margin-bottom: 0px;
+ color: #000;
+ a {
+ margin-bottom: 0px;
+ color: #000;
+ }
+ }
+ }
+}
+.tabsContainer {
+ clear: left;
+ .tab {
+ padding: 0 15px 15px;
+ }
+}
+
+/* POPOVER MENU ------------------------------------------------------------- */
+.ie,
+.edge {
+ .bubble, .bubble:after,
+ .popovermenu, .popovermenu:after,
+ #app-navigation .app-navigation-entry-menu,
+ #app-navigation .app-navigation-entry-menu:after {
+ border: 1px solid #eee;
+ }
+}
+
+.bubble,
+.app-navigation-entry-menu,
+.popovermenu {
+ position: absolute;
+ background-color: #fff;
+ color: #333;
+ border-radius: 3px;
+ z-index: 110;
+ margin: 5px;
+ margin-top: -5px;
+ right: 0;
+ -webkit-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
+ -moz-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
+ -ms-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
+ -o-filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
+ filter: drop-shadow(0 0 5px rgba(150, 150, 150, 0.75));
+ display: none;
+
+ &:after {
+ bottom: 100%;
+ /* Min-width of popover is 36px and arrow width is 20px
+ wich leaves us 8px right and 8px left */
+ right: 8px;
+ /* change this to adjust the arrow position */
+ border: solid transparent;
+ content: ' ';
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-color: rgba(238, 238, 238, 0);
+ border-bottom-color: #fff;
+ border-width: 10px;
+ }
+ /* Center the popover */
+ &.menu-center {
+ transform: translateX(50%);
+ right: 50%;
+ margin-right: 0;
+ &:after {
+ right: 50%;
+ transform: translateX(50%);
+ }
+ }
+ /* Align the popover to the left */
+ &.menu-left {
+ right: auto;
+ left: 0;
+ margin-right: 0;
+ &:after {
+ left: 6px;
+ right: auto;
+ }
+ }
+
+ &.open {
+ display: block;
+ }
+
+ ul {
+ /* Overwrite #app-navigation > ul ul */
+ display: flex !important;
+ flex-direction: column;
+ }
+ li {
+ display: flex;
+ > button,
+ > a,
+ > .menuitem {
+ cursor: pointer;
+ line-height: 36px;
+ border: 0;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)' !important;
+ filter: alpha(opacity = 50) !important;
+ opacity: .5 !important;
+ background-color: transparent;
+ display: flex;
+ align-items: center;
+ width: auto;
+ height: auto;
+ margin: 0;
+ font-weight: inherit;
+ box-shadow: none;
+ color: #333 !important; /* Overwrite app-navigation li */
+ /* prevent .action class to break the design */
+ &.action {
+ padding: inherit !important;
+ }
+ &:hover, &:focus {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)' !important;
+ filter: alpha(opacity = 100) !important;
+ opacity: 1 !important;
+ background-color: transparent;
+ }
+ > span {
+ cursor: pointer;
+ white-space: nowrap;
+ }
+ span {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)' !important;
+ filter: alpha(opacity = 70) !important;
+ opacity: .7 !important;
+ }
+ > p {
+ width: 150px;
+ line-height: 1.6em;
+ padding: 8px 0;
+ }
+ /* Add padding if contains icon+text */
+ &:not(:empty) {
+ padding: 0 !important;
+ padding-right: 10px !important;
+ }
+ > img {
+ width: 16px;
+ padding: 0 10px;
+ }
+ }
+ [class^='icon-'],
+ [class*=' icon-']{
+ /* Keep padding to define the width to
+ assure correct position of a possible text */
+ padding: 18px 0 18px 36px;
+ min-width: 0; /* Overwrite icons*/
+ min-height: 0;
+ background-position: 10px center;
+ opacity: 0.7; /* Default button icon override */
+ }
+ }
+}
diff --git a/core/css/guest.css b/core/css/guest.css
new file mode 100644
index 00000000000..3223e764ac0
--- /dev/null
+++ b/core/css/guest.css
@@ -0,0 +1,660 @@
+/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
+ This file is licensed under the Affero General Public License version 3 or later.
+ See the COPYING-README file. */
+
+/* Default and reset */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { margin:0; padding:0; border:0; outline:0; font-weight:inherit; font-size:100%; font-family:inherit; vertical-align:baseline; cursor:default; }
+html, body { height:100%; }
+article, aside, dialog, figure, footer, header, hgroup, nav, section { display:block; }
+body { line-height:1.5; }
+table { border-collapse:separate; border-spacing:0; white-space:nowrap; }
+caption, th, td { text-align:left; font-weight:normal; }
+table, td, th { vertical-align:middle; }
+a { border:0; color:#000; text-decoration:none;}
+a, a *, input, input *, select, .button span, label { cursor:pointer; }
+ul { list-style:none; }
+
+body {
+ background-color: #ffffff;
+ font-weight: 400;
+ font-size: .8em;
+ line-height: 1.6em;
+ font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
+ color: #000;
+ text-align: center;
+ background-color: #0082c9;
+ background-image: url('../img/background.jpg?v=1');
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-attachment: fixed; /* fix background gradient */
+ height: 100%; /* fix sticky footer */
+}
+
+/* Various fonts settings */
+p.info a,
+#showAdvanced {
+ color: #fff;
+}
+#remember_login:hover+label,
+#remember_login:focus+label,
+#forgot-password:hover,
+#forgot-password:focus,
+p.info a:hover,
+p.info a:focus {
+ opacity: .6;
+}
+em {
+ font-style: normal;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ opacity: .5;
+}
+
+/* heading styles */
+h2 {
+ font-size: 20px;
+ font-weight: 300;
+ margin-bottom: 12px;
+ line-height: 140%;
+}
+h3 {
+ font-size: 15px;
+ font-weight: 300;
+ margin: 12px 0;
+}
+
+/* Global content */
+#header {
+ padding-top: 100px;
+}
+#header .logo {
+ background-image: url(../img/logo-icon.svg?v=1);
+ background-repeat: no-repeat;
+ background-size: 175px;
+ background-position: center;
+ width: 252px;
+ height: 120px;
+ margin: 0 auto;
+}
+.wrapper {
+ min-height: 100%;
+ margin: 0 auto -70px;
+ width: 300px;
+}
+.v-align {
+ width: inherit;
+}
+
+/* Default FORM */
+form {
+ position: relative;
+ width: 280px;
+ margin: 16px auto;
+ padding: 0;
+}
+form fieldset {
+ margin-bottom: 20px;
+ text-align: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+form #sqliteInformation {
+ margin-top: -20px;
+ margin-bottom: 20px;
+}
+form #adminaccount {
+ margin-bottom: 15px;
+}
+form fieldset legend, #datadirContent label {
+ width: 100%;
+}
+#datadirContent label {
+ display: block;
+ margin: 0;
+}
+form #datadirField legend {
+ margin-bottom: 15px;
+}
+
+/* View more button */
+#showAdvanced {
+ padding: 13px; /* increase clickable area of Advanced dropdown */
+}
+#showAdvanced img {
+ vertical-align: middle; /* adjust position of Advanced dropdown arrow */
+}
+
+/* Buttons and input */
+input, textarea, select, button {
+ font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
+}
+input {
+ font-size: 20px;
+ margin: 5px;
+ padding: 11px 10px 9px;
+ outline: none;
+ border-radius: 3px;
+}
+input[type="submit"],
+input[type="button"],
+button, .button,
+select {
+ width: auto;
+ min-width: 25px;
+ padding: 5px;
+ background-color: rgba(240,240,240,.9);
+ font-weight: 600;
+ color: #555;
+ border: 1px solid rgba(240,240,240,.9);
+ cursor: pointer;
+}
+input[type="text"],
+input[type="password"],
+input[type='email'] {
+ width: 249px;
+ background: #fff;
+ color: #555;
+ cursor: text;
+ font-family: inherit;
+ -webkit-appearance: textfield;
+ -moz-appearance: textfield;
+ box-sizing: content-box;
+ border: none;
+ font-weight: 300;
+}
+input.login {
+ width: 269px;
+ background-position: right 16px center;
+}
+input[type="submit"],
+input.updateButton,
+input.update-continue {
+ padding: 10px 20px; /* larger log in and installation buttons */
+}
+input.primary,
+button.primary {
+ border: 1px solid #0082c9;
+ background-color: #00a2e9;
+ color: #fff;
+}
+
+/* Radio and Checkbox */
+input[type="checkbox"].checkbox {
+ position: absolute;
+ left:-10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+input[type="checkbox"].checkbox + label:before {
+ content: "";
+ display: inline-block;
+
+ height: 20px;
+ width: 20px;
+ vertical-align: middle;
+
+ background: url('../img/actions/checkbox.svg') left top no-repeat;
+}
+input[type="checkbox"].checkbox:disabled +label:before { opacity: .6; }
+input[type="checkbox"].checkbox.u-left +label:before { float: left; }
+input[type="checkbox"].checkbox.u-hidden + label:before { display: none; }
+input[type="checkbox"].checkbox:checked + label:before {
+ background-image: url('../img/actions/checkbox-checked.svg');
+}
+input[type="checkbox"].checkbox:indeterminate + label:before {
+ background-image: url('../img/actions/checkbox-mixed.svg');
+}
+input[type="checkbox"].checkbox:disabled + label:before {
+ background-image: url('../img/actions/checkbox-disabled.svg');
+}
+input[type="checkbox"].checkbox:checked:disabled + label:before {
+ background-image: url('../img/actions/checkbox-checked-disabled.svg');
+}
+input[type="checkbox"].checkbox:indeterminate:disabled + label:before {
+ background-image: url('../img/actions/checkbox-mixed-disabled.svg');
+}
+input[type="checkbox"].checkbox--white + label:before {
+ background-image: url('../img/actions/checkbox-white.svg');
+}
+input[type="checkbox"].checkbox--white:checked + label:before {
+ background-image: url('../img/actions/checkbox-checked-white.svg');
+}
+input[type="checkbox"].checkbox--white:indeterminate + label:before {
+ background-image: url('../img/actions/checkbox-mixed-white.svg');
+}
+input[type="checkbox"].checkbox--white:disabled + label:before {
+ background-image: url('../img/actions/checkbox-disabled-white.svg');
+}
+input[type="checkbox"].checkbox--white:checked:disabled + label:before {
+ background-image: url('../img/actions/checkbox-checked-disabled.svg');
+}
+input[type="checkbox"].checkbox--white:indeterminate:disabled + label:before {
+ background-image: url('../img/actions/checkbox-mixed-disabled.svg');
+}
+input[type="checkbox"].checkbox:hover+label:before, input[type="checkbox"]:focus+label:before {
+ color:#111 !important;
+}
+input[type="checkbox"]+label {
+ position: relative;
+ margin: 0;
+ padding: 14px;
+ vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+input[type="radio"].radio {
+ position: absolute;
+ left:-10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+}
+input[type="radio"].radio + label:before {
+ content: "";
+ display: inline-block;
+
+ height: 20px;
+ width: 20px;
+ vertical-align: middle;
+
+ background: url('../img/actions/radio.svg') left top no-repeat;
+}
+input[type="radio"].radio:checked + label:before {
+ background-image: url('../img/actions/radio-checked.svg');
+}
+input[type="radio"].radio:disabled + label:before {
+ background-image: url('../img/actions/radio-disabled.svg');
+}
+input[type="radio"].radio:checked:disabled + label:before {
+ background-image: url('../img/actions/radio-checked-disabled.svg');
+}
+input[type="radio"].radio--white + label:before {
+ background-image: url('../img/actions/radio-white.svg');
+}
+input[type="radio"].radio--white:checked + label:before {
+ background-image: url('../img/actions/radio-checked-white.svg');
+}
+input[type="radio"].radio--white:disabled + label:before {
+ background-image: url('../img/actions/radio-disabled.svg');
+}
+input[type="radio"].radio--white:checked:disabled + label:before {
+ background-image: url('../img/actions/radio-checked-disabled.svg');
+}
+
+/* keep the labels for screen readers but hide them since we use placeholders */
+label.infield {
+ display: none;
+}
+
+/* Password strength meter */
+.strengthify-wrapper {
+ display: inline-block;
+ position: relative;
+ left: 15px;
+ top: -23px;
+ width: 250px;
+}
+.tooltip-inner {
+ font-weight: bold;
+ color: #ccc;
+ padding: 3px 6px;
+ text-align: center;
+}
+
+/* Show password toggle */
+#show, #dbpassword {
+ position: absolute;
+ right: 1em;
+ top: .8em;
+ float: right;
+}
+#show, #dbpassword, #personal-show {
+ display: none;
+}
+#show + label, #dbpassword + label {
+ right: 21px;
+ top: 15px !important;
+ margin: -14px !important;
+ padding: 14px !important;
+}
+#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+ opacity: .8;
+}
+#show + label, #dbpassword + label, #personal-show + label {
+ position: absolute !important;
+ height: 20px;
+ width: 24px;
+ background-image: url('../img/actions/toggle.svg?v=1');
+ background-repeat: no-repeat;
+ background-position: center;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+ opacity: .3;
+}
+#show + label:before, #dbpassword + label:before, #personal-show + label:before {
+ display: none;
+}
+#pass2, input[name="personal-password-clone"] {
+ padding: .6em 2.5em .4em .4em;
+ width: 8em;
+}
+#personal-show + label {
+ height: 14px;
+ margin-top: -25px;
+ left: 295px;
+ display: block;
+}
+#passwordbutton {
+ margin-left: .5em;
+}
+
+/* Dark subtle label text */
+p.info,
+form fieldset legend,
+#datadirContent label,
+form fieldset .warning-info,
+form input[type="checkbox"]+label {
+ text-align: center;
+ color: #fff;
+}
+/* overrides another !important statement that sets this to unreadable black */
+form .warning input[type="checkbox"]:hover+label,
+form .warning input[type="checkbox"]:focus+label,
+form .warning input[type="checkbox"]+label {
+ color: #fff !important;
+}
+
+/* Additional login options */
+#remember_login {
+ margin: 18px 5px 0 16px !important;
+}
+.remember-login-container {
+ display: inline-block;
+ margin: 10px 0;
+ text-align: center;
+ width: 100%;
+}
+#forgot-password {
+ padding: 11px;
+ float: right;
+ color: #fff;
+}
+
+/* Alternative Logins */
+#alternative-logins legend { margin-bottom:10px; }
+#alternative-logins li { height:40px; display:inline-block; white-space:nowrap; }
+
+/* fixes for update page TODO should be fixed some time in a proper way */
+/* this is just for an error while updating the ownCloud instance */
+.updateProgress .error {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+/* Database selector on install page */
+form #selectDbType {
+ text-align:center;
+ white-space: nowrap;
+ margin: 0;
+}
+form #selectDbType .info {
+ white-space: normal;
+}
+form #selectDbType label {
+ position: static;
+ margin: 0 -3px 5px;
+ font-size: 12px;
+ background:#f8f8f8;
+ color:#888;
+ cursor:pointer;
+ border: 1px solid #ddd;
+}
+form #selectDbType label span {
+ cursor: pointer;
+ padding: 10px 20px;
+}
+form #selectDbType label.ui-state-hover,
+form #selectDbType label.ui-state-active {
+ color:#000;
+ background-color:#e8e8e8; }
+
+/* Nicely grouping input field sets */
+.grouptop,
+.groupmiddle,
+.groupbottom {
+ position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.grouptop input {
+ margin-bottom: 0 !important;
+ border-bottom: 0 !important;
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+.groupmiddle input {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ border-top: 0 !important;
+ border-bottom: 0 !important;
+ border-radius: 0 !important;
+ box-shadow: 0 1px 0 rgba(0,0,0,.1) inset !important;
+}
+.groupbottom input {
+ margin-top: 0 !important;
+ border-top: 0 !important;
+ border-top-right-radius: 0 !important;
+ border-top-left-radius: 0 !important;
+ box-shadow: 0 1px 0 rgba(0,0,0,.1) inset !important;
+}
+.groupbottom input[type=submit] {
+ box-shadow: none !important;
+}
+
+/* Errors */
+/* Warnings and errors are the same */
+.warning,
+.update,
+.error {
+ display: block;
+ padding: 10px;
+ background-color: rgba(0,0,0,.3);
+ color: #fff;
+ text-align: left;
+ border-radius: 3px;
+ cursor: default;
+}
+.warning, {
+ padding: 5px;
+ background: #fdd;
+ margin: 0 7px 5px 4px;
+}
+.warning legend,
+.warning a,
+.error a {
+ color: #fff !important;
+ font-weight: 600 !important;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ opacity: 1;
+}
+.error a.button {
+ color: #555 !important;
+ display: inline-block;
+ text-align: center;
+}
+.error pre {
+ white-space: pre-wrap;
+ text-align: left;
+}
+.error-wide {
+ width: 700px;
+ margin-left: -200px !important;
+ margin-top: 35px;
+}
+.error-wide .button {
+ color: black !important;
+}
+.warning-input {
+ border-color: #ce3702 !important;
+}
+a.warning {
+ cursor: pointer;
+}
+fieldset.warning legend,
+fieldset.update legend {
+ top: 18px;
+ position: relative;
+}
+fieldset.warning legend + p,
+fieldset.update legend + p {
+ margin-top: 12px;
+}
+
+/* Various paragraph styles */
+.infogroup {
+ margin-bottom: 15px;
+}
+p.info {
+ margin: 0 auto;
+ padding-top: 20px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/* Update */
+.update {
+ width: inherit;
+ text-align: center;
+}
+.update .appList {
+ list-style: disc;
+ text-align: left;
+ margin-left: 25px;
+ margin-right: 25px;
+}
+.update img.float-spinner {
+ float: left;
+}
+.update h2 {
+ margin: 0 0 20px;
+}
+.update a {
+ color: #fff;
+ border-bottom: 1px solid #aaa;
+}
+.update a.update-show-detailed {
+ border-bottom: inherit;
+}
+#update-progress-detailed {
+ text-align: left;
+}
+.update-show-detailed {
+ padding: 13px;
+ display: block;
+ opacity: .75;
+}
+#update-progress-icon {
+ height: 32px;
+ margin: 10px;
+ background-size: 32px;
+}
+
+/* Icons */
+.icon-info-white {
+ background-image: url(../img/actions/info-white.svg?v=1);
+}
+
+/* Loading */
+.float-spinner {
+ margin-top: -32px;
+ padding-top: 32px;
+}
+[class^='icon-'], [class*=' icon-'] {
+ background-repeat: no-repeat;
+ background-position: center;
+ min-width: 16px;
+ min-height: 16px;
+}
+.loading, .loading-small, .icon-loading, .icon-loading-dark, .icon-loading-small, .icon-loading-small-dark {
+ position: relative;
+}
+.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after {
+ z-index: 2;
+ content: '';
+ height: 32px;
+ width: 32px;
+ margin: -17px 0 0 -17px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ border-radius: 100%;
+ -webkit-animation: rotate .8s infinite linear;
+ animation: rotate .8s infinite linear;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+}
+.loading:after, .loading-small:after, .icon-loading:after, .icon-loading-dark:after, .icon-loading-small:after, .icon-loading-small-dark:after {
+ border: 2px solid rgba(150, 150, 150, 0.5);
+ border-top-color: #646464;
+}
+.icon-loading-dark:after, .icon-loading-small-dark:after {
+ border: 2px solid rgba(187, 187, 187, 0.5);
+ border-top-color: #bbb;
+}
+.icon-loading-small:after, .icon-loading-small-dark:after {
+ height: 16px;
+ width: 16px;
+ margin: -9px 0 0 -9px;
+}
+/* Css replaced elements don't have ::after nor ::before */
+img.icon-loading, object.icon-loading, video.icon-loading, button.icon-loading, textarea.icon-loading, input.icon-loading, select.icon-loading {
+ background-image: url("../img/loading.gif");
+}
+img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark {
+ background-image: url("../img/loading-dark.gif");
+}
+img.icon-loading-small, object.icon-loading-small, video.icon-loading-small, button.icon-loading-small, textarea.icon-loading-small, input.icon-loading-small, select.icon-loading-small {
+ background-image: url("../img/loading-small.gif");
+}
+img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark, button.icon-loading-small-dark, textarea.icon-loading-small-dark, input.icon-loading-small-dark, select.icon-loading-small-dark {
+ background-image: url("../img/loading-small-dark.gif");
+}
+@-webkit-keyframes rotate {
+ from {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ to {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@keyframes rotate {
+ from {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ to {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+/* FOOTER */
+footer,
+.push {
+ height: 70px;
+} \ No newline at end of file
diff --git a/core/css/header.css b/core/css/header.css
deleted file mode 100644
index f81a71070f0..00000000000
--- a/core/css/header.css
+++ /dev/null
@@ -1,385 +0,0 @@
-/* prevent ugly selection effect on accidental selection */
-#header,
-#navigation,
-#expanddiv {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
-}
-
-/* removed until content-focusing issue is fixed */
-#skip-to-content a {
- position: absolute;
- left: -10000px;
- top: auto;
- width: 1px;
- height: 1px;
- overflow: hidden;
-}
-#skip-to-content a:focus {
- left: 76px;
- top: -9px;
- color: #fff;
- width: auto;
- height: auto;
-}
-
-
-
-/* HEADERS ------------------------------------------------------------------ */
-
-#body-user #header,
-#body-settings #header,
-#body-public #header {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- z-index: 2000;
- height: 45px;
- line-height: 2.5em;
- background-color: #0082c9;
- box-sizing: border-box;
-}
-
-
-
-/* LOGO and APP NAME -------------------------------------------------------- */
-
-#nextcloud {
- position: absolute;
- top: 0;
- left: 0;
- padding: 5px;
- padding-bottom: 0;
- height: 45px; /* header height */
- box-sizing: border-box;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-#nextcloud:focus {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
- opacity: .75;
-}
-#nextcloud:hover,
-#nextcloud:active {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-
-#header .logo {
- background-image: url('../img/logo-icon.svg?v=1');
- background-repeat: no-repeat;
- background-size: 175px;
- background-position: center;
- width: 252px;
- height: 120px;
- margin: 0 auto;
-}
-
-#header .logo-icon {
- /* display logo so appname can be shown next to it */
- display: inline-block;
- background-image: url('../img/logo-icon.svg?v=1');
- background-repeat: no-repeat;
- background-position: center center;
- width: 62px;
- height: 34px;
-}
-
-#header .header-appname-container {
- display: inline-block;
- position: absolute;
- left: 70px;
- height: 27px;
- padding-top: 18px;
- padding-right: 10px;
-}
-
-/* hover effect for app switcher label */
-.header-appname-container .header-appname,
-.menutoggle .icon-caret {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
- opacity: .75;
-}
-.menutoggle:hover .header-appname,
-.menutoggle:hover .icon-caret,
-.menutoggle:focus .header-appname,
-.menutoggle:focus .icon-caret,
-.menutoggle.active .header-appname,
-.menutoggle.active .icon-caret {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-
-/* show appname next to logo */
-.header-appname {
- display: inline-block;
- position: relative;
- color: #fff;
- font-size: 16px;
- font-weight: 300;
- margin: 0;
- margin-top: -24px;
- padding: 7px 0 7px 5px;
- vertical-align: middle;
-}
-/* show caret indicator next to logo to make clear it is tappable */
-#header .icon-caret {
- display: inline-block;
- width: 12px;
- height: 12px;
- margin: 0;
- margin-top: -21px;
- padding: 0;
- vertical-align: middle;
-}
-/* do not show menu toggle on public share links as there is no menu */
-#body-public #header .icon-caret {
- display: none;
-}
-
-
-
-/* NAVIGATION --------------------------------------------------------------- */
-
-#navigation {
- position: fixed;
- top: 45px;
- left: 10px;
- width: 265px;
- max-height: 85%;
- margin-top: 0;
- padding-bottom: 10px;
- background-color: rgba(255, 255, 255, .97);
- box-shadow: 0 1px 10px rgba(50, 50, 50, .7);
- border-radius: 3px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- display: none;
- /*overflow-y: auto;
- overflow-x: hidden;*/
- z-index: 2000;
-}
-/* arrow look */
-#navigation:after, #expanddiv:after {
- bottom: 100%;
- border: solid transparent;
- content: " ";
- height: 0;
- width: 0;
- position: absolute;
- pointer-events: none;
- border-color: rgba(0, 0, 0, 0);
- border-bottom-color: rgba(255, 255, 255, .97);
- border-width: 10px;
- margin-left: -10px;
-}
-/* position of dropdown arrow */
-#navigation:after {
- left: 47%;
-}
-#expanddiv:after {
- right: 15px;
-}
-
-#navigation, #navigation * {
- box-sizing:border-box;
-}
-#navigation li {
- display: inline-block;
-}
-#navigation a {
- position: relative;
- width: 80px;
- height: 80px;
- display: inline-block;
- text-align: center;
- padding: 20px 0;
-}
-#navigation a span {
- display: inline-block;
- font-size: 13px;
- padding-bottom: 0;
- padding-left: 0;
- width: 80px;
- text-align: center;
- color: #000;
- white-space:nowrap;
- overflow:hidden;
- text-overflow:ellipsis;
-}
- /* icon opacity and hover effect */
- #navigation a svg,
- #navigation a span {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
- }
- #navigation a:hover svg,
- #navigation a:focus svg,
- #navigation a:hover span,
- #navigation a:focus span,
- #navigation a.active svg,
- #navigation a.active span,
- #apps-management a:hover svg,
- #apps-management a:focus svg,
- #apps-management a.active svg,
- #apps-management a:hover span,
- #apps-management a:focus span,
- #apps-management a.active span {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
- }
-
-#navigation .app-icon {
- margin: 0 auto;
- padding: 0;
- max-height: 32px;
- max-width: 32px;
-}
-
-/* Apps management */
-#apps-management {
- min-height: initial;
- height: initial;
- margin: 0;
-}
-#apps-management a svg,
-#apps-management a span {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
- opacity: .3;
-}
-
-
-/* loading feedback for apps */
-#navigation .app-loading .icon-loading-dark {
- display: inline !important;
- position: absolute;
- top: 20px;
- left: 24px;
- width: 32px;
- height: 32px;
-}
-#navigation .app-loading .app-icon {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
- opacity: 0;
-}
-
-#apps {
- max-height: calc(100vh - 100px);
- overflow:auto;
-}
-
-
-/* USER MENU -----------------------------------------------------------------*/
-
-/* info part on the right, used e.g. for info on who shared something */
-.header-right {
- position: absolute;
- right: 0;
- padding: 7px 5px;
- color: #fff;
- height: 100%;
- max-width: 80%;
- white-space: nowrap;
- box-sizing: border-box;
-}
-
-/* Profile picture in header */
-#header .avatardiv {
- float: left;
- display: inline-block;
- margin-right: 8px;
- cursor: pointer;
- height: 32px;
- width: 32px;
-}
-#header .avatardiv img {
- opacity: 1;
- cursor: pointer;
-}
-
-#settings {
- float: right;
- color: #ddd;
- cursor: pointer;
-}
-#settings .icon-loading-small-dark {
- display: inline-block;
- margin-bottom: -3px;
- margin-right: 6px;
- background-size: 16px 16px;
-}
-#expand {
- display: block;
- padding: 7px 30px 6px 10px;
- cursor: pointer;
-}
-#expand * {
- cursor: pointer;
-}
-#expand:hover,
-#expand:focus,
-#expand:active {
- color: #fff;
-}
-#expand img {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
- opacity: .7;
- margin-bottom: -2px;
-}
-#expand:hover img,
-#expand:focus img,
-#expand:active img {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-#expand .icon-caret {
- margin-top: 0;
-}
-#expanddiv {
- position: absolute;
- right: 10px;
- top: 45px;
- z-index: 2000;
- display: none;
- background: rgb(255, 255, 255);
- border: 1px solid rgb(204, 204, 204);
- box-shadow: 0 1px 10px rgba(50, 50, 50, .7);
- border-radius: 3px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- box-sizing: border-box;
-}
-#expanddiv:after {
- border-color: rgba(0, 0, 0, 0);
- border-bottom-color: rgba(255, 255, 255, 1);
-}
- #expanddiv a {
- display: block;
- height: 40px;
- color: #000;
- padding: 4px 12px 0;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
- box-sizing: border-box;
- }
- #expanddiv a img {
- margin-bottom: -3px;
- margin-right: 6px;
- }
- #expanddiv a:hover,
- #expanddiv a:focus,
- #expanddiv a:active,
- #expanddiv a.active {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
- }
-
-/* do not show display name when profile picture is present */
-#header .avatardiv.avatardiv-shown + #expandDisplayName {
- display: none;
-}
-#header #expand {
- display: block;
-}
diff --git a/core/css/header.scss b/core/css/header.scss
new file mode 100644
index 00000000000..2b73937a3c4
--- /dev/null
+++ b/core/css/header.scss
@@ -0,0 +1,407 @@
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Jos Poortvliet <jos@opensuse.org>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2015, Volker E <volker.e@temporaer.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+/* prevent ugly selection effect on accidental selection */
+#header,
+#navigation,
+#expanddiv {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+
+ /* Dropdown menu arrow */
+ &.menu:after,
+ .menu:after {
+ border: 10px solid transparent;
+ border-color: transparent;
+ border-bottom-color: #fff;
+ bottom: 100%;
+ content: ' ';
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ margin-left: -10px;
+ }
+}
+
+/* removed until content-focusing issue is fixed */
+#skip-to-content a {
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+ &:focus {
+ left: 76px;
+ top: -9px;
+ color: #fff;
+ width: auto;
+ height: auto;
+ }
+}
+
+/* HEADERS ------------------------------------------------------------------ */
+#body-user #header,
+#body-settings #header,
+#body-public #header {
+ display: inline-flex;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 2000;
+ height: 45px;
+ background-color: #0082c9;
+ box-sizing: border-box;
+ justify-content: space-between;
+}
+
+/* LOGO and APP NAME -------------------------------------------------------- */
+#nextcloud {
+ padding: 5px;
+ padding-bottom: 0;
+ height: 45px;
+ /* header height */
+ box-sizing: border-box;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ &:focus {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=75)';
+ opacity: .75;
+ }
+ &:hover, &:active {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+}
+
+#header {
+ .logo {
+ background-image: url('../img/logo-icon.svg?v=1');
+ background-repeat: no-repeat;
+ background-size: 175px;
+ background-position: center;
+ width: 252px;
+ height: 120px;
+ margin: 0 auto;
+ }
+ .logo-icon {
+ /* display logo so appname can be shown next to it */
+ display: inline-block;
+ background-image: url('../img/logo-icon.svg?v=1');
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 62px;
+ height: 34px;
+ }
+ .header-appname-container {
+ display: inline-block;
+ padding-top: 22px;
+ padding-right: 10px;
+ flex-shrink: 0;
+ }
+ /* show caret indicator next to logo to make clear it is tappable */
+ .icon-caret {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ margin-top: -21px;
+ padding: 0;
+ vertical-align: middle;
+ }
+
+ #header-left,
+ #header-right {
+ display: inline-flex;
+ align-items: center;
+ }
+
+ #header-left {
+ flex: 0 0;
+ flex-grow: 1;
+ }
+
+ #header-right {
+ justify-content: flex-end;
+ }
+}
+
+/* hover effect for app switcher label */
+
+.header-appname-container .header-appname {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=75)';
+ opacity: .75;
+}
+
+.menutoggle {
+ .icon-caret {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=75)';
+ opacity: .75;
+ }
+ &:hover {
+ .header-appname, .icon-caret {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ }
+ &:focus {
+ .header-appname, .icon-caret {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ }
+ &.active {
+ .header-appname, .icon-caret {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ }
+}
+
+/* show appname next to logo */
+.header-appname {
+ display: inline-block;
+ position: relative;
+ color: #fff;
+ font-size: 16px;
+ font-weight: 300;
+ margin: 0;
+ margin-top: -27px;
+ padding: 7px 0 7px 5px;
+ vertical-align: middle;
+}
+
+
+
+/* do not show menu toggle on public share links as there is no menu */
+#body-public #header .icon-caret {
+ display: none;
+}
+
+/* NAVIGATION --------------------------------------------------------------- */
+#navigation {
+ position: fixed;
+ top: 45px;
+ left: 10px;
+ width: 265px;
+ max-height: 85%;
+ margin-top: 0;
+ padding-bottom: 10px;
+ background-color: rgba(255, 255, 255, 0.97);
+ box-shadow: 0 1px 10px rgba(150, 150, 150, 0.75);
+ border-radius: 3px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ display: none;
+ box-sizing: border-box;
+ z-index: 2000;
+ &:after {
+ left: 47%;
+ }
+ * {
+ box-sizing: border-box;
+ }
+ li {
+ display: inline-block;
+ }
+ a {
+ position: relative;
+ width: 80px;
+ height: 80px;
+ display: inline-block;
+ text-align: center;
+ padding: 20px 0;
+ span {
+ display: inline-block;
+ font-size: 13px;
+ padding-bottom: 0;
+ padding-left: 0;
+ width: 80px;
+ text-align: center;
+ color: #000;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ svg,
+ span {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
+ opacity: .5;
+ }
+ &:hover svg,
+ &:focus svg,
+ &:hover span,
+ &:focus span {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ &.active {
+ svg, span {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ }
+ }
+ .app-icon {
+ margin: 0 auto;
+ padding: 0;
+ max-height: 32px;
+ max-width: 32px;
+ }
+ /* loading feedback for apps */
+ .app-loading {
+ .icon-loading-dark {
+ display: inline !important;
+ position: absolute;
+ top: 20px;
+ left: 24px;
+ width: 32px;
+ height: 32px;
+ }
+ .app-icon {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
+ opacity: 0;
+ }
+ }
+}
+
+/* Apps management */
+#apps-management {
+ min-height: initial;
+ height: initial;
+ margin: 0;
+ a {
+ svg,
+ span {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)';
+ opacity: .3;
+ }
+ /* icon opacity and hover effect */
+ &:hover svg,
+ &:focus svg,
+ &.active svg,
+ &:hover span,
+ &:focus span,
+ &.active span {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ }
+}
+
+#apps {
+ max-height: calc(100vh - 100px);
+ overflow: auto;
+}
+
+/* USER MENU -----------------------------------------------------------------*/
+
+#settings {
+ display: inline-block;
+ color: #ddd;
+ cursor: pointer;
+ .icon-loading-small-dark {
+ display: inline-block;
+ margin-bottom: -3px;
+ margin-right: 6px;
+ background-size: 16px 16px;
+ }
+ flex: 0 0 auto;
+}
+
+/* User menu on the right */
+#expand {
+ display: flex;
+ align-items: center;
+ padding: 7px 30px 6px 10px;
+ cursor: pointer;
+ * {
+ cursor: pointer;
+ }
+ img {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)';
+ opacity: .7;
+ margin-bottom: -2px;
+ }
+ &:hover,
+ &:focus,
+ &:active {
+ color: #fff;
+ img {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ }
+ .icon-caret {
+ margin-top: 0;
+ }
+
+ /* Profile picture in header */
+ .avatardiv {
+ margin-right: 8px;
+ cursor: pointer;
+ height: 32px;
+ width: 32px;
+ img {
+ opacity: 1;
+ cursor: pointer;
+ }
+ /* do not show display name when profile picture is present */
+ &.avatardiv-shown + #expandDisplayName {
+ display: none;
+ }
+ }
+}
+
+#expanddiv {
+ position: absolute;
+ right: 13px;
+ top: 45px;
+ z-index: 2000;
+ display: none;
+ background: rgb(255, 255, 255);
+ box-shadow: 0 1px 10px rgba(150, 150, 150, 0.75);
+ border-radius: 3px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ box-sizing: border-box;
+ &:after {
+ /* position of dropdown arrow */
+ right: 15px;
+ }
+ a {
+ display: block;
+ height: 40px;
+ color: #000;
+ padding: 10px 12px 0;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
+ opacity: .5;
+ box-sizing: border-box;
+ img {
+ margin-bottom: -3px;
+ margin-right: 6px;
+ }
+ &:hover,
+ &:focus,
+ &:active,
+ &.active {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ }
+}
diff --git a/core/css/icons.css b/core/css/icons.scss
index a2869dfac1c..28f6bd9bbb8 100644
--- a/core/css/icons.css
+++ b/core/css/icons.scss
@@ -1,61 +1,55 @@
-[class^="icon-"], [class*=" icon-"] {
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ * @copyright Copyright (c) 2016, Vincent Chan <plus.vincchan@gmail.com>
+ * @copyright Copyright (c) 2015, Thomas Müller <thomas.mueller@tmit.eu>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+/* GLOBAL ------------------------------------------------------------------- */
+[class^='icon-'], [class*=' icon-'] {
background-repeat: no-repeat;
background-position: center;
min-width: 16px;
min-height: 16px;
}
-
-
-
-/* general assets */
-
.icon-breadcrumb {
background-image: url('../img/breadcrumb.svg?v=1');
}
-.loading,
-.loading-small,
-.icon-loading,
-.icon-loading-dark,
-.icon-loading-small,
-.icon-loading-small-dark {
+/* LOADING ------------------------------------------------------------------ */
+.loading, .loading-small, .icon-loading, .icon-loading-dark, .icon-loading-small, .icon-loading-small-dark {
position: relative;
-}
-.loading:after,
-.loading-small:after,
-.icon-loading:after,
-.icon-loading-dark:after,
-.icon-loading-small:after,
-.icon-loading-small-dark:after {
- z-index: 2;
- content: "";
- height: 30px;
- width: 30px;
- margin: -16px 0 0 -16px;
- position: absolute;
- top: 50%;
- left: 50%;
- border-radius: 100%;
- -webkit-animation: rotate .8s infinite linear;
- animation: rotate .8s infinite linear;
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
-}
-.loading:after,
-.loading-small:after,
-.icon-loading:after,
-.icon-loading-dark:after,
-.icon-loading-small:after,
-.icon-loading-small-dark:after {
- border: 2px solid rgba(150, 150, 150, .5);
- border-top-color: rgb(100, 100, 100);
+ &:after {
+ z-index: 2;
+ content: '';
+ height: 30px;
+ width: 30px;
+ margin: -16px 0 0 -16px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ border-radius: 100%;
+ -webkit-animation: rotate .8s infinite linear;
+ animation: rotate .8s infinite linear;
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ border: 2px solid rgba(150, 150, 150, 0.5);
+ border-top-color: rgb(100, 100, 100);
+ }
}
.icon-loading-dark:after,
.icon-loading-small-dark:after {
- border: 2px solid rgba(187, 187, 187, .5);
+ border: 2px solid rgba(187, 187, 187, 0.5);
border-top-color: #bbb;
}
@@ -67,36 +61,26 @@
}
/* Css replaced elements don't have ::after nor ::before */
-img.icon-loading, object.icon-loading, video.icon-loading, button.icon-loading, textarea.icon-loading, input.icon-loading, select.icon-loading {
- background-image: url("../img/loading.gif");
-}
-img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark {
- background-image: url("../img/loading-dark.gif");
-}
-img.icon-loading-small, object.icon-loading-small, video.icon-loading-small, button.icon-loading-small, textarea.icon-loading-small, input.icon-loading-small, select.icon-loading-small {
- background-image: url("../img/loading-small.gif");
-}
-img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark, button.icon-loading-small-dark, textarea.icon-loading-small-dark, input.icon-loading-small-dark, select.icon-loading-small-dark {
- background-image: url("../img/loading-small-dark.gif");
-}
-
-@-webkit-keyframes rotate {
- from {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
+img, object, video, button, textarea, input, select {
+ .icon-loading {
+ background-image: url('../img/loading.gif');
}
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
+ .icon-loading-dark {
+ background-image: url('../img/loading-dark.gif');
+ }
+ .icon-loading-small {
+ background-image: url('../img/loading-small.gif');
+ }
+ .icon-loading-small-dark {
+ background-image: url('../img/loading-small-dark.gif');
}
}
+
@keyframes rotate {
from {
- -webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
- -webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@@ -105,11 +89,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
background-size: 32px !important;
}
-
-
-
-/* action icons */
-
+/* ICONS -------------------------------------------------------------------- */
.icon-add {
background-image: url('../img/actions/add.svg?v=1');
}
@@ -117,12 +97,15 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-audio {
background-image: url('../img/actions/audio.svg?v=1');
}
+
.icon-audio-white {
background-image: url('../img/actions/audio-white.svg?v=2');
}
+
.icon-audio-off {
background-image: url('../img/actions/audio-off.svg?v=1');
}
+
.icon-audio-off-white {
background-image: url('../img/actions/audio-off-white.svg?v=1');
}
@@ -130,6 +113,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-caret {
background-image: url('../img/actions/caret.svg?v=1');
}
+
.icon-caret-dark {
background-image: url('../img/actions/caret-dark.svg?v=1');
}
@@ -137,9 +121,11 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-checkmark {
background-image: url('../img/actions/checkmark.svg?v=1');
}
+
.icon-checkmark-white {
background-image: url('../img/actions/checkmark-white.svg?v=1');
}
+
.icon-checkmark-color {
background-image: url('../img/actions/checkmark-color.svg?v=1');
}
@@ -152,6 +138,10 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
background-image: url('../img/actions/close.svg?v=1');
}
+.icon-close-white {
+ background-image: url('../img/actions/close-white.svg?v=1');
+}
+
.icon-comment {
background-image: url('../img/actions/comment.svg?v=1');
}
@@ -159,21 +149,33 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-confirm {
background-image: url('../img/actions/confirm.svg?v=2');
}
+
.icon-confirm-white {
background-image: url('../img/actions/confirm-white.svg?v=2');
}
-.icon-delete,
-.icon-delete.no-permission:hover,
-.icon-delete.no-permission:focus {
+.icon-delete {
background-image: url('../img/actions/delete.svg?v=1');
+ &.no-permission {
+ &:hover, &:focus {
+ background-image: url('../img/actions/delete.svg?v=1');
+ }
+ }
+ &:hover, &:focus {
+ background-image: url('../img/actions/delete-hover.svg?v=1');
+ }
}
-.icon-delete:hover,
-.icon-delete:focus {
- background-image: url('../img/actions/delete-hover.svg?v=1');
-}
+
.icon-delete-white {
background-image: url('../img/actions/delete-white.svg?v=1');
+ &.no-permission {
+ &:hover, &:focus {
+ background-image: url('../img/actions/delete-white.svg?v=1');
+ }
+ }
+ &:hover, &:focus {
+ background-image: url('../img/actions/delete-hover.svg?v=1');
+ }
}
.icon-details {
@@ -183,6 +185,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-download {
background-image: url('../img/actions/download.svg?v=1');
}
+
.icon-download-white {
background-image: url('../img/actions/download-white.svg?v=1');
}
@@ -194,9 +197,11 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-error {
background-image: url('../img/actions/error.svg?v=1');
}
+
.icon-error-white {
background-image: url('../img/actions/error-white.svg?v=1');
}
+
.icon-error-color {
background-image: url('../img/actions/error-color.svg?v=1');
}
@@ -208,6 +213,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-fullscreen {
background-image: url('../img/actions/fullscreen.svg?v=1');
}
+
.icon-fullscreen-white {
background-image: url('../img/actions/fullscreen-white.svg?v=2');
}
@@ -219,6 +225,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-info {
background-image: url('../img/actions/info.svg?v=1');
}
+
.icon-info-white {
background-image: url('../img/actions/info-white.svg?v=1');
}
@@ -238,6 +245,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-more {
background-image: url('../img/actions/more.svg?v=1');
}
+
.icon-more-white {
background-image: url('../img/actions/more-white.svg?v=1');
}
@@ -249,6 +257,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-pause {
background-image: url('../img/actions/pause.svg?v=1');
}
+
.icon-pause-big {
background-image: url('../img/actions/pause-big.svg?v=1');
}
@@ -256,15 +265,19 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-play {
background-image: url('../img/actions/play.svg?v=1');
}
+
.icon-play-add {
background-image: url('../img/actions/play-add.svg?v=1');
}
+
.icon-play-big {
background-image: url('../img/actions/play-big.svg?v=1');
}
+
.icon-play-next {
background-image: url('../img/actions/play-next.svg?v=1');
}
+
.icon-play-previous {
background-image: url('../img/actions/play-previous.svg?v=1');
}
@@ -280,6 +293,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-search {
background-image: url('../img/actions/search.svg?v=1');
}
+
.icon-search-white {
background-image: url('../img/actions/search-white.svg?v=1');
}
@@ -291,6 +305,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-share {
background-image: url('../img/actions/share.svg?v=1');
}
+
.icon-shared {
background-image: url('../img/actions/shared.svg?v=1');
}
@@ -298,26 +313,32 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-sound {
background-image: url('../img/actions/sound.svg?v=1');
}
+
.icon-sound-off {
background-image: url('../img/actions/sound-off.svg?v=1');
}
-.icon-favorite {
+.icon-favorite {
background-image: url('../img/actions/star-dark.svg?v=1');
}
-.icon-star,
-.icon-starred:hover,
-.icon-starred:focus {
+.icon-star {
background-image: url('../img/actions/star.svg?v=1');
}
-.icon-starred,
-.icon-star:hover,
-.icon-star:focus {
+.icon-starred {
+ &:hover, &:focus {
+ background-image: url('../img/actions/star.svg?v=1');
+ }
background-image: url('../img/actions/starred.svg?v=1');
}
+.icon-star {
+ &:hover, &:focus {
+ background-image: url('../img/actions/starred.svg?v=1');
+ }
+}
+
.icon-tag {
background-image: url('../img/actions/tag.svg?v=1');
}
@@ -329,9 +350,11 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-triangle-e {
background-image: url('../img/actions/triangle-e.svg?v=1');
}
+
.icon-triangle-n {
background-image: url('../img/actions/triangle-n.svg?v=1');
}
+
.icon-triangle-s {
background-image: url('../img/actions/triangle-s.svg?v=1');
}
@@ -339,6 +362,7 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-upload {
background-image: url('../img/actions/upload.svg?v=1');
}
+
.icon-upload-white {
background-image: url('../img/actions/upload-white.svg?v=1');
}
@@ -350,12 +374,15 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-video {
background-image: url('../img/actions/video.svg?v=1');
}
+
.icon-video-white {
background-image: url('../img/actions/video-white.svg?v=2');
}
+
.icon-video-off {
background-image: url('../img/actions/video-off.svg?v=1');
}
+
.icon-video-off-white {
background-image: url('../img/actions/video-off-white.svg?v=1');
}
@@ -363,27 +390,28 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-view-close {
background-image: url('../img/actions/view-close.svg?v=1');
}
+
.icon-view-download {
background-image: url('../img/actions/view-download.svg?v=1');
}
+
.icon-view-next {
background-image: url('../img/actions/view-next.svg?v=1');
}
+
.icon-view-pause {
background-image: url('../img/actions/view-pause.svg?v=1');
}
+
.icon-view-play {
background-image: url('../img/actions/view-play.svg?v=1');
}
+
.icon-view-previous {
background-image: url('../img/actions/view-previous.svg?v=1');
}
-
-
-
-/* places icons */
-
+/* PLACES ------------------------------------------------------------------- */
.icon-calendar-dark {
background-image: url('../img/places/calendar-dark.svg?v=1');
}
@@ -395,20 +423,21 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-files {
background-image: url('../img/places/files.svg?v=1');
}
+
.icon-files-dark {
background-image: url('../img/places/files-dark.svg?v=1');
}
-.icon-file,
-.icon-filetype-text {
+
+.icon-file, .icon-filetype-text {
background-image: url('../img/filetypes/text.svg?v=1');
}
-.icon-folder,
-.icon-filetype-folder {
+
+.icon-folder, .icon-filetype-folder {
background-image: url('../img/filetypes/folder.svg?v=1');
}
.icon-filetype-folder-drag-accept {
- background-image: url('../img/filetypes/folder-drag-accept.svg?v=1')!important;
+ background-image: url('../img/filetypes/folder-drag-accept.svg?v=1') !important;
}
.icon-home {
diff --git a/core/css/inputs.css b/core/css/inputs.css
deleted file mode 100644
index 4ca6c823cc9..00000000000
--- a/core/css/inputs.css
+++ /dev/null
@@ -1,472 +0,0 @@
-/* INPUTS */
-
-/* specifically override browser styles */
-input, textarea, select, button {
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
-}
-
-.select2-container-multi .select2-choices .select2-search-field input,
-.select2-search input,
-.ui-widget {
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif !important;
-}
-
-input[type="text"],
-input[type="password"],
-input[type="search"],
-input[type="number"],
-input[type="email"],
-input[type="tel"],
-input[type="url"],
-input[type="time"],
-input[type="date"],
-textarea,
-select,
-button, .button,
-input[type="submit"],
-input[type="button"],
-#quota,
-.pager li a {
- width: 130px;
- margin: 3px 3px 3px 0;
- padding: 7px 6px 5px;
- font-size: 13px;
- background-color: #fff;
- color: #333;
- border: 1px solid #ddd;
- outline: none;
- border-radius: 3px;
-}
-input[type="hidden"] {
- height: 0;
- width: 0;
-}
-input[type="text"],
-input[type="password"],
-input[type="search"],
-input[type="number"],
-input[type="email"],
-input[type="tel"],
-input[type="url"],
-input[type="time"],
-textarea {
- background: #fff;
- color: #555;
- cursor: text;
- font-family: inherit; /* use default ownCloud font instead of default textarea monospace */
-}
-input[type="text"],
-input[type="password"],
-input[type="search"],
-input[type="number"],
-input[type="email"],
-input[type="tel"],
-input[type="url"],
-input[type="time"] {
- -webkit-appearance:textfield;
- -moz-appearance:textfield;
- box-sizing:content-box;
-}
-input[type="text"]:hover, input[type="text"]:focus, input[type="text"]:active,
-input[type="password"]:hover, input[type="password"]:focus, input[type="password"]:active,
-input[type="number"]:hover, input[type="number"]:focus, input[type="number"]:active,
-input[type="search"]:hover, input[type="search"]:focus, input[type="search"]:active,
-input[type="email"]:hover, input[type="email"]:focus, input[type="email"]:active,
-input[type="tel"]:hover, input[type="tel"]:focus, input[type="tel"]:active,
-input[type="url"]:hover, input[type="url"]:focus, input[type="url"]:active,
-input[type="time"]:hover, input[type="time"]:focus, input[type="time"]:active,
-textarea:hover, textarea:focus, textarea:active {
- color: #333;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-
-input[type="checkbox"].checkbox {
- position: absolute;
- left:-10000px;
- top: auto;
- width: 1px;
- height: 1px;
- overflow: hidden;
-}
-
-input[type="checkbox"].checkbox + label:before {
- content: "";
- display: inline-block;
-
- height: 20px;
- width: 20px;
- vertical-align: middle;
-
- background: url('../img/actions/checkbox.svg') left top no-repeat;
-}
-
-input[type="checkbox"].checkbox:disabled +label:before { opacity: .6; }
-
-input[type="checkbox"].checkbox.u-left +label:before { float: left; }
-input[type="checkbox"].checkbox.u-hidden + label:before { display: none; }
-
-input[type="checkbox"].checkbox:checked + label:before {
- background-image: url('../img/actions/checkbox-checked.svg');
-}
-
-input[type="checkbox"].checkbox:indeterminate + label:before {
- background-image: url('../img/actions/checkbox-mixed.svg');
-}
-
-input[type="checkbox"].checkbox:disabled + label:before {
- background-image: url('../img/actions/checkbox-disabled.svg');
-}
-
-input[type="checkbox"].checkbox:checked:disabled + label:before {
- background-image: url('../img/actions/checkbox-checked-disabled.svg');
-}
-
-input[type="checkbox"].checkbox:indeterminate:disabled + label:before {
- background-image: url('../img/actions/checkbox-mixed-disabled.svg');
-}
-
-input[type="checkbox"].checkbox--white + label:before {
- background-image: url('../img/actions/checkbox-white.svg');
-}
-
-input[type="checkbox"].checkbox--white:checked + label:before {
- background-image: url('../img/actions/checkbox-checked-white.svg');
-}
-
-input[type="checkbox"].checkbox--white:indeterminate + label:before {
- background-image: url('../img/actions/checkbox-mixed-white.svg');
-}
-
-input[type="checkbox"].checkbox--white:disabled + label:before {
- background-image: url('../img/actions/checkbox-disabled-white.svg');
-}
-
-input[type="checkbox"].checkbox--white:checked:disabled + label:before {
- background-image: url('../img/actions/checkbox-checked-disabled.svg');
-}
-
-input[type="checkbox"].checkbox--white:indeterminate:disabled + label:before {
- background-image: url('../img/actions/checkbox-mixed-disabled.svg');
-}
-
-input[type="checkbox"].checkbox:hover+label:before, input[type="checkbox"]:focus+label:before {
- color:#111 !important;
-}
-
-input[type="radio"].radio {
- position: absolute;
- left:-10000px;
- top: auto;
- width: 1px;
- height: 1px;
- overflow: hidden;
-}
-
-input[type="radio"].radio + label:before {
- content: "";
- display: inline-block;
-
- height: 20px;
- width: 20px;
- vertical-align: middle;
-
- background: url('../img/actions/radio.svg') left top no-repeat;
-}
-
-input[type="radio"].radio:checked + label:before {
- background-image: url('../img/actions/radio-checked.svg');
-}
-
-input[type="radio"].radio:disabled + label:before {
- background-image: url('../img/actions/radio-disabled.svg');
-}
-
-input[type="radio"].radio:checked:disabled + label:before {
- background-image: url('../img/actions/radio-checked-disabled.svg');
-}
-
-input[type="radio"].radio--white + label:before {
- background-image: url('../img/actions/radio-white.svg');
-}
-
-input[type="radio"].radio--white:checked + label:before {
- background-image: url('../img/actions/radio-checked-white.svg');
-}
-
-input[type="radio"].radio--white:disabled + label:before {
- background-image: url('../img/actions/radio-disabled.svg');
-}
-
-input[type="radio"].radio--white:checked:disabled + label:before {
- background-image: url('../img/actions/radio-checked-disabled.svg');
-}
-
-input[type="time"] {
- width: initial;
- height: 31px;
- box-sizing: border-box;
-}
-
-select {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- background: url('../../core/img/actions/triangle-s.svg') no-repeat right 8px center rgba(240, 240, 240, 0.90);
- outline: 0;
- padding-right: 24px !important;
-}
-
-select:hover {
- background-color: #fefefe;
-}
-
-
-/* select2 adjustments */
-#select2-drop {
- margin-top: -2px;
-}
-#select2-drop.select2-drop-active {
- border-color: #ddd;
-}
-#select2-drop .avatar {
- display: inline-block;
- margin-right: 8px;
- vertical-align: middle;
-}
-#select2-drop .avatar img,
-.select2-chosen .avatar img,
-#select2-drop .avatar,
-.select2-chosen .avatar {
- cursor: pointer;
-}
-#select2-drop .select2-search input {
- width: calc(100% - 14px);
- min-height: auto;
- background: url('../img/actions/search.svg') no-repeat right center !important;
- background-origin: content-box !important;
-}
-#select2-drop .select2-results {
- max-height: 250px;
- margin: 0;
- padding: 0;
-}
-#select2-drop .select2-results .select2-result-label {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-#select2-drop .select2-results .select2-result-label span {
- cursor: pointer;
-}
-#select2-drop .select2-results .select2-result,
-#select2-drop .select2-results .select2-no-results,
-#select2-drop .select2-results .select2-searching {
- position: relative;
- display: list-item;
- padding: 12px;
- background-color: #fff;
- cursor: pointer;
- color: #222;
-}
-#select2-drop .select2-results .select2-result.select2-selected {
- background-color: #f8f8f8;
-}
-#select2-drop .select2-results .select2-result.select2-highlighted {
- background-color: #f8f8f8;
- color: #000;
-}
-
-.select2-container-multi .select2-choices,
-.select2-container-multi.select2-container-active .select2-choices,
-.select2-container .select2-choice {
- box-shadow: none;
- white-space: nowrap;
- text-overflow: ellipsis;
- background: #fff;
- color: #555;
- box-sizing: content-box;
- border-radius: 3px;
- border: 1px solid #ddd;
- margin: 0;
- padding: 2px 0;
- min-height: auto;
-}
-.select2-container-multi .select2-choices .select2-search-choice,
-.select2-container-multi.select2-container-active .select2-choices .select2-search-choice,
-.select2-container .select2-choice .select2-search-choice {
- line-height: 20px;
- padding-left: 5px;
- background-image: none;
- background-color: #f8f8f8;
- border-color: #f8f8f8;
-}
-.select2-container-multi .select2-choices .select2-search-choice.select2-search-choice-focus, .select2-container-multi .select2-choices .select2-search-choice:hover,
-.select2-container-multi.select2-container-active .select2-choices .select2-search-choice.select2-search-choice-focus,
-.select2-container-multi.select2-container-active .select2-choices .select2-search-choice:hover,
-.select2-container .select2-choice .select2-search-choice.select2-search-choice-focus,
-.select2-container .select2-choice .select2-search-choice:hover {
- background-color: #f0f0f0;
- border-color: #f0f0f0;
-}
-.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close,
-.select2-container-multi.select2-container-active .select2-choices .select2-search-choice .select2-search-choice-close,
-.select2-container .select2-choice .select2-search-choice .select2-search-choice-close {
- display: none;
-}
-.select2-container-multi .select2-choices .select2-search-field input,
-.select2-container-multi.select2-container-active .select2-choices .select2-search-field input,
-.select2-container .select2-choice .select2-search-field input {
- line-height: 20px;
-}
-
-.select2-container {
- margin: 3px 3px 3px 0;
-}
-.select2-container.select2-container-multi .select2-choices {
- display: flex;
- flex-wrap: wrap;
-}
-.select2-container.select2-container-multi .select2-choices li {
- float: none;
-}
-.select2-container .select2-choice {
- padding-left: 38px;
-}
-.select2-container .select2-choice .select2-arrow {
- background: none;
- border-radius: 0;
- border: none;
-}
-.select2-container .select2-choice .select2-arrow b {
- background: url('../img/actions/triangle-s.svg') no-repeat center !important;
- opacity: .5;
-}
-.select2-container .select2-choice:hover .select2-arrow b,
-.select2-container .select2-choice:focus .select2-arrow b,
-.select2-container .select2-choice:active .select2-arrow b {
- opacity: .7;
-}
-
-
-/* jQuery UI fixes */
-.ui-menu {
- padding: 0;
-}
-.ui-menu .ui-menu-item a.ui-state-focus, .ui-menu .ui-menu-item a.ui-state-active {
- font-weight: inherit;
- margin: 0;
-}
-.ui-widget-content {
- background: #fff;
- border-top: none;
-}
-.ui-corner-all {
- border-radius: 0;
- border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
- border: none;
- background: #f8f8f8;
-}
-
-
-
-/* correctly align images inside of buttons */
-input img, button img, .button img {
- vertical-align: text-bottom;
-}
-
-input[type="submit"].enabled {
- background-color: #66f866;
- border: 1px solid #5e5;
-}
-
-.input-button-inline {
- position: absolute !important;
- right: 0;
- background-color: transparent !important;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
- opacity: .3;
-}
-
-
-/* BUTTONS */
-input[type="submit"], input[type="button"],
-button, .button,
-#quota, select, .pager li a {
- width: auto;
- min-width: 25px;
- padding: 5px;
- background-color: rgba(240,240,240,.9);
- font-weight: 600;
- color: #555;
- border: 1px solid rgba(240,240,240,.9);
- cursor: pointer;
-}
-select, .button.multiselect {
- font-weight: 400;
-}
-input[type="submit"]:hover, input[type="submit"]:focus,
-input[type="button"]:hover, input[type="button"]:focus,
-button:hover, button:focus,
-.button:hover, .button:focus,
-.button a:focus,
-select:hover, select:focus, select:active {
- background-color: rgba(255, 255, 255, .95);
- color: #111;
-}
-input[type="submit"] img, input[type="button"] img, button img, .button img { cursor:pointer; }
-#header .button {
- border: none;
- box-shadow: none;
-}
-
-/* disabled input fields and buttons */
-input:disabled, input:disabled:hover, input:disabled:focus,
-button:disabled, button:disabled:hover, button:disabled:focus,
-.button:disabled, .button:disabled:hover, .button:disabled:focus,
-a.disabled, a.disabled:hover, a.disabled:focus,
-textarea:disabled {
- background-color: rgba(230,230,230,.9);
- color: #999;
- cursor: default;
-}
-input:disabled+label, input:disabled:hover+label, input:disabled:focus+label {
- color: #999 !important;
- cursor: default;
-}
-
-/* Primary action button, use sparingly */
-.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary {
- border: 1px solid #0082c9;
- background-color: #00a2e9;
- color: #fff;
-}
-.primary:hover, input[type="submit"].primary:hover, input[type="button"].primary:hover, button.primary:hover, .button.primary:hover,
-.primary:focus, input[type="submit"].primary:focus, input[type="button"].primary:focus, button.primary:focus, .button.primary:focus {
- background-color: #0092d9;
- color: #fff;
-}
-.primary:active, input[type="submit"].primary:active, input[type="button"].primary:active, button.primary:active, .button.primary:active,
-.primary:disabled, input[type="submit"].primary:disabled, input[type="button"].primary:disabled, button.primary:disabled, .button.primary:disabled,
-.primary:disabled:hover, input[type="submit"].primary:disabled:hover, input[type="button"].primary:disabled:hover, button.primary:disabled:hover, .button.primary:disabled:hover,
-.primary:disabled:focus, input[type="submit"].primary:disabled:focus, input[type="button"].primary:disabled:focus, button.primary:disabled:focus, .button.primary:disabled:focus {
- background-color: #00a2e9;
- color: #bbb;
-}
-
-@keyframes shake {
- 0% { transform: translate(-5px, 0); }
- 20% { transform: translate(5px, 0); }
- 40% { transform: translate(-5px, 0); }
- 60% { transform: translate(5px, 0); }
- 80% { transform: translate(-5px, 0); }
- 100% { transform: translate(5px, 0); }
-}
-.shake {
- animation-name: shake;
- animation-duration: .3s;
- animation-timing-function: ease-out;
-}
diff --git a/core/css/inputs.scss b/core/css/inputs.scss
new file mode 100644
index 00000000000..f7b9cdb723c
--- /dev/null
+++ b/core/css/inputs.scss
@@ -0,0 +1,512 @@
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
+ * @copyright Copyright (c) 2015, Joas Schilling <nickvergessen@owncloud.com>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+ /* Specifically override browser styles */
+input, textarea, select, button {
+ font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
+}
+.select2-container-multi .select2-choices .select2-search-field input, .select2-search input, .ui-widget {
+ font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif !important;
+}
+
+/* Simple selector to allow easy overriding */
+select,
+button,
+input,
+textarea {
+ width: 130px;
+ min-height: 32px;
+ box-sizing: border-box;
+}
+
+/* Default global values */
+select,
+button, .button,
+input:not([type='range']),
+textarea,
+#quota, .pager li a {
+ margin: 3px 3px 3px 0;
+ padding: 7px 6px;
+ font-size: 13px;
+ background-color: #fff;
+ color: #333;
+ border: 1px solid #ddd;
+ outline: none;
+ border-radius: 3px;
+ &:not(:disabled):not(.primary) {
+ /* no border on quota */
+ &:not(#quota):hover,
+ &:focus,
+ &.active {
+ /* active class used for multiselect */
+ border-color: #0082c9;
+ outline: none;
+ }
+ &:active {
+ outline: none;
+ background-color: #fff;
+ }
+ }
+ &:disabled {
+ background-color: #eee;
+ color: #999;
+ cursor: default;
+ opacity: 0.5;
+ }
+ /* Primary action button, use sparingly */
+ &.primary {
+ border: 1px solid #0082c9;
+ background-color: #00a2e9;
+ color: #fff;
+ cursor: pointer;
+ &:not(:disabled) {
+ &:hover,
+ &:focus {
+ background-color: #0092d9;
+ }
+ &:active {
+ background-color: #00a2e9;
+ }
+ }
+ &:disabled {
+ background-color: #00a2e9;
+ color: #bbb;
+ }
+ }
+}
+
+/* Specific override */
+input {
+ &:not([type='radio']):not([type='checkbox']):not([type='range']):not([type='submit']):not([type='button']):not([type='reset']):not([type='color']):not([type='file']):not([type='image']) {
+ -webkit-appearance: textfield;
+ -moz-appearance: textfield;
+ }
+ &[type='radio'],
+ &[type='checkbox'],
+ &[type='file'],
+ &[type='image'] {
+ height: auto;
+ width: auto;
+ }
+ /* Color input doesn't respect the initial height
+ so we need to set a custom one */
+ &[type='color'] {
+ margin: 3px;
+ padding: 0 2px;
+ min-height: 30px;
+ width: 40px;
+ cursor: pointer;
+ }
+ &[type='hidden'] {
+ height: 0;
+ width: 0;
+ }
+ &[type='time'] {
+ width: initial;
+ }
+}
+
+/* 'Click' inputs */
+select,
+button, .button,
+input[type='button'],
+input[type='submit'],
+input[type='reset'] {
+ padding: 6px 12px;
+ width: auto;
+ min-height: 34px;
+ cursor: pointer;
+ box-sizing: border-box;
+ background-color: #fafafa;
+}
+
+/* Buttons */
+button, .button,
+input[type='button'],
+input[type='submit'],
+input[type='reset'] {
+ font-weight: bold;
+ /* Get rid of the ugly firefox dotted line */
+ &::-moz-focus-inner {
+ border: 0;
+ }
+}
+button, .button {
+ > span {
+ /* icon position inside buttons */
+ &[class^='icon-'],
+ &[class*=' icon-'] {
+ display: inline-block;
+ vertical-align: text-bottom;
+ opacity: 0.5;
+ }
+ }
+}
+
+textarea {
+ color: #555;
+ cursor: text;
+ font-family: inherit;
+ height: auto;
+ &:not(:disabled) {
+ &:active,
+ &:hover,
+ &:focus {
+ border-color: #ddd !important;
+ background-color: #fff !important;
+ }
+ }
+}
+
+/* Override the ugly select arrow */
+select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: url('../img/actions/triangle-s.svg') no-repeat right 4px center;
+ background-color: inherit;
+ outline: 0;
+ padding-right: 24px !important;
+}
+
+/* Various Fixes */
+button img,
+.button img {
+ cursor: pointer;
+}
+#quota {
+ color: #555;
+}
+select,
+.button.multiselect {
+ font-weight: 400;
+}
+
+/* Radio & Checkboxes */
+input {
+ &[type='checkbox'],
+ &[type='radio'] {
+ &.radio,
+ &.checkbox {
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+ + label {
+ user-select: none;
+ }
+ &:disabled + label,
+ &:disabled + label:before {
+ cursor: default;
+ }
+ + label:before {
+ content: '';
+ display: inline-block;
+ height: 12px;
+ width: 12px;
+ vertical-align: middle;
+ border-radius: 50%;
+ margin: 3px;
+ margin-top: 1px;
+ border: 1px solid #888;
+ }
+ &:not(:disabled):not(:checked) + label:hover:before,
+ &:focus + label:before {
+ border-color: #0082c9;
+ }
+ &:checked + label:before,
+ &.checkbox:indeterminate + label:before {
+ /* ^ :indeterminate have a strange behavior on radio,
+ so we respecified the checkbox class again to be safe */
+ box-shadow: inset 0px 0px 0px 2px #fff;
+ background-color: #0082c9;
+ border-color: #0082c9
+ }
+ &:disabled + label:before {
+ background-color: #ccc !important; /* override other status */
+ }
+ &:checked:disabled + label:before {
+ box-shadow: inset 0px 0px 0px 2px #fff;
+ border-color: #aaa;
+ background-color: #bbb;
+ }
+ }
+ &.checkbox {
+ + label:before {
+ border-radius: 1px;
+ height: 10px;
+ width: 10px;
+ box-shadow: none !important;
+ background-position: center;
+ }
+ &:checked + label:before {
+ background-image: url('../img/actions/checkbox-mark.svg');
+ }
+ &:indeterminate + label:before {
+ background-image: url('../img/actions/checkbox-mixed.svg');
+ }
+ &:indeterminate:disabled + label:before {
+ border-color: #888;
+ }
+ }
+ &.radio--white,
+ &.checkbox--white {
+ + label:before {
+ border-color: #aaa;
+ }
+ &:not(:disabled):not(:checked) + label:hover:before,
+ &:focus + label:before {
+ border-color: #fff;
+ }
+ &:checked + label:before,
+ &.checkbox:indeterminate + label:before {
+ /* ^ :indeterminate have a strange behavior on radio,
+ so we respecified the checkbox class again to be safe */
+ box-shadow: inset 0px 0px 0px 2px #000;
+ background-color: #eee;
+ border-color: #eee
+ }
+ &:disabled + label:before {
+ background-color: #666 !important; /* override other status */
+ border-color: #999 !important; /* override other status */
+ }
+ &:checked:disabled + label:before {
+ box-shadow: inset 0px 0px 0px 2px #000;
+ border-color: #666;
+ background-color: #222;
+ }
+ }
+ &.checkbox--white {
+ &:checked + label:before {
+ background-image: url('../img/actions/checkbox-mark-white.svg');
+ }
+ &:indeterminate + label:before {
+ background-image: url('../img/actions/checkbox-mixed-white.svg');
+ }
+ &:checked:disabled + label:after {
+ border-color: #aaa;
+ }
+ &:indeterminate:disabled + label:after {
+ background-color: #aaa;
+ }
+ }
+ }
+}
+
+/* Select2 overriding. Merged to core with vendor stylesheet */
+.select2-drop {
+ margin-top: -2px;
+ &.select2-drop-active {
+ border-color: #ddd;
+ }
+ .avatar {
+ display: inline-block;
+ margin-right: 8px;
+ vertical-align: middle;
+ img {
+ cursor: pointer;
+ }
+ }
+ .select2-search input {
+ min-height: auto;
+ background: url('../img/actions/search.svg') no-repeat right center !important;
+ background-origin: content-box !important;
+ }
+ .select2-results {
+ max-height: 250px;
+ margin: 0;
+ padding: 0;
+ .select2-result-label {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ span {
+ cursor: pointer;
+ }
+ }
+ .select2-result,
+ .select2-no-results,
+ .select2-searching {
+ position: relative;
+ display: list-item;
+ padding: 12px;
+ background-color: #fff;
+ cursor: pointer;
+ color: #222;
+ }
+ .select2-result {
+ &.select2-selected {
+ background-color: #f8f8f8;
+ }
+ &.select2-highlighted {
+ background-color: #f8f8f8;
+ color: #000;
+ }
+ }
+ }
+}
+.select2-chosen,
+#select2-drop {
+ .avatar,
+ .avatar img {
+ cursor: pointer;
+ }
+}
+.select2-container-multi {
+ .select2-choices,
+ &.select2-container-active .select2-choices {
+ box-shadow: none;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: #fff;
+ color: #555;
+ box-sizing: content-box;
+ border-radius: 3px;
+ border: 1px solid #ddd;
+ margin: 0;
+ padding: 2px 0;
+ min-height: auto;
+ .select2-search-choice {
+ line-height: 20px;
+ padding-left: 5px;
+ &.select2-search-choice-focus,
+ &:hover,
+ &:active,
+ & {
+ background-image: none;
+ background-color: #fff;
+ color: #333;
+ border: 1px solid #ddd;
+ }
+ .select2-search-choice-close {
+ display: none;
+ }
+ }
+ .select2-search-field input {
+ line-height: 20px;
+ }
+ }
+}
+.select2-container {
+ margin: 3px 3px 3px 0;
+ &.select2-container-multi .select2-choices {
+ display: flex;
+ flex-wrap: wrap;
+ li {
+ float: none;
+ }
+ }
+ .select2-choice {
+ box-shadow: none;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: #fff;
+ color: #555;
+ box-sizing: content-box;
+ border-radius: 3px;
+ border: 1px solid #ddd;
+ margin: 0;
+ padding: 2px 0;
+ padding-left: 6px;
+ min-height: auto;
+ .select2-search-choice {
+ line-height: 20px;
+ padding-left: 5px;
+ background-image: none;
+ background-color: #f8f8f8;
+ border-color: #f8f8f8;
+ .select2-search-choice-close {
+ display: none;
+ }
+ &.select2-search-choice-focus,
+ &:hover {
+ background-color: #f0f0f0;
+ border-color: #f0f0f0;
+ }
+ }
+ .select2-arrow {
+ background: none;
+ border-radius: 0;
+ border: none;
+ b {
+ background: url('../img/actions/triangle-s.svg') no-repeat center !important;
+ opacity: .5;
+ }
+ }
+ &:hover .select2-arrow b,
+ &:focus .select2-arrow b,
+ &:active .select2-arrow b {
+ opacity: .7;
+ }
+ .select2-search-field input {
+ line-height: 20px;
+ }
+ }
+}
+
+/* Select menus - TODO: move to jquery-ui-fixes.css
+----------------------------------*/
+.ui-menu {
+ padding: 0;
+ .ui-menu-item a {
+ &.ui-state-focus, &.ui-state-active {
+ font-weight: inherit;
+ margin: 0;
+ }
+ }
+}
+
+.ui-widget-content {
+ background: #fff;
+ border-top: none;
+}
+
+.ui-corner-all {
+ border-radius: 0;
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
+ border: none;
+ background: #f8f8f8;
+}
+
+/* Animation */
+@keyframes shake {
+ 10%,
+ 90% {
+ transform: translate(-1px);
+ }
+ 20%,
+ 80% {
+ transform: translate(2px);
+ }
+ 30%,
+ 50%,
+ 70% {
+ transform: translate(-4px);
+ }
+ 40%,
+ 60% {
+ transform: translate(4px);
+ }
+}
+.shake {
+ animation-name: shake;
+ animation-duration: .7s;
+ animation-timing-function: ease-out;
+}
diff --git a/core/css/multiselect.css b/core/css/multiselect.css
deleted file mode 100644
index 8bcbd0e563d..00000000000
--- a/core/css/multiselect.css
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright (c) 2011, Jan-Christoph Borchardt, http: //jancborchardt.net
-This file is licensed under the Affero General Public License version 3 or later.
-See the COPYING-README file. */
-
-ul.multiselectoptions {
- background-color: #fff;
- border: 1px solid #ddd;
- border-top: none;
- box-shadow: 0 1px 1px #ddd;
- padding-top: 8px;
- position: absolute;
- max-height: 20em;
- overflow-y: auto;
- z-index: 49;
-}
-
-ul.multiselectoptions.down {
- border-bottom-left-radius: 8px;
- border-bottom-right-radius: 8px;
- width: 100%; /* do not cut off group names */
- -webkit-box-shadow: 0px 0px 20px rgba(29,45,68,.4);
- -moz-box-shadow: 0px 0px 20px rgba(29,45,68,.4);
- box-shadow: 0px 0px 20px rgba(29,45,68,.4);
-}
-
-ul.multiselectoptions.up {
- border-top-left-radius: 8px;
- border-top-right-radius: 8px;
-}
-
-ul.multiselectoptions>li {
- overflow: hidden;
- white-space: nowrap;
- margin-left: 7px;
-}
-ul.multiselectoptions > li input[type='checkbox']+label {
- font-weight: normal;
- display: inline-block;
- width: 100%;
- padding: 5px 27px;
- margin-left: -27px; /* to have area around checkbox clickable as well */
- text-overflow: ellipsis;
- overflow: hidden;
-}
-ul.multiselectoptions > li input[type='checkbox']:checked+label {
- font-weight: bold;
-}
-
-div.multiselect, select.multiselect {
- display: inline-block;
- max-width: 200px;
- min-width: 150px !important;
- padding-right: 10px;
- min-height: 20px;
- position: relative;
- vertical-align: bottom;
-}
-
-/* To make a select look like a multiselect until it's initialized */
-select.multiselect {
- height: 30px;
- min-width: 113px;
-}
-
-div.multiselect.active {
- background-color: #fff;
- position: relative;
- z-index: 50;
-}
-
-div.multiselect.up {
- border-top: 0 none;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-div.multiselect.down {
- border-bottom: none;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-div.multiselect>span:first-child {
- float: left;
- margin-right: 32px;
- overflow: hidden;
- text-overflow: ellipsis;
- width: 90%;
- white-space: nowrap;
-}
-
-div.multiselect>span:last-child {
- position: absolute;
- right: 8px;
- top: 8px;
-}
-
-ul.multiselectoptions input.new {
- padding-bottom: 3px;
- padding-top: 3px;
- margin: 0;
-}
-
-ul.multiselectoptions > li.creator {
- padding: 10px;
- margin: 0;
- font-weight: bold;
-}
-ul.multiselectoptions > li.creator > input {
- width: 95% !important; /* do not constrain size of text input */
- padding: 5px;
- margin: -5px;
-}
diff --git a/core/css/multiselect.scss b/core/css/multiselect.scss
new file mode 100644
index 00000000000..4b5d9cb6cf3
--- /dev/null
+++ b/core/css/multiselect.scss
@@ -0,0 +1,128 @@
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Sergio Bertolín <sbertolin@solidgear.es>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2014, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2013, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2013, raghunayyar <me@iraghu.com>
+ * @copyright Copyright (c) 2013, Victor Dubiniuk <victor.dubiniuk@gmail.com>
+ * @copyright Copyright (c) 2013, kondou <kondou@ts.unde.re>
+ * @copyright Copyright (c) 2012, Thomas Tanghus <thomas@tanghus.net>
+ * @copyright Copyright (c) 2012, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2012, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+ul.multiselectoptions {
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-top: none;
+ box-shadow: 0 1px 1px #ddd;
+ padding-top: 8px;
+ position: absolute;
+ max-height: 20em;
+ overflow-y: auto;
+ z-index: 49;
+ &.down {
+ border-bottom-left-radius: 8px;
+ border-bottom-right-radius: 8px;
+ width: 100%;
+ /* do not cut off group names */
+ -webkit-box-shadow: 0px 0px 20px rgba(29, 45, 68, 0.4);
+ -moz-box-shadow: 0px 0px 20px rgba(29, 45, 68, 0.4);
+ box-shadow: 0px 0px 20px rgba(29, 45, 68, 0.4);
+ }
+ &.up {
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ }
+ > li {
+ overflow: hidden;
+ white-space: nowrap;
+ margin-left: 7px;
+ input[type='checkbox'] {
+ + label {
+ font-weight: normal;
+ display: inline-block;
+ width: 100%;
+ padding: 5px 27px;
+ margin-left: -27px;
+ /* to have area around checkbox clickable as well */
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+ &:checked + label {
+ font-weight: bold;
+ }
+ }
+ }
+ input.new {
+ padding-bottom: 3px;
+ padding-top: 3px;
+ margin: 0;
+ }
+ > li.creator {
+ padding: 10px;
+ margin: 0;
+ font-weight: bold;
+ > input {
+ width: 95% !important;
+ /* do not constrain size of text input */
+ padding: 5px;
+ margin: -5px;
+ }
+ }
+}
+
+div.multiselect,
+select.multiselect {
+ display: inline-block;
+ max-width: 200px;
+ min-width: 150px !important;
+ padding-right: 10px;
+ min-height: 20px;
+ position: relative;
+ vertical-align: bottom;
+}
+
+select.multiselect {
+ height: 30px;
+ min-width: 113px;
+}
+
+/* To make a select look like a multiselect until it's initialized */
+div.multiselect {
+ &.active {
+ background-color: #fff;
+ position: relative;
+ z-index: 50;
+ }
+ &.up {
+ border-top: 0 none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+ &.down {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ > span {
+ &:first-child {
+ float: left;
+ margin-right: 32px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ width: 90%;
+ white-space: nowrap;
+ }
+ &:last-child {
+ position: absolute;
+ right: 8px;
+ top: 8px;
+ }
+ }
+}
diff --git a/core/css/share.css b/core/css/share.css
deleted file mode 100644
index eba22cf743e..00000000000
--- a/core/css/share.css
+++ /dev/null
@@ -1,199 +0,0 @@
-/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
- This file is licensed under the Affero General Public License version 3 or later.
- See the COPYING-README file. */
-
-#dropdown {
- background: #eee;
- border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
- box-shadow: 0 2px 3px rgba(50, 50, 50, .4);
- display: block;
- margin-right: 0;
- position: absolute;
- right: 0;
- width: 420px;
- z-index: 500;
- padding: 16px;
-}
-
-@media only screen and (min-width: 768px) and (max-width: 990px) {
- #dropdown {
- /* this limits the dropdown to float below the sidebar for mid narrow screens */
- left: 20px;
- }
-}
-
-.shareTabView .unshare.icon-loading-small {
- margin-top: 1px;
-}
-
-.shareTabView .shareWithLoading,
-.shareTabView .linkShare .icon-loading-small {
- display: inline-block !important;
- padding-left: 10px;
-}
-.shareTabView .shareWithLoading {
- position: relative;
- right: 70px;
- top: 2px;
-}
-.shareTabView .icon-loading-small.hidden {
- display: none !important;
-}
-
-.shareTabView .avatar {
- margin-right: 8px;
- display: inline-block;
- overflow: hidden;
- vertical-align: middle;
- width: 32px;
- height: 32px;
-}
-
-.share-autocomplete-item {
- display: flex;
-}
-.share-autocomplete-item .autocomplete-item-text {
- margin-left: 10px;
- margin-right: 10px;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- line-height: 32px;
- vertical-align: middle;
-}
-
-#shareWithList {
- list-style-type:none;
- padding:8px;
-}
-
-#shareWithList li {
- padding-top: 10px;
- padding-bottom: 10px;
- font-weight: bold;
- line-height: 21px;
- white-space: normal;
- width: 100%;
-}
-
-#shareWithList .sharingOptionsGroup {
- flex-shrink: 0;
- position: relative;
-}
-
-#shareWithList .sharingOptionsGroup .popovermenu {
- right: -6px;
- top: 40px;
- padding: 3px 6px;
-}
-
-#shareWithList .shareOption {
- white-space: nowrap;
- display: inline-block;
-}
-
-#shareWithList .unshare img, #shareWithList .showCruds img {
- vertical-align:text-bottom; /* properly align icons */
-}
-
-#shareWithList label input[type=checkbox]{
- margin-left: 0;
- position: relative;
-}
-#shareWithList .username{
- padding-right: 8px;
- white-space: nowrap;
- text-overflow: ellipsis;
- display: inline-block;
- overflow: hidden;
- vertical-align: middle;
- flex-grow: 5;
-}
-#shareWithList li label{
- margin-right: 8px;
-}
-.shareTabView label {
- font-weight:400;
- white-space: nowrap;
-}
-
-.shareTabView input[type="checkbox"] {
- margin:0 3px 0 8px;
- vertical-align: middle;
-}
-
-a.showCruds {
- display:inline;
- opacity:.5;
-}
-
-a.unshare {
- display:inline-block;
- opacity:.5;
- padding: 10px;
-}
-
-#link {
- border-top:1px solid #ddd;
- padding-top:8px;
-}
-
-.shareTabView input[type="submit"] {
- margin-left: 7px;
-}
-
-.shareTabView form {
- font-size: 100%;
- margin-left: 0;
- margin-right: 0;
-}
-
-.shareTabView .error {
- color: #e9322d;
- border-color: #e9322d;
- box-shadow: 0 0 6px #f8b9b7;
-}
-
-#link #showPassword img {
- padding-left:5px;
- width:12px;
-}
-
-.reshare,#link label,
-#expiration label {
- display: inline-block;
- padding: 6px 4px;
-}
-
-a.showCruds:hover,a.unshare:hover {
- opacity:1;
-}
-
-#defaultExpireMessage, /* fix expire message going out of box */
-.reshare { /* fix shared by text going out of box */
- white-space:normal;
-}
-
-#defaultExpireMessage { /* show message on new line */
- display: block;
- padding-left: 4px;
- /* TODO: style the dropdown in a proper way - border-box, etc. */
- width: 90%;
-}
-
-.ui-autocomplete { /* limit dropdown height to 4 1/2 entries */
- max-height: 200px;
- overflow-y: auto;
- overflow-x: hidden;
-}
-
-.notCreatable {
- padding-left: 12px;
- padding-top: 12px;
- color: #999;
-}
-
-.shareTabView .mailView .icon-mail {
- opacity: 0.5;
-}
diff --git a/core/css/share.scss b/core/css/share.scss
new file mode 100644
index 00000000000..8852ad2748e
--- /dev/null
+++ b/core/css/share.scss
@@ -0,0 +1,181 @@
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Julia Bode <julia.bode@lulisaur.us>
+ * @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
+ * @copyright Copyright (c) 2015, Roeland Jago Douma <roeland@famdouma.nl>
+ * @copyright Copyright (c) 2015, Morris Jobke <hey@morrisjobke.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+/* SHARE TAB STYLING -------------------------------------------------------- */
+.shareTabView {
+ .unshare.icon-loading-small {
+ margin-top: 1px;
+ }
+ .shareWithLoading, .linkShare .icon-loading-small {
+ display: inline-block !important;
+ padding-left: 10px;
+ }
+ .shareWithLoading {
+ position: relative;
+ right: 70px;
+ top: 2px;
+ }
+ .icon-loading-small.hidden {
+ display: none !important;
+ }
+ .avatar {
+ margin-right: 8px;
+ display: inline-block;
+ overflow: hidden;
+ vertical-align: middle;
+ width: 32px;
+ height: 32px;
+ }
+ label {
+ font-weight: 400;
+ white-space: nowrap;
+ }
+ input[type='checkbox'] {
+ margin: 0 3px 0 8px;
+ vertical-align: middle;
+ }
+ input[type='submit'] {
+ margin-left: 7px;
+ }
+ form {
+ font-size: 100%;
+ margin-left: 0;
+ margin-right: 0;
+ }
+ .error {
+ color: #e9322d;
+ border-color: #e9322d;
+ box-shadow: 0 0 6px #f8b9b7;
+ }
+ .mailView .icon-mail {
+ opacity: 0.5;
+ }
+}
+
+.share-autocomplete-item {
+ display: flex;
+ .autocomplete-item-text {
+ margin-left: 10px;
+ margin-right: 10px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ line-height: 32px;
+ vertical-align: middle;
+ }
+}
+
+#shareWithList {
+ list-style-type: none;
+ padding: 8px;
+ > li {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ font-weight: bold;
+ line-height: 21px;
+ white-space: normal;
+ width: 100%;
+ }
+ .sharingOptionsGroup {
+ flex-shrink: 0;
+ position: relative;
+ .popovermenu {
+ right: -11px;
+ top: 35px;
+ padding: 3px 6px;
+ }
+ }
+ .shareOption {
+ white-space: nowrap;
+ display: inline-block;
+ }
+ .unshare img,
+ .showCruds img {
+ vertical-align: text-bottom;
+ /* properly align icons */
+ }
+ label input[type=checkbox] {
+ margin-left: 0;
+ position: relative;
+ }
+ .username {
+ padding-right: 8px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ display: inline-block;
+ overflow: hidden;
+ vertical-align: middle;
+ flex-grow: 5;
+ }
+}
+
+a {
+ &.showCruds {
+ display: inline;
+ opacity: .5;
+ }
+ &.unshare {
+ display: inline-block;
+ opacity: .5;
+ padding: 10px;
+ }
+ &.showCruds:hover,
+ &.unshare:hover {
+ opacity: 1;
+ }
+}
+
+#link {
+ border-top: 1px solid #ddd;
+ padding-top: 8px;
+ #showPassword img {
+ padding-left: 5px;
+ width: 12px;
+ }
+}
+
+.reshare,
+#link label,
+#expiration label {
+ display: inline-block;
+ padding: 6px 4px;
+}
+
+#defaultExpireMessage, .reshare {
+ /* fix shared by text going out of box */
+ white-space: normal;
+}
+
+#defaultExpireMessage {
+ /* show message on new line */
+ display: block;
+ padding-left: 4px;
+ /* TODO: style the dropdown in a proper way - border-box, etc. */
+ width: 90%;
+}
+
+.ui-autocomplete {
+ /* limit dropdown height to 4 1/2 entries */
+ max-height: 200px;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.notCreatable {
+ padding-left: 12px;
+ padding-top: 12px;
+ color: #999;
+}
diff --git a/core/css/styles.css b/core/css/styles.css
deleted file mode 100644
index 5ea4ca53707..00000000000
--- a/core/css/styles.css
+++ /dev/null
@@ -1,999 +0,0 @@
-/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
- This file is licensed under the Affero General Public License version 3 or later.
- See the COPYING-README file. */
-
-html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { margin:0; padding:0; border:0; outline:0; font-weight:inherit; font-size:100%; font-family:inherit; vertical-align:baseline; cursor:default; }
-html, body { height:100%; }
-article, aside, dialog, figure, footer, header, hgroup, nav, section { display:block; }
-body { line-height:1.5; }
-table { border-collapse:separate; border-spacing:0; white-space:nowrap; }
-caption, th, td { text-align:left; font-weight:normal; }
-table, td, th { vertical-align:middle; }
-a { border:0; color:#000; text-decoration:none;}
-a, a *, input, input *, select, .button span, label { cursor:pointer; }
-ul { list-style:none; }
-
-body {
- background-color: #ffffff;
- font-weight: 400;
- font-size: .8em;
- line-height: 1.6em;
- font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
- color: #000;
- height: auto;
-}
-
-#body-login {
- text-align: center;
- background-color: #0082c9;
- background-image: url('../img/background.jpg?v=1');
- background-position: 50% 50%;
- background-repeat: no-repeat;
- background-size: cover;
-}
-
-.two-factor-header {
- text-align: center;
-}
-
-.two-factor-provider {
- text-align: center;
- width: 258px !important;
- display: inline-block;
- margin-bottom: 0 !important;
- background-color: rgba(0,0,0,0.3) !important;
- border: none !important;
-}
-
-.two-factor-link {
- display: inline-block;
- padding: 12px;
- color: rgba(255, 255, 255, .75);
-}
-
-.float-spinner {
- height: 32px;
- display: none;
-}
-#body-login .float-spinner {
- margin-top: -32px;
- padding-top: 32px;
-}
-
-#nojavascript {
- position: fixed;
- top: 0;
- bottom: 0;
- height: 100%;
- width: 100%;
- z-index: 9000;
- text-align: center;
- background-color: rgba(0,0,0,0.5);
- color: #fff;
- line-height: 125%;
- font-size: 24px;
-}
-#nojavascript div {
- display: block;
- position: relative;
- width: 50%;
- top: 35%;
- margin: 0px auto;
-}
-#nojavascript a {
- color: #fff;
- border-bottom: 2px dotted #fff;
-}
-#nojavascript a:hover,
-#nojavascript a:focus {
- color: #ddd;
-}
-
-/* SCROLLING */
-::-webkit-scrollbar {
- width: 5px;
-}
-::-webkit-scrollbar-track-piece {
- background-color: transparent;
-}
-::-webkit-scrollbar-thumb {
- background: #ddd;
- border-radius: 3px;
-}
-
-/* Searchbox */
-.searchbox input[type="search"] {
- position: relative;
- font-size: 1.2em;
- padding: 3px;
- padding-left: 25px;
- background: transparent url('../img/actions/search-white.svg?v=1') no-repeat 6px center;
- color: #fff;
- border: 0;
- border-radius: 3px;
- margin-top: 9px;
- float: right;
- width: 0;
- cursor: pointer;
- -webkit-transition: all 100ms;
- transition: all 100ms;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
- opacity: .7;
-}
-.searchbox input[type="search"]:focus,
-.searchbox input[type="search"]:active,
-.searchbox input[type="search"]:valid {
- color: #fff;
- width: 155px;
- max-width: 50%;
- cursor: text;
- background-color: #0082c9;
- border: 1px solid rgba(255, 255, 255, .5);
-}
-
-/* CONTENT ------------------------------------------------------------------ */
-#controls {
- box-sizing: border-box;
- position: fixed;
- top: 45px;
- right: 0;
- left: 0;
- height: 44px;
- width: 100%;
- padding: 0;
- margin: 0;
- background-color: rgba(255, 255, 255, .95);
- z-index: 50;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-/* position controls for apps with app-navigation */
-#app-navigation+#app-content #controls {
- left: 250px;
-}
-.viewer-mode #app-navigation+#app-content #controls {
- left: 0;
-}
-
-#controls .button,
-#controls button,
-#controls input[type='submit'],
-#controls input[type='text'],
-#controls input[type='password'],
-#controls select {
- box-sizing: border-box;
- display: inline-block;
- height: 36px;
- padding: 7px 10px
-}
-
-#controls .button.hidden {
- display: none;
-}
-
-#content {
- position: relative;
- height: 100%;
- width: 100%;
-}
-#content .hascontrols {
- margin-top: 45px;
-}
-#content-wrapper {
- position: absolute;
- height: 100%;
- width: 100%;
- overflow-x: hidden; /* prevent horizontal scrollbar */
- padding-top: 45px;
- box-sizing:border-box;
-}
-/* allow horizontal scrollbar for personal and admin settings */
-#body-settings:not(.snapjs-left) .app-settings {
- overflow-x: auto;
-}
-
-#emptycontent,
-.emptycontent {
- color: #888;
- text-align: center;
- margin-top: 30vh;
- width: 100%;
-}
-#emptycontent.emptycontent-search,
-.emptycontent.emptycontent-search {
- position: static;
-}
-#emptycontent h2,
-.emptycontent h2 {
- margin-bottom: 10px;
- line-height: 150%;
-}
-#emptycontent [class^="icon-"],
-.emptycontent [class^="icon-"],
-#emptycontent [class*=" icon-"],
-.emptycontent [class*=" icon-"] {
- background-size: 64px;
- height: 64px;
- width: 64px;
- margin: 0 auto 15px;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
- opacity: .4;
-}
-
-
-/* LOG IN & INSTALLATION ------------------------------------------------------------ */
-
-/* Some whitespace to the top */
-#body-login #header {
- padding-top: 100px;
-}
-#body-login {
- background-attachment: fixed; /* fix background gradient */
- height: 100%; /* fix sticky footer */
-}
-
-/* Dark subtle label text */
-#body-login p.info,
-#body-login form fieldset legend,
-#body-login #datadirContent label,
-#body-login form fieldset .warning-info,
-#body-login form input[type="checkbox"]+label {
- text-align: center;
- color: #fff;
-}
-/* overrides another !important statement that sets this to unreadable black */
-#body-login form .warning input[type="checkbox"]:hover+label,
-#body-login form .warning input[type="checkbox"]:focus+label,
-#body-login form .warning input[type="checkbox"]+label {
- color: #fff !important;
-}
-
-#body-login .update h2 {
- margin: 0 0 20px;
-}
-
-#body-login .update a {
- color: #fff;
- border-bottom: 1px solid #aaa;
-}
-
-#body-login .infogroup {
- margin-bottom: 15px;
-}
-
-#body-login p#message img {
- vertical-align: middle;
- padding: 5px;
-}
-
-#body-login div.buttons {
- text-align: center;
-}
-#body-login p.info {
- margin: 0 auto;
- padding-top: 20px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-#body-login p.info a {
- font-weight: 600;
- padding: 13px;
- margin: -13px;
-}
-
-#body-login form {
- position: relative;
- width: 280px;
- margin: 16px auto;
- padding: 0;
-}
-#body-login form fieldset {
- margin-bottom: 20px;
- text-align: left;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-#body-login form #sqliteInformation {
- margin-top: -20px;
- margin-bottom: 20px;
-}
-#body-login form #adminaccount {
- margin-bottom: 15px;
-}
-#body-login form fieldset legend, #datadirContent label {
- width: 100%;
-}
-#body-login #datadirContent label {
- display: block;
- margin: 0;
-}
-#body-login form #datadirField legend {
- margin-bottom: 15px;
-}
-#body-login #showAdvanced {
- padding: 13px; /* increase clickable area of Advanced dropdown */
-}
-#body-login #showAdvanced img {
- vertical-align: bottom; /* adjust position of Advanced dropdown arrow */
- margin-left: -4px;
-}
-#body-login .icon-info-white {
- padding: 10px;
-}
-
-/* strengthify wrapper */
-#body-login .strengthify-wrapper {
- display: inline-block;
- position: relative;
- left: 15px;
- top: -23px;
- width: 250px;
-}
-
-/* tipsy for the strengthify wrapper looks better with following font settings */
-#body-login .tipsy-inner {
- font-weight: bold;
- color: #ccc;
-}
-
-/* General new input field look */
-#body-login input[type="text"],
-#body-login input[type="password"],
-#body-login input[type="email"] {
- border: none;
- font-weight: 300;
-}
-
-/* Nicely grouping input field sets */
-.grouptop,
-.groupmiddle,
-.groupbottom {
- position: relative;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-#body-login .grouptop input,
-.grouptop input {
- margin-bottom: 0 !important;
- border-bottom: 0 !important;
- border-bottom-left-radius: 0 !important;
- border-bottom-right-radius: 0 !important;
-}
-#body-login .groupmiddle input,
-.groupmiddle input {
- margin-top: 0 !important;
- margin-bottom: 0 !important;
- border-top: 0 !important;
- border-bottom: 0 !important;
- border-radius: 0 !important;
- box-shadow: 0 1px 0 rgba(0,0,0,.1) inset !important;
-}
-#body-login .groupbottom input,
-.groupbottom input {
- margin-top: 0 !important;
- border-top: 0 !important;
- border-top-right-radius: 0 !important;
- border-top-left-radius: 0 !important;
- box-shadow: 0 1px 0 rgba(0,0,0,.1) inset !important;
-}
-#body-login .groupbottom input[type=submit] {
- box-shadow: none !important;
-}
-
-/* keep the labels for screen readers but hide them since we use placeholders */
-label.infield {
- display: none;
-}
-
-#body-login form input[type="checkbox"]+label {
- position: relative;
- margin: 0;
- padding: 14px;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-#body-login form .errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; }
-#body-login .success { background:#d7fed7; border:1px solid #0f0; width: 35%; margin: 30px auto; padding:1em; text-align: center;}
-
-#body-login #showAdvanced > img {
- padding: 4px;
- box-sizing: border-box;
-}
-
-#body-login p.info a, #body-login #showAdvanced {
- color: #fff;
-}
-
-#body-login #remember_login:hover+label,
-#body-login #remember_login:focus+label,
-#body-login #forgot-password:hover,
-#body-login #forgot-password:focus,
-#body-login p.info a:hover,
-#body-login p.info a:focus {
- opacity: .6;
-}
-
-/* Show password toggle */
-#show, #dbpassword {
- position: absolute;
- right: 1em;
- top: .8em;
- float: right;
-}
-#show, #dbpassword, #personal-show {
- display: none;
-}
-#show + label, #dbpassword + label {
- right: 21px;
- top: 15px !important;
- margin: -14px !important;
- padding: 14px !important;
-}
-#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
- opacity: .8;
-}
-#show + label, #dbpassword + label, #personal-show + label {
- position: absolute !important;
- height: 20px;
- width: 24px;
- background-image: url('../img/actions/toggle.svg?v=1');
- background-repeat: no-repeat;
- background-position: center;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
- opacity: .3;
-}
-#show + label:before, #dbpassword + label:before, #personal-show + label:before {
- display: none;
-}
-#pass2, input[name="personal-password-clone"] {
- padding: .6em 2.5em .4em .4em;
- width: 8em;
-}
-#personal-show + label {
- height: 14px;
- margin-top: -25px;
- left: 295px;
- display: block;
-}
-#passwordbutton {
- margin-left: .5em;
-}
-
-/* Database selector */
-#body-login form #selectDbType {
- text-align:center;
- white-space: nowrap;
- margin: 0;
-}
-#body-login form #selectDbType .info {
- white-space: normal;
-}
-#body-login form #selectDbType label {
- position: static;
- margin: 0 -3px 5px;
- font-size: 12px;
- background:#f8f8f8;
- color:#888;
- cursor:pointer;
- border: 1px solid #ddd;
-}
-#body-login form #selectDbType label span {
- cursor: pointer;
- padding: 10px 20px;
-}
-#body-login form #selectDbType label.ui-state-hover,
-#body-login form #selectDbType label.ui-state-active {
- color:#000;
- background-color:#e8e8e8; }
-
-
-/* Warnings and errors are the same */
-#body-login .warning,
-#body-login .update,
-#body-login .error {
- display: block;
- padding: 10px;
- background-color: rgba(0,0,0,.3);
- color: #fff;
- text-align: left;
- border-radius: 3px;
- cursor: default;
-}
-
-#body-login .update {
- width: inherit;
- text-align: center;
-}
-
-#body-login .update .appList {
- list-style: disc;
- text-align: left;
- margin-left: 25px;
- margin-right: 25px;
-}
-
-#body-login .v-align {
- width: inherit;
-}
-
-#body-login .update img.float-spinner {
- float: left;
-}
-
-#body-user .warning, #body-settings .warning {
- margin-top: 8px;
- padding: 5px;
- background: #fdd;
- border-radius: 3px;
-}
-
-.warning legend,
-.warning a,
-.error a {
- color: #fff !important;
- font-weight: 600 !important;
-}
-.error a.button {
- color: #555 !important;
- display: inline-block;
- text-align: center;
-}
-.error pre {
- white-space: pre-wrap;
- text-align: left;
-}
-
-.error-wide {
- width: 700px;
- margin-left: -200px !important;
-}
-
-.error-wide .button {
- color: black !important;
-}
-
-.warning-input {
- border-color: #ce3702 !important;
-}
-
-/* Fixes for log in page, TODO should be removed some time */
-#body-login ul.error-wide {
- margin-top: 35px;
-}
-#body-login .warning {
- margin: 0 7px 5px 4px;
-}
-#body-login .warning legend {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-#body-login a.warning {
- cursor: pointer;
-}
-
-/* fixes for update page TODO should be fixed some time in a proper way */
-/* this is just for an error while updating the ownCloud instance */
-#body-login .updateProgress .error {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-
-/* Alternative Logins */
-#alternative-logins legend { margin-bottom:10px; }
-#alternative-logins li { height:40px; display:inline-block; white-space:nowrap; }
-
-/* Log in and install button */
-#body-login input {
- font-size: 20px;
- margin: 5px;
- padding: 11px 10px 9px;
-}
-#body-login input[type="text"],
-#body-login input[type="password"] {
- width: 249px;
-}
-#body-login input.login {
- width: 269px;
- background-position: right 16px center;
-}
-#body-login input[type="submit"] {
- padding: 10px 20px; /* larger log in and installation buttons */
-}
-#remember_login {
- margin: 18px 5px 0 16px !important;
-}
-#body-login .remember-login-container {
- display: inline-block;
- margin: 10px 0;
- text-align: center;
- width: 100%;
-}
-#body-login #forgot-password {
- padding: 11px;
- float: right;
- color: #fff;
-}
-
-/* Sticky footer */
-#body-login .wrapper {
- min-height: 100%;
- margin: 0 auto -70px;
- width: 300px;
-}
-#body-login footer, #body-login .push {
- height: 70px;
-}
-
-/* round profile photos */
-.avatar,
-.avatar img,
-.avatardiv,
-.avatardiv img {
- border-radius: 50%;
- flex-shrink: 0;
-}
-td.avatar {
- border-radius: 0;
-}
-
-
-#notification-container {
- position: absolute;
- top: 0;
- width: 100%;
- text-align: center;
-}
-#notification {
- margin: 0 auto;
- max-width: 60%;
- z-index: 8000;
- background-color: #fff;
- border: 0;
- padding: 1px 8px;
- display: none;
- position: relative;
- top: 0;
- border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
- opacity: .9;
-}
-#notification span {
- cursor: pointer;
- margin-left: 1em;
-}
-#notification {
- overflow-x: hidden;
- overflow-y: auto;
- max-height: 100px;
-}
-#notification .row {
- position: relative;
-}
-#notification .row .close {
- display: inline-block;
- vertical-align: middle;
- position: absolute;
- right: 0;
- top: 0;
- margin-top: 2px;
-}
-#notification .row.closeable {
- padding-right: 20px;
-}
-
-tr .action:not(.permanent),
-.selectedActions a {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
- opacity: 0;
-}
-tr:hover .action,
-tr:focus .action,
-tr .action.permanent,
-.selectedActions a {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: .5;
-}
-tr .action {
- width: 16px;
- height: 16px;
-}
-.header-action {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
- opacity: .8;
-}
-tr:hover .action:hover,
-tr:focus .action:focus,
-.selectedActions a:hover,
-.selectedActions a:focus,
-.header-action:hover,
-.header-action:focus {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-tbody tr:hover,
-tbody tr:focus,
-tbody tr:active {
- background-color: #f8f8f8;
-}
-
-code { font-family:"Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace; }
-
-#quota {
- cursor: default;
- margin: 30px !important;
- position: relative;
- padding: 0 !important;
-}
-#quota div {
- padding: 0;
- background-color: rgb(220,220,220);
- font-weight: normal;
- white-space: nowrap;
- border-bottom-left-radius: 3px;
- border-top-left-radius: 3px;
- min-width: 1%;
- max-width: 100%;
-}
-#quotatext {padding:.6em 1em;}
-
-#quota div.quota-warning {
- background-color: #fc4;
-}
-
-.pager { list-style:none; float:right; display:inline; margin:.7em 13em 0 0; }
-.pager li { display:inline-block; }
-
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { overflow:hidden; text-overflow:ellipsis; }
-.separator { display:inline; border-left:1px solid #d3d3d3; border-right:1px solid #fff; height:10px; width:0px; margin:4px; }
-
-a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;padding-top:0px;padding-bottom:2px; text-decoration:none; margin-top:5px }
-
-.exception{color:#000;}
-.exception textarea{width:95%;height:200px;background:#ffe;border:0;}
-
-.ui-icon-circle-triangle-e{ background-image:url('../img/actions/play-next.svg?v=1'); }
-.ui-icon-circle-triangle-w{ background-image:url('../img/actions/play-previous.svg?v=1'); }
-
-.ui-datepicker-prev,.ui-datepicker-next{ border:1px solid #ddd; background:#fff; }
-
-/* ---- DIALOGS ---- */
-#oc-dialog-filepicker-content .dirtree {
- width:92%;
- float: left;
- margin-left: 15px;
- overflow:hidden;
-}
-#oc-dialog-filepicker-content .dirtree div:first-child a {
- background-image:url('../img/places/home.svg?v=1');
- background-repeat:no-repeat;
- background-position: left center;
-}
-#oc-dialog-filepicker-content .dirtree span:not(:last-child) { cursor: pointer; }
-#oc-dialog-filepicker-content .dirtree span:last-child { font-weight: bold; }
-#oc-dialog-filepicker-content .dirtree span:not(:last-child)::after { content: '>'; padding: 3px;}
-#oc-dialog-filepicker-content .filelist-container {
- box-sizing: border-box;
- display: inline-block;
- overflow-y: auto;
- height: 100%; /** overflow under the button row */
- width: 100%;
-}
-
-#oc-dialog-filepicker-content .emptycontent {
- color: #888;
- text-align: center;
- margin-top: 80px;
- width: 100%;
- display: none;
-}
-#oc-dialog-filepicker-content .filelist {
- background-color:white;
- width:100%;
-}
-#oc-dialog-filepicker-content #filestable.filelist {
- /* prevent the filepicker to overflow */
- min-width: initial;
- margin-bottom: 50px;
-}
-
-#oc-dialog-filepicker-content .filelist td {
- padding: 14px;
- border-bottom: 1px solid #eee;
-}
-#oc-dialog-filepicker-content .filelist tr:last-child td {
- border-bottom: none;
-}
-#oc-dialog-filepicker-content .filelist .filename {
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- background-size: 32px;
- background-repeat: no-repeat;
- padding-left: 51px;
- background-position: 7px 7px;
- cursor: pointer;
-}
-
-#oc-dialog-filepicker-content .filelist .filesize,
-#oc-dialog-filepicker-content .filelist .date {
- width: 80px;
-}
-
-#oc-dialog-filepicker-content .filelist .filesize {
- text-align: right;
-}
-#oc-dialog-filepicker-content .filepicker_element_selected { background-color:lightblue;}
-.ui-dialog {position:fixed !important;}
-span.ui-icon {float: left; margin: 3px 7px 30px 0;}
-
-.move2trash { /* decrease spinner size */
- width: 16px;
- height: 16px;
-}
-
-/* ---- TOOLTIPS ---- */
-.extra-data {
- padding-right: 5px !important;
-}
-.tipsy-inner {
- max-width: 400px !important;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-/* ---- TAGS ---- */
-#tagsdialog .content {
- width: 100%; height: 280px;
-}
-#tagsdialog .scrollarea {
- overflow:auto; border:1px solid #ddd;
- width: 100%; height: 240px;
-}
-#tagsdialog .bottombuttons {
- width: 100%; height: 30px;
-}
-#tagsdialog .bottombuttons * { float:left;}
-#tagsdialog .taglist li { background:#f8f8f8; padding:.3em .8em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; -webkit-transition:background-color 500ms; transition:background-color 500ms; }
-#tagsdialog .taglist li:hover, #tagsdialog .taglist li:active { background:#eee; }
-#tagsdialog .addinput { width: 90%; clear: both; }
-
-/* ---- APP SETTINGS - LEGACY, DO NOT USE THE POPUP! ---- */
-.popup {
- background-color: #fff;
- border-radius: 3px;
- box-shadow: 0 0 10px #aaa;
- color: #333;
- padding: 10px;
- position: fixed !important;
- z-index: 100;
-}
-.popup.topright { top:7em; right:1em; }
-.popup.bottomleft { bottom:1em; left:33em; }
-.popup .close { position:absolute; top:0.2em; right:0.2em; height:20px; width:20px; background:url('../img/actions/close.svg?v=1') no-repeat center; }
-.popup h2 { font-size:20px; }
-.arrow { border-bottom:10px solid white; border-left:10px solid transparent; border-right:10px solid transparent; display:block; height:0; position:absolute; width:0; z-index:201; }
-.arrow.left { left:-13px; bottom:1.2em; -webkit-transform:rotate(270deg); -ms-transform:rotate(270deg); transform:rotate(270deg); }
-.arrow.up { top:-8px; right:6px; }
-.arrow.down { -webkit-transform:rotate(180deg); -ms-transform:rotate(180deg); transform:rotate(180deg); }
-
-
-/* ---- BREADCRUMB ---- */
-div.crumb {
- float: left;
- display: block;
- background-image: url('../img/breadcrumb.svg?v=1');
- background-repeat: no-repeat;
- background-position: right center;
- height: 44px;
- background-size: auto 24px;
-}
-div.crumb.hidden {
- display: none;
-}
-div.crumb a,
-div.crumb > span {
- position: relative;
- top: 12px;
- padding: 14px 24px 14px 17px;
- color: #555;
-}
-div.crumb.last a {
- padding-right: 0;
-}
-div.crumb:first-child a {
- position: relative;
- top: 13px;
- padding-right: 14px;
-}
-div.crumb.last {
- font-weight: 600;
- margin-right: 10px;
-}
-div.crumb.ellipsized {
- padding: 0 10px 0 5px;
-}
-div.crumb a.ellipsislink {
- padding: 0 !important;
- position: relative;
- top: 8px !important;
-}
-
-/* some feedback for hover/tap on breadcrumbs */
-div.crumb:hover,
-div.crumb:focus,
-div.crumb a:focus,
-div.crumb:active {
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
- opacity:.7;
-}
-
-.appear {
- opacity: 1;
- -webkit-transition: opacity 500ms ease 0s;
- -moz-transition: opacity 500ms ease 0s;
- -ms-transition: opacity 500ms ease 0s;
- -o-transition: opacity 500ms ease 0s;
- transition: opacity 500ms ease 0s;
-}
-.appear.transparent {
- opacity: 0;
-}
-
-
-/* public footer */
-#body-public footer {
- position: relative;
- text-align: center;
-}
-
-#body-public footer .info {
- color: #777;
- text-align: center;
- margin: 0 auto;
- padding: 20px 0;
-}
-
-#body-public footer .info a {
- color: #777;
- font-weight: 600;
- padding: 13px;
- margin: -13px;
-}
-
-
-/* LEGACY FIX only - do not use fieldsets for settings */
-fieldset.warning legend, fieldset.update legend {
- top: 18px;
- position: relative;
-}
-fieldset.warning legend + p, fieldset.update legend + p {
- margin-top: 12px;
-}
-
-
-/* for IE10 */
-@-ms-viewport {
- width: device-width;
-}
-
-/* hidden input type=file field */
-.hiddenuploadfield {
- width: 0;
- height: 0;
- opacity: 0;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
-}
diff --git a/core/css/styles.scss b/core/css/styles.scss
new file mode 100644
index 00000000000..d958a01655b
--- /dev/null
+++ b/core/css/styles.scss
@@ -0,0 +1,1304 @@
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
+ * @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
+ * @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
+ * @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Raghu Nayyar <hey@raghunayyar.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+ cursor: default;
+}
+
+html, body {
+ height: 100%;
+}
+
+article, aside, dialog, figure, footer, header, hgroup, nav, section {
+ display: block;
+}
+
+body {
+ line-height: 1.5;
+}
+
+table {
+ border-collapse: separate;
+ border-spacing: 0;
+ white-space: nowrap;
+}
+
+caption, th, td {
+ text-align: left;
+ font-weight: normal;
+}
+
+table, td, th {
+ vertical-align: middle;
+}
+
+a {
+ border: 0;
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ * {
+ cursor: pointer;
+ }
+}
+
+input {
+ cursor: pointer;
+ * {
+ cursor: pointer;
+ }
+}
+
+select, .button span, label {
+ cursor: pointer;
+}
+
+ul {
+ list-style: none;
+}
+
+body {
+ background-color: #ffffff;
+ font-weight: 400;
+ font-size: .8em;
+ line-height: 1.6em;
+ font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
+ color: #000;
+ height: auto;
+}
+
+#body-login {
+ text-align: center;
+ background-color: #0082c9;
+ background-image: url('../img/background.jpg?v=1');
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ background-size: cover;
+}
+
+.two-factor-header {
+ text-align: center;
+}
+
+.two-factor-provider {
+ text-align: center;
+ width: 258px !important;
+ display: inline-block;
+ margin-bottom: 0 !important;
+ background-color: rgba(0, 0, 0, 0.3) !important;
+ border: none !important;
+}
+
+.two-factor-link {
+ display: inline-block;
+ padding: 12px;
+ color: rgba(255, 255, 255, 0.75);
+}
+
+.float-spinner {
+ height: 32px;
+ display: none;
+}
+
+#body-login .float-spinner {
+ margin-top: -32px;
+ padding-top: 32px;
+}
+
+#nojavascript {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ height: 100%;
+ width: 100%;
+ z-index: 9000;
+ text-align: center;
+ background-color: rgba(0, 0, 0, 0.5);
+ color: #fff;
+ line-height: 125%;
+ font-size: 24px;
+ div {
+ display: block;
+ position: relative;
+ width: 50%;
+ top: 35%;
+ margin: 0px auto;
+ }
+ a {
+ color: #fff;
+ border-bottom: 2px dotted #fff;
+ &:hover, &:focus {
+ color: #ddd;
+ }
+ }
+}
+
+/* SCROLLING */
+
+::-webkit-scrollbar {
+ width: 5px;
+}
+
+::-webkit-scrollbar-track-piece {
+ background-color: transparent;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #ddd;
+ border-radius: 3px;
+}
+
+/* Searchbox */
+
+.searchbox {
+ position: relative;
+ input[type='search'] {
+ position: relative;
+ font-size: 1.2em;
+ padding: 3px;
+ padding-left: 25px;
+ background: transparent url('../img/actions/search-white.svg?v=1') no-repeat 6px center;
+ color: #fff;
+ border: 0;
+ border-radius: 3px;
+ margin-top: 3px;
+ width: 0;
+ cursor: pointer;
+ -webkit-transition: all 100ms;
+ transition: all 100ms;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)';
+ opacity: .7;
+ &:focus, &:active, &:valid {
+ color: #fff;
+ width: 155px;
+ cursor: text;
+ background-color: #0082c9 !important;
+ border: 1px solid rgba(255, 255, 255, 0.5) !important;
+ }
+ & ~ .icon-close-white {
+ display: inline;
+ position: absolute;
+ width: 15px;
+ height: 32px;
+ right: 3px;
+ top: 0;
+ &, &:focus, &:active, &:hover {
+ border: none;
+ background-color: transparent;
+ }
+ }
+ &:not(:valid) ~ .icon-close-white {
+ display: none;
+ }
+ &::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+ }
+ }
+}
+
+/* CONTENT ------------------------------------------------------------------ */
+
+#controls {
+ box-sizing: border-box;
+ position: fixed;
+ top: 45px;
+ right: 0;
+ left: 0;
+ height: 44px;
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ background-color: rgba(255, 255, 255, 0.95);
+ z-index: 50;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/* position controls for apps with app-navigation */
+
+#app-navigation + #app-content #controls {
+ left: 250px;
+}
+
+.viewer-mode #app-navigation + #app-content #controls {
+ left: 0;
+}
+
+#controls {
+ .button, button {
+ box-sizing: border-box;
+ display: inline-block;
+ height: 36px;
+ padding: 7px 10px;
+ }
+ input {
+ &[type='submit'], &[type='text'], &[type='password'] {
+ box-sizing: border-box;
+ display: inline-block;
+ height: 36px;
+ padding: 7px 10px;
+ }
+ }
+ select {
+ box-sizing: border-box;
+ display: inline-block;
+ height: 36px;
+ padding: 7px 10px;
+ }
+ .button.hidden {
+ display: none;
+ }
+}
+
+#content {
+ position: relative;
+ height: 100%;
+ width: 100%;
+ .hascontrols {
+ margin-top: 45px;
+ }
+}
+
+#content-wrapper {
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ overflow-x: hidden;
+ /* prevent horizontal scrollbar */
+ padding-top: 45px;
+ box-sizing: border-box;
+}
+
+/* allow horizontal scrollbar for personal and admin settings */
+
+#body-settings:not(.snapjs-left) .app-settings {
+ overflow-x: auto;
+}
+
+#emptycontent, .emptycontent {
+ color: #888;
+ text-align: center;
+ margin-top: 30vh;
+ width: 100%;
+}
+
+#emptycontent.emptycontent-search, .emptycontent.emptycontent-search {
+ position: static;
+}
+
+#emptycontent h2, .emptycontent h2 {
+ margin-bottom: 10px;
+ line-height: 150%;
+}
+
+#emptycontent [class^='icon-'], .emptycontent [class^='icon-'], #emptycontent [class*=' icon-'], .emptycontent [class*=' icon-'] {
+ background-size: 64px;
+ height: 64px;
+ width: 64px;
+ margin: 0 auto 15px;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=40)';
+ opacity: .4;
+}
+
+/* LOG IN & INSTALLATION ------------------------------------------------------------ */
+
+/* Some whitespace to the top */
+
+#body-login {
+ #header {
+ padding-top: 100px;
+ }
+ background-attachment: fixed;
+ /* fix background gradient */
+ height: 100%;
+ /* fix sticky footer */
+ p.info, form fieldset legend, #datadirContent label {
+ text-align: center;
+ color: #fff;
+ }
+ form {
+ fieldset .warning-info, input[type='checkbox'] + label {
+ text-align: center;
+ color: #fff;
+ }
+ .warning input[type='checkbox'] {
+ &:hover + label, &:focus + label, + label {
+ color: #fff !important;
+ }
+ }
+ }
+ .update {
+ h2 {
+ margin: 0 0 20px;
+ }
+ a {
+ color: #fff;
+ border-bottom: 1px solid #aaa;
+ }
+ }
+ .infogroup {
+ margin-bottom: 15px;
+ }
+ p#message img {
+ vertical-align: middle;
+ padding: 5px;
+ }
+ div.buttons {
+ text-align: center;
+ }
+ p.info {
+ margin: 0 auto;
+ padding-top: 20px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ a {
+ font-weight: 600;
+ padding: 13px;
+ margin: -13px;
+ }
+ }
+ form {
+ position: relative;
+ width: 280px;
+ margin: 16px auto;
+ padding: 0;
+ fieldset {
+ margin-bottom: 20px;
+ text-align: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+ #sqliteInformation {
+ margin-top: -20px;
+ margin-bottom: 20px;
+ }
+ #adminaccount {
+ margin-bottom: 15px;
+ }
+ fieldset legend {
+ width: 100%;
+ }
+ }
+}
+
+/* Dark subtle label text */
+
+/* overrides another !important statement that sets this to unreadable black */
+
+#datadirContent label {
+ width: 100%;
+}
+
+#body-login {
+ #datadirContent label {
+ display: block;
+ margin: 0;
+ }
+ form #datadirField legend {
+ margin-bottom: 15px;
+ }
+ #showAdvanced {
+ padding: 13px;
+ /* increase clickable area of Advanced dropdown */
+ img {
+ vertical-align: bottom;
+ /* adjust position of Advanced dropdown arrow */
+ margin-left: -4px;
+ }
+ }
+ .icon-info-white {
+ padding: 10px;
+ }
+ .strengthify-wrapper {
+ display: inline-block;
+ position: relative;
+ left: 15px;
+ top: -23px;
+ width: 250px;
+ }
+ .tipsy-inner {
+ font-weight: bold;
+ color: #ccc;
+ }
+ input {
+ &[type='text'], &[type='password'], &[type='email'] {
+ border: none;
+ font-weight: 300;
+ }
+ }
+}
+
+/* strengthify wrapper */
+
+/* tipsy for the strengthify wrapper looks better with following font settings */
+
+/* General new input field look */
+
+/* Nicely grouping input field sets */
+
+.grouptop, .groupmiddle, .groupbottom {
+ position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#body-login .grouptop input, .grouptop input {
+ margin-bottom: 0 !important;
+ border-bottom: 0 !important;
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+#body-login .groupmiddle input, .groupmiddle input {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ border-top: 0 !important;
+ border-bottom: 0 !important;
+ border-radius: 0 !important;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1) inset !important;
+}
+
+#body-login .groupbottom input, .groupbottom input {
+ margin-top: 0 !important;
+ border-top: 0 !important;
+ border-top-right-radius: 0 !important;
+ border-top-left-radius: 0 !important;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1) inset !important;
+}
+
+#body-login .groupbottom input[type=submit] {
+ box-shadow: none !important;
+}
+
+/* keep the labels for screen readers but hide them since we use placeholders */
+
+label.infield {
+ display: none;
+}
+
+#body-login {
+ form {
+ input[type='checkbox'] + label {
+ position: relative;
+ margin: 0;
+ padding: 14px;
+ vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+ .errors {
+ background: #fed7d7;
+ border: 1px solid #f00;
+ list-style-indent: inside;
+ margin: 0 0 2em;
+ padding: 1em;
+ }
+ }
+ .success {
+ background: #d7fed7;
+ border: 1px solid #0f0;
+ width: 35%;
+ margin: 30px auto;
+ padding: 1em;
+ text-align: center;
+ }
+ #showAdvanced > img {
+ padding: 4px;
+ box-sizing: border-box;
+ }
+ p.info a, #showAdvanced {
+ color: #fff;
+ }
+ #remember_login {
+ &:hover + label, &:focus + label {
+ opacity: .6;
+ }
+ }
+ #forgot-password {
+ &:hover, &:focus {
+ opacity: .6;
+ }
+ }
+ p.info a {
+ &:hover, &:focus {
+ opacity: .6;
+ }
+ }
+}
+
+/* Show password toggle */
+
+#show, #dbpassword {
+ position: absolute;
+ right: 1em;
+ top: .8em;
+ float: right;
+}
+
+#show, #dbpassword, #personal-show {
+ display: none;
+}
+
+#show + label, #dbpassword + label {
+ right: 21px;
+ top: 15px !important;
+ margin: -14px !important;
+ padding: 14px !important;
+}
+
+#show:checked + label, #dbpassword:checked + label, #personal-show:checked + label {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)';
+ opacity: .8;
+}
+
+#show + label, #dbpassword + label, #personal-show + label {
+ position: absolute !important;
+ height: 20px;
+ width: 24px;
+ background-image: url('../img/actions/toggle.svg?v=1');
+ background-repeat: no-repeat;
+ background-position: center;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)';
+ opacity: .3;
+}
+
+#show + label:before, #dbpassword + label:before, #personal-show + label:before {
+ display: none;
+}
+
+#pass2, input[name='personal-password-clone'] {
+ padding-right: 30px;
+}
+
+.personal-show-container {
+ position: relative;
+ display: inline-block;
+ margin-right: 6px;
+}
+#personal-show + label {
+ display: block;
+ right: 0;
+ margin-top: -36px;
+ padding: 6px 4px;
+}
+
+/* Database selector */
+
+#body-login {
+ form #selectDbType {
+ text-align: center;
+ white-space: nowrap;
+ margin: 0;
+ .info {
+ white-space: normal;
+ }
+ label {
+ position: static;
+ margin: 0 -3px 5px;
+ font-size: 12px;
+ background: #f8f8f8;
+ color: #888;
+ cursor: pointer;
+ border: 1px solid #ddd;
+ span {
+ cursor: pointer;
+ padding: 10px 20px;
+ }
+ &.ui-state-hover, &.ui-state-active {
+ color: #000;
+ background-color: #e8e8e8;
+ }
+ }
+ }
+ .warning, .update, .error {
+ display: block;
+ padding: 10px;
+ background-color: rgba(0, 0, 0, 0.3);
+ color: #fff;
+ text-align: left;
+ border-radius: 3px;
+ cursor: default;
+ }
+ .update {
+ width: inherit;
+ text-align: center;
+ .appList {
+ list-style: disc;
+ text-align: left;
+ margin-left: 25px;
+ margin-right: 25px;
+ }
+ }
+ .v-align {
+ width: inherit;
+ }
+ .update img.float-spinner {
+ float: left;
+ }
+}
+
+/* Warnings and errors are the same */
+
+#body-user .warning, #body-settings .warning {
+ margin-top: 8px;
+ padding: 5px;
+ background: #fdd;
+ border-radius: 3px;
+}
+
+.warning {
+ legend, a {
+ color: #fff !important;
+ font-weight: 600 !important;
+ }
+}
+
+.error {
+ a {
+ color: #fff !important;
+ font-weight: 600 !important;
+ &.button {
+ color: #555 !important;
+ display: inline-block;
+ text-align: center;
+ }
+ }
+ pre {
+ white-space: pre-wrap;
+ text-align: left;
+ }
+}
+
+.error-wide {
+ width: 700px;
+ margin-left: -200px !important;
+ .button {
+ color: black !important;
+ }
+}
+
+.warning-input {
+ border-color: #ce3702 !important;
+}
+
+/* Fixes for log in page, TODO should be removed some time */
+
+#body-login {
+ ul.error-wide {
+ margin-top: 35px;
+ }
+ .warning {
+ margin: 0 7px 5px 4px;
+ legend {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+ }
+ a.warning {
+ cursor: pointer;
+ }
+ .updateProgress .error {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+}
+
+/* fixes for update page TODO should be fixed some time in a proper way */
+/* this is just for an error while updating the ownCloud instance */
+
+/* Alternative Logins */
+
+#alternative-logins {
+ legend {
+ margin-bottom: 10px;
+ }
+ li {
+ height: 40px;
+ display: inline-block;
+ white-space: nowrap;
+ }
+}
+
+/* Log in and install button */
+
+#body-login input {
+ font-size: 20px;
+ margin: 5px;
+ padding: 10px 10px 8px;
+ &[type='text'], &[type='password'] {
+ width: calc(100% - 10px); /* 5px margin */
+ }
+ &.login {
+ width: 269px;
+ background-position: right 16px center;
+ }
+ &[type='submit'] {
+ padding: 10px 20px;
+ /* larger log in and installation buttons */
+ }
+}
+
+#remember_login {
+ margin: 18px 5px 0 16px !important;
+}
+
+#body-login {
+ .remember-login-container {
+ display: inline-block;
+ margin: 10px 0;
+ text-align: center;
+ width: 100%;
+ }
+ #forgot-password {
+ padding: 11px;
+ float: right;
+ color: #fff;
+ }
+ .wrapper {
+ min-height: 100%;
+ margin: 0 auto -70px;
+ width: 300px;
+ }
+ footer, .push {
+ height: 70px;
+ }
+}
+
+/* Sticky footer */
+
+/* round profile photos */
+
+.avatar, .avatardiv {
+ border-radius: 50%;
+ flex-shrink: 0;
+ img {
+ border-radius: 50%;
+ flex-shrink: 0;
+ }
+}
+
+td.avatar {
+ border-radius: 0;
+}
+
+#notification-container {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ text-align: center;
+}
+
+#notification {
+ margin: 0 auto;
+ max-width: 60%;
+ z-index: 8000;
+ background-color: #fff;
+ border: 0;
+ padding: 1px 8px;
+ display: none;
+ position: relative;
+ top: 0;
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=90)';
+ opacity: .9;
+ span {
+ cursor: pointer;
+ margin-left: 1em;
+ }
+ overflow-x: hidden;
+ overflow-y: auto;
+ max-height: 100px;
+ .row {
+ position: relative;
+ .close {
+ display: inline-block;
+ vertical-align: middle;
+ position: absolute;
+ right: 0;
+ top: 0;
+ margin-top: 2px;
+ }
+ &.closeable {
+ padding-right: 20px;
+ }
+ }
+}
+
+tr .action:not(.permanent), .selectedActions a {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
+ opacity: 0;
+}
+
+tr {
+ &:hover .action, &:focus .action, .action.permanent {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
+ opacity: .5;
+ }
+}
+
+.selectedActions a {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
+ opacity: .5;
+}
+
+tr .action {
+ width: 16px;
+ height: 16px;
+}
+
+.header-action {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)';
+ opacity: .8;
+}
+
+tr {
+ &:hover .action:hover, &:focus .action:focus {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+}
+
+.selectedActions a {
+ &:hover, &:focus {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+}
+
+.header-action {
+ &:hover, &:focus {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
+ opacity: 1;
+ }
+}
+
+tbody tr {
+ &:hover, &:focus, &:active {
+ background-color: #f8f8f8;
+ }
+}
+
+code {
+ font-family: 'Lucida Console', 'Lucida Sans Typewriter', 'DejaVu Sans Mono', monospace;
+}
+
+#quota {
+ cursor: default;
+ margin: 30px !important;
+ position: relative;
+ padding: 0 !important;
+ div {
+ padding: 0;
+ background-color: rgb(220, 220, 220);
+ font-weight: normal;
+ white-space: nowrap;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+ min-width: 1%;
+ max-width: 100%;
+ }
+}
+
+#quotatext {
+ padding: .6em 1em;
+}
+
+#quota div.quota-warning {
+ background-color: #fc4;
+}
+
+.pager {
+ list-style: none;
+ float: right;
+ display: inline;
+ margin: .7em 13em 0 0;
+ li {
+ display: inline-block;
+ }
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.separator {
+ display: inline;
+ border-left: 1px solid #d3d3d3;
+ border-right: 1px solid #fff;
+ height: 10px;
+ width: 0px;
+ margin: 4px;
+}
+
+a.bookmarklet {
+ background-color: #ddd;
+ border: 1px solid #ccc;
+ padding: 5px;
+ padding-top: 0px;
+ padding-bottom: 2px;
+ text-decoration: none;
+ margin-top: 5px;
+}
+
+.exception {
+ color: #000;
+ textarea {
+ width: 95%;
+ height: 200px;
+ background: #ffe;
+ border: 0;
+ }
+}
+
+.ui-icon-circle-triangle-e {
+ background-image: url('../img/actions/play-next.svg?v=1');
+}
+
+.ui-icon-circle-triangle-w {
+ background-image: url('../img/actions/play-previous.svg?v=1');
+}
+
+.ui-datepicker-prev, .ui-datepicker-next {
+ border: 1px solid #ddd;
+ background: #fff;
+}
+
+/* ---- DIALOGS ---- */
+
+#oc-dialog-filepicker-content {
+ .dirtree {
+ width: 92%;
+ float: left;
+ margin-left: 15px;
+ overflow: hidden;
+ div:first-child a {
+ background-image: url('../img/places/home.svg?v=1');
+ background-repeat: no-repeat;
+ background-position: left center;
+ }
+ span {
+ &:not(:last-child) {
+ cursor: pointer;
+ }
+ &:last-child {
+ font-weight: bold;
+ }
+ &:not(:last-child)::after {
+ content: '>';
+ padding: 3px;
+ }
+ }
+ }
+ .filelist-container {
+ box-sizing: border-box;
+ display: inline-block;
+ overflow-y: auto;
+ height: 100%;
+ /** overflow under the button row */
+ width: 100%;
+ }
+ .emptycontent {
+ color: #888;
+ text-align: center;
+ margin-top: 80px;
+ width: 100%;
+ display: none;
+ }
+ .filelist {
+ background-color: white;
+ width: 100%;
+ }
+ #filestable.filelist {
+ /* prevent the filepicker to overflow */
+ min-width: initial;
+ margin-bottom: 50px;
+ }
+ .filelist {
+ td {
+ padding: 14px;
+ border-bottom: 1px solid #eee;
+ }
+ tr:last-child td {
+ border-bottom: none;
+ }
+ .filename {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background-size: 32px;
+ background-repeat: no-repeat;
+ padding-left: 51px;
+ background-position: 7px 7px;
+ cursor: pointer;
+ }
+ .filesize, .date {
+ width: 80px;
+ }
+ .filesize {
+ text-align: right;
+ }
+ }
+ .filepicker_element_selected {
+ background-color: lightblue;
+ }
+}
+
+.ui-dialog {
+ position: fixed !important;
+}
+
+span.ui-icon {
+ float: left;
+ margin: 3px 7px 30px 0;
+}
+
+.move2trash {
+ /* decrease spinner size */
+ width: 16px;
+ height: 16px;
+}
+
+/* ---- TOOLTIPS ---- */
+
+.extra-data {
+ padding-right: 5px !important;
+}
+
+.tipsy-inner {
+ max-width: 400px !important;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+/* ---- TAGS ---- */
+
+#tagsdialog {
+ .content {
+ width: 100%;
+ height: 280px;
+ }
+ .scrollarea {
+ overflow: auto;
+ border: 1px solid #ddd;
+ width: 100%;
+ height: 240px;
+ }
+ .bottombuttons {
+ width: 100%;
+ height: 30px;
+ * {
+ float: left;
+ }
+ }
+ .taglist li {
+ background: #f8f8f8;
+ padding: .3em .8em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-transition: background-color 500ms;
+ transition: background-color 500ms;
+ &:hover, &:active {
+ background: #eee;
+ }
+ }
+ .addinput {
+ width: 90%;
+ clear: both;
+ }
+}
+
+/* ---- APP SETTINGS - LEGACY, DO NOT USE THE POPUP! ---- */
+
+.popup {
+ background-color: #fff;
+ border-radius: 3px;
+ box-shadow: 0 0 10px #aaa;
+ color: #333;
+ padding: 10px;
+ position: fixed !important;
+ z-index: 100;
+ &.topright {
+ top: 7em;
+ right: 1em;
+ }
+ &.bottomleft {
+ bottom: 1em;
+ left: 33em;
+ }
+ .close {
+ position: absolute;
+ top: 0.2em;
+ right: 0.2em;
+ height: 20px;
+ width: 20px;
+ background: url('../img/actions/close.svg?v=1') no-repeat center;
+ }
+ h2 {
+ font-size: 20px;
+ }
+}
+
+.arrow {
+ border-bottom: 10px solid white;
+ border-left: 10px solid transparent;
+ border-right: 10px solid transparent;
+ display: block;
+ height: 0;
+ position: absolute;
+ width: 0;
+ z-index: 201;
+ &.left {
+ left: -13px;
+ bottom: 1.2em;
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+ }
+ &.up {
+ top: -8px;
+ right: 6px;
+ }
+ &.down {
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+ }
+}
+
+/* ---- BREADCRUMB ---- */
+
+div.crumb {
+ float: left;
+ display: block;
+ background-image: url('../img/breadcrumb.svg?v=1');
+ background-repeat: no-repeat;
+ background-position: right center;
+ height: 44px;
+ background-size: auto 24px;
+ &.hidden {
+ display: none;
+ }
+ a, > span {
+ position: relative;
+ top: 12px;
+ padding: 14px 24px 14px 17px;
+ color: #555;
+ }
+ &.last a {
+ padding-right: 0;
+ }
+ &:first-child a {
+ position: relative;
+ top: 13px;
+ padding-right: 14px;
+ }
+ &.last {
+ font-weight: 600;
+ margin-right: 10px;
+ }
+ &.ellipsized {
+ padding: 0 10px 0 5px;
+ }
+ a.ellipsislink {
+ padding: 0 !important;
+ position: relative;
+ top: 8px !important;
+ }
+ &:hover, &:focus, a:focus, &:active {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)';
+ opacity: .7;
+ }
+}
+
+/* some feedback for hover/tap on breadcrumbs */
+
+.appear {
+ opacity: 1;
+ -webkit-transition: opacity 500ms ease 0s;
+ -moz-transition: opacity 500ms ease 0s;
+ -ms-transition: opacity 500ms ease 0s;
+ -o-transition: opacity 500ms ease 0s;
+ transition: opacity 500ms ease 0s;
+ &.transparent {
+ opacity: 0;
+ }
+}
+
+/* public footer */
+
+#body-public footer {
+ position: relative;
+ text-align: center;
+ .info {
+ color: #777;
+ text-align: center;
+ margin: 0 auto;
+ padding: 20px 0;
+ a {
+ color: #777;
+ font-weight: 600;
+ padding: 13px;
+ margin: -13px;
+ }
+ }
+}
+
+/* LEGACY FIX only - do not use fieldsets for settings */
+
+fieldset {
+ &.warning legend, &.update legend {
+ top: 18px;
+ position: relative;
+ }
+ &.warning legend + p, &.update legend + p {
+ margin-top: 12px;
+ }
+}
+
+/* for IE10 */
+@-ms-viewport {
+ width: device-width;
+}
+
+
+/* hidden input type=file field */
+
+.hiddenuploadfield {
+ width: 0;
+ height: 0;
+ opacity: 0;
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
+}
diff --git a/core/css/systemtags.css b/core/css/systemtags.css
deleted file mode 100644
index d11dc741065..00000000000
--- a/core/css/systemtags.css
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2016
- *
- * This file is licensed under the Affero General Public License version 3
- * or later.
- *
- * See the COPYING-README file.
- *
- */
-
-.systemtags-select2-dropdown .select2-result-label .checkmark {
- visibility: hidden;
- margin-left: -5px;
- margin-right: 5px;
- padding: 4px;
-}
-
-.systemtags-select2-dropdown .select2-result-label .new-item .systemtags-actions {
- display: none;
-}
-
-.systemtags-select2-dropdown .select2-selected .select2-result-label .checkmark {
- visibility: visible;
-}
-
-.systemtags-select2-dropdown .select2-result-label .icon {
- display: inline-block;
- opacity: .5;
-}
-.systemtags-select2-dropdown .select2-result-label .icon.rename {
- padding: 4px;
-}
-
-.systemtags-select2-dropdown .systemtags-actions {
- position: absolute;
- right: 5px;
-}
-
-.systemtags-select2-dropdown .systemtags-rename-form {
- display: inline-block;
- width: calc(100% - 20px);
- top: -6px;
- position: relative;
-}
-
-.systemtags-select2-dropdown .systemtags-rename-form input {
- display: inline-block;
- width: calc(100% - 40px);
-}
-
-.systemtags-select2-container {
- width: 100%;
-}
-
-#select2-drop.systemtags-select2-dropdown .select2-results li.select2-result {
- padding: 5px;
-}
-
-.systemtags-select2-dropdown span {
- line-height: 25px;
-}
-
-.systemtags-select2-dropdown .systemtags-item {
- display: inline-block;
- height: 25px;
- width: 100%;
-}
-
-.systemtags-select2-dropdown .select2-result-label {
- height: 25px;
-}
-
-.systemtags-select2-container .select2-choices .select2-search-choice.select2-locked .label {
- opacity: 0.5;
-}
-
-.systemtags-select2-dropdown .label {
- width:85%;
- display:-moz-inline-box;
- display:inline-block;
- overflow:hidden;
- text-overflow:ellipsis;
-}
-.systemtags-select2-dropdown .label.hidden {
- display: none;
-}
diff --git a/core/css/systemtags.scss b/core/css/systemtags.scss
new file mode 100644
index 00000000000..b32f33f36e5
--- /dev/null
+++ b/core/css/systemtags.scss
@@ -0,0 +1,81 @@
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Vincent Petry <pvince81@owncloud.com>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ */
+
+.systemtags-select2-dropdown {
+ .select2-result-label {
+ .checkmark {
+ visibility: hidden;
+ margin-left: -5px;
+ margin-right: 5px;
+ padding: 4px;
+ }
+ .new-item .systemtags-actions {
+ display: none;
+ }
+ }
+ .select2-selected .select2-result-label .checkmark {
+ visibility: visible;
+ }
+ .select2-result-label .icon {
+ display: inline-block;
+ opacity: .5;
+ &.rename {
+ padding: 4px;
+ }
+ }
+ .systemtags-actions {
+ position: absolute;
+ right: 5px;
+ }
+ .systemtags-rename-form {
+ display: inline-block;
+ width: calc(100% - 20px);
+ top: -6px;
+ position: relative;
+ input {
+ display: inline-block;
+ width: calc(100% - 40px);
+ }
+ }
+ .label {
+ width: 85%;
+ display: -moz-inline-box;
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ &.hidden {
+ display: none;
+ }
+ }
+ span {
+ line-height: 25px;
+ }
+ .systemtags-item {
+ display: inline-block;
+ height: 25px;
+ width: 100%;
+ }
+ .select2-result-label {
+ height: 25px;
+ }
+}
+
+.systemtags-select2-container {
+ width: 100%;
+ .select2-choices .select2-search-choice.select2-locked .label {
+ opacity: 0.5;
+ }
+}
+
+#select2-drop.systemtags-select2-dropdown .select2-results li.select2-result {
+ padding: 5px;
+}
diff --git a/core/css/tooltip.css b/core/css/tooltip.css
deleted file mode 100644
index e5a2f7b2145..00000000000
--- a/core/css/tooltip.css
+++ /dev/null
@@ -1,119 +0,0 @@
-/*!
- * Bootstrap v3.3.5 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-.tooltip {
- position: absolute;
- display: block;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- letter-spacing: normal;
- line-break: auto;
- line-height: 1.42857143;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- white-space: normal;
- word-break: normal;
- word-spacing: normal;
- word-wrap: normal;
- font-size: 12px;
- opacity: 0;
- z-index: 100000;
- filter: alpha(opacity=0);
-}
-.tooltip.in {
- opacity: 0.9;
- filter: alpha(opacity=90);
-}
-.tooltip.top {
- margin-top: -3px;
- padding: 5px 0;
-}
-.tooltip.right {
- margin-left: 3px;
- padding: 0 5px;
-}
-.tooltip.bottom {
- margin-top: 3px;
- padding: 5px 0;
-}
-.tooltip.left {
- margin-left: -3px;
- padding: 0 5px;
-}
-.tooltip-inner {
- max-width: 350px;
- padding: 3px 8px;
- color: #ffffff;
- text-align: center;
- background-color: #000000;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.top-left .tooltip-arrow {
- bottom: 0;
- right: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
diff --git a/core/css/tooltip.scss b/core/css/tooltip.scss
new file mode 100644
index 00000000000..263dad0b0c9
--- /dev/null
+++ b/core/css/tooltip.scss
@@ -0,0 +1,130 @@
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
+ * @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>
+ * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>
+ * @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
+ *
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+.tooltip {
+ position: absolute;
+ display: block;
+ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ font-style: normal;
+ font-weight: normal;
+ letter-spacing: normal;
+ line-break: auto;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ white-space: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ font-size: 12px;
+ opacity: 0;
+ z-index: 100000;
+ filter: alpha(opacity = 0);
+ &.in {
+ opacity: 0.9;
+ filter: alpha(opacity = 90);
+ }
+
+ &.top {
+ margin-top: -3px;
+ padding: 5px 0;
+ }
+ &.bottom {
+ margin-top: 3px;
+ padding: 5px 0;
+ }
+
+ &.right {
+ margin-left: 3px;
+ padding: 0 5px;
+ .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000000;
+ }
+ }
+ &.left {
+ margin-left: -3px;
+ padding: 0 5px;
+ .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000000;
+ }
+ }
+
+ /* TOP */
+ &.top .tooltip-arrow,
+ &.top-left .tooltip-arrow,
+ &.top-right .tooltip-arrow {
+ bottom: 0;
+ border-width: 5px 5px 0;
+ border-top-color: #000000;
+ }
+ &.top .tooltip-arrow {
+ left: 50%;
+ margin-left: -5px;
+ }
+ &.top-left .tooltip-arrow {
+ right: 5px;
+ margin-bottom: -5px;
+ }
+ &.top-right .tooltip-arrow {
+ left: 5px;
+ margin-bottom: -5px;
+ }
+
+ /* BOTTOM */
+ &.bottom .tooltip-arrow,
+ &.bottom-left .tooltip-arrow,
+ &.bottom-right .tooltip-arrow {
+ top: 0;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000000;
+ }
+ &.bottom .tooltip-arrow {
+ left: 50%;
+ margin-left: -5px;
+ }
+ &.bottom-left .tooltip-arrow {
+ right: 5px;
+ margin-top: -5px;
+ }
+ &.bottom-right .tooltip-arrow {
+ left: 5px;
+ margin-top: -5px;
+ }
+}
+
+.tooltip-inner {
+ max-width: 350px;
+ padding: 3px 8px;
+ color: #ffffff;
+ text-align: center;
+ background-color: #000000;
+ border-radius: 4px;
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
diff --git a/core/css/update.css b/core/css/update.css
deleted file mode 100644
index 12cda3d5bbd..00000000000
--- a/core/css/update.css
+++ /dev/null
@@ -1,33 +0,0 @@
-#update-progress-icon {
- height: 32px;
- margin: 10px;
- background-size: 32px;
-}
-
-#update-progress-message-error,
-#update-progress-message-warnings {
- font-weight: 600;
- margin-bottom: 10px;
-}
-
-#update-progress-message {
- margin-bottom: 10px;
-}
-
-.update-show-detailed {
- padding: 13px;
- display: block;
- opacity: .75;
-}
-
-#body-login .update a.update-show-detailed {
- border-bottom: inherit;
-}
-
-#update-progress-detailed {
- text-align: left;
-}
-
-#body-login .warning.hidden {
- display: none;
-}
diff --git a/core/img/actions/checkbox-checked-disabled.svg b/core/img/actions/checkbox-checked-disabled.svg
deleted file mode 100644
index 8b0118da343..00000000000
--- a/core/img/actions/checkbox-checked-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-checked-white.svg b/core/img/actions/checkbox-checked-white.svg
deleted file mode 100644
index 8043bd463be..00000000000
--- a/core/img/actions/checkbox-checked-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-checked.svg b/core/img/actions/checkbox-checked.svg
deleted file mode 100644
index bd9241d664c..00000000000
--- a/core/img/actions/checkbox-checked.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm8.924 2.066l1.433 1.432-6.365 6.365L2.75 7.62l1.414-1.415 2.828 2.83 4.932-4.97z" fill="#0082c9"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-disabled-white.svg b/core/img/actions/checkbox-disabled-white.svg
deleted file mode 100644
index c5cf4a66585..00000000000
--- a/core/img/actions/checkbox-disabled-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-disabled.svg b/core/img/actions/checkbox-disabled.svg
deleted file mode 100644
index fa73b4f4352..00000000000
--- a/core/img/actions/checkbox-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mark-white.svg b/core/img/actions/checkbox-mark-white.svg
new file mode 100644
index 00000000000..8407898164b
--- /dev/null
+++ b/core/img/actions/checkbox-mark-white.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M11.924 4.066l-4.932 4.97-2.828-2.83L2.75 7.618l4.242 4.243 6.365-6.365-1.433-1.432z"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mark.svg b/core/img/actions/checkbox-mark.svg
new file mode 100644
index 00000000000..1013b6cc3f2
--- /dev/null
+++ b/core/img/actions/checkbox-mark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M11.924 4.066l-4.932 4.97-2.828-2.83L2.75 7.618l4.242 4.243 6.365-6.365-1.433-1.432z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mixed-disabled.svg b/core/img/actions/checkbox-mixed-disabled.svg
deleted file mode 100644
index 2e8e98fb9fc..00000000000
--- a/core/img/actions/checkbox-mixed-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#dcdcdc"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/><path d="M4 7h8v2H4z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mixed-white.svg b/core/img/actions/checkbox-mixed-white.svg
index ca7d92bbeed..c66636717be 100644
--- a/core/img/actions/checkbox-mixed-white.svg
+++ b/core/img/actions/checkbox-mixed-white.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm1 5h8v2H4V7z" fill="#fff"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4 7v2h8V7H4z"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-mixed.svg b/core/img/actions/checkbox-mixed.svg
index 8a1412bf849..308baae3920 100644
--- a/core/img/actions/checkbox-mixed.svg
+++ b/core/img/actions/checkbox-mixed.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm1 5h8v2H4V7z" fill="#969696"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4 7v2h8V7H4z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox-white.svg b/core/img/actions/checkbox-white.svg
deleted file mode 100644
index 1a0cd569e1c..00000000000
--- a/core/img/actions/checkbox-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/checkbox.svg b/core/img/actions/checkbox.svg
deleted file mode 100644
index 46cad084ab5..00000000000
--- a/core/img/actions/checkbox.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M2.5 2.5h11v11h-11z" fill="#fff"/><path d="M3 2c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h10c.554 0 1-.446 1-1V3c0-.554-.446-1-1-1H3zm0 1h10v10H3V3z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/close-white.svg b/core/img/actions/close-white.svg
new file mode 100644
index 00000000000..cd2a8c62468
--- /dev/null
+++ b/core/img/actions/close-white.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1">
+ <path fill="#fff" d="m12.95 11.536l-1.414 1.414-3.536-3.536-3.535 3.536-1.415-1.414 3.536-3.536-3.536-3.536 1.415-1.414 3.535 3.536 3.516-3.555 1.434 1.434-3.536 3.535z"/>
+</svg>
diff --git a/core/img/actions/radio-checked-disabled.svg b/core/img/actions/radio-checked-disabled.svg
deleted file mode 100644
index 470293c2960..00000000000
--- a/core/img/actions/radio-checked-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-checked-white.svg b/core/img/actions/radio-checked-white.svg
deleted file mode 100644
index d024c91ff19..00000000000
--- a/core/img/actions/radio-checked-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-checked.svg b/core/img/actions/radio-checked.svg
deleted file mode 100644
index bb4c622a9f7..00000000000
--- a/core/img/actions/radio-checked.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#0082c9"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-disabled.svg b/core/img/actions/radio-disabled.svg
deleted file mode 100644
index e6bf778f192..00000000000
--- a/core/img/actions/radio-disabled.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#dcdcdc"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio-white.svg b/core/img/actions/radio-white.svg
deleted file mode 100644
index 0eda991c4d3..00000000000
--- a/core/img/actions/radio-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/core/img/actions/radio.svg b/core/img/actions/radio.svg
deleted file mode 100644
index 31a364b88e0..00000000000
--- a/core/img/actions/radio.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13z" fill="#fff"/><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z" fill="#969696"/></svg> \ No newline at end of file
diff --git a/core/img/actions/settings-dark.svg b/core/img/actions/settings-dark.svg
new file mode 100644
index 00000000000..2160b673e30
--- /dev/null
+++ b/core/img/actions/settings-dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1"><path d="M6.938 0A.43.43 0 0 0 6.5.438v1.25a5.818 5.818 0 0 0-1.53.656l-.907-.906a.436.436 0 0 0-.625 0l-1.5 1.5a.436.436 0 0 0 0 .624l.906.907c-.285.48-.514.976-.656 1.53H.938a.43.43 0 0 0-.438.438v2.125C.5 8.81.69 9 .938 9h1.25a5.82 5.82 0 0 0 .656 1.53l-.907.908a.436.436 0 0 0 0 .625l1.5 1.5c.176.176.45.176.625 0l.907-.907c.48.285.976.514 1.53.656v1.25c0 .25.19.438.437.438h2.125a.43.43 0 0 0 .438-.438v-1.25a5.82 5.82 0 0 0 1.53-.657l.907.907c.176.175.45.175.625 0l1.5-1.5a.436.436 0 0 0 0-.625l-.906-.906A5.79 5.79 0 0 0 13.812 9h1.25a.43.43 0 0 0 .438-.438V6.437A.43.43 0 0 0 15.062 6h-1.25a5.79 5.79 0 0 0-.656-1.532l.906-.906a.436.436 0 0 0 0-.625l-1.5-1.5a.436.436 0 0 0-.625 0l-.906.906a5.816 5.816 0 0 0-1.53-.656V.437A.43.43 0 0 0 9.063 0zM8 4.157a3.344 3.344 0 0 1 0 6.686 3.344 3.344 0 0 1 0-6.686z" display="block"/></svg>
diff --git a/core/js/files/client.js b/core/js/files/client.js
index 87559b2084c..cde3afde9d7 100644
--- a/core/js/files/client.js
+++ b/core/js/files/client.js
@@ -31,9 +31,9 @@
this._root = this._root.substr(0, this._root.length - 1);
}
- var url = 'http://';
+ var url = Client.PROTOCOL_HTTP + '://';
if (options.useHTTPS) {
- url = 'https://';
+ url = Client.PROTOCOL_HTTPS + '://';
}
url += options.host + this._root;
@@ -64,6 +64,19 @@
Client.NS_OWNCLOUD = 'http://owncloud.org/ns';
Client.NS_NEXTCLOUD = 'http://nextcloud.org/ns';
Client.NS_DAV = 'DAV:';
+
+ Client.PROPERTY_GETLASTMODIFIED = '{' + Client.NS_DAV + '}getlastmodified';
+ Client.PROPERTY_GETETAG = '{' + Client.NS_DAV + '}getetag';
+ Client.PROPERTY_GETCONTENTTYPE = '{' + Client.NS_DAV + '}getcontenttype';
+ Client.PROPERTY_RESOURCETYPE = '{' + Client.NS_DAV + '}resourcetype';
+ Client.PROPERTY_INTERNAL_FILEID = '{' + Client.NS_OWNCLOUD + '}fileid';
+ Client.PROPERTY_PERMISSIONS = '{' + Client.NS_OWNCLOUD + '}permissions';
+ Client.PROPERTY_SIZE = '{' + Client.NS_OWNCLOUD + '}size';
+ Client.PROPERTY_GETCONTENTLENGTH = '{' + Client.NS_DAV + '}getcontentlength';
+
+ Client.PROTOCOL_HTTP = 'http';
+ Client.PROTOCOL_HTTPS = 'https';
+
Client._PROPFIND_PROPERTIES = [
/**
* Modified time
@@ -259,23 +272,23 @@
var props = response.propStat[0].properties;
var data = {
- id: props['{' + Client.NS_OWNCLOUD + '}fileid'],
+ id: props[Client.PROPERTY_INTERNAL_FILEID],
path: OC.dirname(path) || '/',
name: OC.basename(path),
- mtime: (new Date(props['{' + Client.NS_DAV + '}getlastmodified'])).getTime()
+ mtime: (new Date(props[Client.PROPERTY_GETLASTMODIFIED])).getTime()
};
- var etagProp = props['{' + Client.NS_DAV + '}getetag'];
+ var etagProp = props[Client.PROPERTY_GETETAG];
if (!_.isUndefined(etagProp)) {
data.etag = this._parseEtag(etagProp);
}
- var sizeProp = props['{' + Client.NS_DAV + '}getcontentlength'];
+ var sizeProp = props[Client.PROPERTY_GETCONTENTLENGTH];
if (!_.isUndefined(sizeProp)) {
data.size = parseInt(sizeProp, 10);
}
- sizeProp = props['{' + Client.NS_OWNCLOUD + '}size'];
+ sizeProp = props[Client.PROPERTY_SIZE];
if (!_.isUndefined(sizeProp)) {
data.size = parseInt(sizeProp, 10);
}
@@ -294,12 +307,12 @@
data.isFavorite = false;
}
- var contentType = props['{' + Client.NS_DAV + '}getcontenttype'];
+ var contentType = props[Client.PROPERTY_GETCONTENTTYPE];
if (!_.isUndefined(contentType)) {
data.mimetype = contentType;
}
- var resType = props['{' + Client.NS_DAV + '}resourcetype'];
+ var resType = props[Client.PROPERTY_RESOURCETYPE];
var isFile = true;
if (!data.mimetype && resType) {
var xmlvalue = resType[0];
@@ -310,7 +323,7 @@
}
data.permissions = OC.PERMISSION_READ;
- var permissionProp = props['{' + Client.NS_OWNCLOUD + '}permissions'];
+ var permissionProp = props[Client.PROPERTY_PERMISSIONS];
if (!_.isUndefined(permissionProp)) {
var permString = permissionProp || '';
data.mountType = null;
@@ -752,7 +765,7 @@
},
/**
- * Returns the password
+ * Returns the password
*
* @since 11.0.0
* @return {String} password
@@ -816,4 +829,3 @@
OC.Files.Client = Client;
})(OC, OC.Files.FileInfo);
-
diff --git a/core/js/js.js b/core/js/js.js
index 972f0e63144..3651635541a 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1669,6 +1669,52 @@ OC.Util = {
humanFileSize: humanFileSize,
/**
+ * Returns a file size in bytes from a humanly readable string
+ * Makes 2kB to 2048.
+ * Inspired by computerFileSize in helper.php
+ * @param {string} string file size in human readable format
+ * @return {number} or null if string could not be parsed
+ *
+ *
+ */
+ computerFileSize: function (string) {
+ if (typeof string != 'string') {
+ return null;
+ }
+
+ var s = string.toLowerCase();
+ var bytes = parseFloat(s)
+
+ if (!isNaN(bytes) && isFinite(s)) {
+ return bytes;
+ }
+
+ var bytesArray = {
+ 'b' : 1,
+ 'k' : 1024,
+ 'kb': 1024,
+ 'mb': 1024 * 1024,
+ 'm' : 1024 * 1024,
+ 'gb': 1024 * 1024 * 1024,
+ 'g' : 1024 * 1024 * 1024,
+ 'tb': 1024 * 1024 * 1024 * 1024,
+ 't' : 1024 * 1024 * 1024 * 1024,
+ 'pb': 1024 * 1024 * 1024 * 1024 * 1024,
+ 'p' : 1024 * 1024 * 1024 * 1024 * 1024
+ };
+
+ var matches = s.match(/([kmgtp]?b?)$/i);
+ if (matches[1]) {
+ bytes = bytes * bytesArray[matches[1]];
+ } else {
+ return null;
+ }
+
+ bytes = Math.round(bytes);
+ return bytes;
+ },
+
+ /**
* @param timestamp
* @param format
* @returns {string} timestamp formatted as requested
diff --git a/core/js/lostpassword.js b/core/js/lostpassword.js
index 30d7b98f4e8..6e18dcc1f8b 100644
--- a/core/js/lostpassword.js
+++ b/core/js/lostpassword.js
@@ -4,7 +4,7 @@ OC.Lostpassword = {
sendSuccessMsg : t('core', '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.'),
- encryptedMsg : t('core', "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?")
+ encryptedMsg : t('core', "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 /><input type="checkbox" id="encrypted-continue" value="Yes" />')
+ '<label for="encrypted-continue">'
+ t('core', 'I know what I\'m doing')
diff --git a/core/js/mimetypelist.js b/core/js/mimetypelist.js
index e1b9dba14af..89558e21086 100644
--- a/core/js/mimetypelist.js
+++ b/core/js/mimetypelist.js
@@ -86,6 +86,7 @@ OC.MimeTypeList={
"text/x-c": "text/code",
"text/x-c++src": "text/code",
"text/x-h": "text/code",
+ "text/x-ldif": "text/code",
"text/x-java-source": "text/code",
"text/x-python": "text/code",
"text/x-shellscript": "text/code",
diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js
index cb553947de6..84a3d18942f 100644
--- a/core/js/sharedialoglinkshareview.js
+++ b/core/js/sharedialoglinkshareview.js
@@ -43,6 +43,13 @@
'</div>' +
' {{/if}}' +
' {{/if}}' +
+ ' {{#if publicEditing}}' +
+ '<div id="allowPublicEditingWrapper">' +
+ ' <span class="icon-loading-small hidden"></span>' +
+ ' <input type="checkbox" value="1" name="allowPublicEditing" id="sharingDialogAllowPublicEditing-{{cid}}" class="checkbox publicEditingCheckbox" {{{publicEditingChecked}}} />' +
+ '<label for="sharingDialogAllowPublicEditing-{{cid}}">{{publicEditingLabel}}</label>' +
+ '</div>' +
+ ' {{/if}}' +
' {{#if showPasswordCheckBox}}' +
'<input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' +
'<label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' +
@@ -87,6 +94,7 @@
'click .linkCheckbox': 'onLinkCheckBoxChange',
'click .linkText': 'onLinkTextClick',
'change .publicUploadCheckbox': 'onAllowPublicUploadChange',
+ 'change .publicEditingCheckbox': 'onAllowPublicEditingChange',
'change .hideFileListCheckbox': 'onHideFileListChange',
'click .showPasswordCheckbox': 'onShowPasswordClick'
},
@@ -128,7 +136,8 @@
'onLinkTextClick',
'onShowPasswordClick',
'onHideFileListChange',
- 'onAllowPublicUploadChange'
+ 'onAllowPublicUploadChange',
+ 'onAllowPublicEditingChange'
);
var clipboard = new Clipboard('.clipboardButton');
@@ -266,6 +275,20 @@
});
},
+ onAllowPublicEditingChange: function() {
+ var $checkbox = this.$('.publicEditingCheckbox');
+ $checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');
+
+ var permissions = OC.PERMISSION_READ;
+ if($checkbox.is(':checked')) {
+ permissions = OC.PERMISSION_UPDATE | OC.PERMISSION_READ;
+ }
+
+ this.model.saveLinkShare({
+ permissions: permissions
+ });
+ },
+
onHideFileListChange: function () {
var $checkbox = this.$('.hideFileListCheckbox');
$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');
@@ -307,6 +330,12 @@
publicUploadChecked = 'checked="checked"';
}
+ var publicEditingChecked = '';
+ if(this.model.isPublicEditingAllowed()) {
+ publicEditingChecked = 'checked="checked"';
+ }
+
+
var hideFileList = publicUploadChecked;
var hideFileListChecked = '';
@@ -320,6 +349,11 @@
&& ( !this.configModel.get('enforcePasswordForPublicLink')
|| !this.model.get('linkShare').password);
+ var publicEditable =
+ !this.model.isFolder()
+ && isLinkShare
+ && this.model.updatePermissionPossible();
+
this.$el.html(linkShareTemplate({
cid: this.cid,
shareAllowed: true,
@@ -337,6 +371,9 @@
publicUploadChecked: publicUploadChecked,
hideFileListChecked: hideFileListChecked,
publicUploadLabel: t('core', 'Allow upload and editing'),
+ publicEditing: publicEditable,
+ publicEditingChecked: publicEditingChecked,
+ publicEditingLabel: t('core', 'Allow editing'),
hideFileListLabel: t('core', 'File drop (upload only)'),
mailPrivatePlaceholder: t('core', 'Email link to person'),
mailButtonText: t('core', 'Send')
diff --git a/core/js/sharedialogresharerinfoview.js b/core/js/sharedialogresharerinfoview.js
index 654eebf4997..9a9d95cfb60 100644
--- a/core/js/sharedialogresharerinfoview.js
+++ b/core/js/sharedialogresharerinfoview.js
@@ -80,7 +80,7 @@
'core',
'Shared with you and the group {group} by {owner}',
{
- group: this.model.getReshareWith(),
+ group: this.model.getReshareWithDisplayName(),
owner: ownerDisplayName
}
);
diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js
index a0a7bbfa2dc..4647dedd722 100644
--- a/core/js/sharedialogshareelistview.js
+++ b/core/js/sharedialogshareelistview.js
@@ -35,47 +35,7 @@
'{{/unless}}' +
'{{/if}}' +
'<a href="#"><span class="icon icon-more"></span></a>' +
- '<div class="popovermenu bubble hidden menu">' +
- '<ul>' +
- '{{#if isResharingAllowed}} {{#if sharePermissionPossible}} {{#unless isMailShare}}' +
- '<li>' +
- '<span class="shareOption">' +
- '<input id="canShare-{{cid}}-{{shareWith}}" type="checkbox" name="share" class="permissions checkbox" {{#if hasSharePermission}}checked="checked"{{/if}} data-permissions="{{sharePermission}}" />' +
- '<label for="canShare-{{cid}}-{{shareWith}}">{{canShareLabel}}</label>' +
- '</span>' +
- '</li>' +
- '{{/unless}} {{/if}} {{/if}}' +
- '{{#if isFolder}}' +
- '{{#if createPermissionPossible}}{{#unless isMailShare}}' +
- '<li>' +
- '<span class="shareOption">' +
- '<input id="canCreate-{{cid}}-{{shareWith}}" type="checkbox" name="create" class="permissions checkbox" {{#if hasCreatePermission}}checked="checked"{{/if}} data-permissions="{{createPermission}}"/>' +
- '<label for="canCreate-{{cid}}-{{shareWith}}">{{createPermissionLabel}}</label>' +
- '</span>' +
- '</li>' +
- '{{/unless}}{{/if}}' +
- '{{#if updatePermissionPossible}}{{#unless isMailShare}}' +
- '<li>' +
- '<span class="shareOption">' +
- '<input id="canUpdate-{{cid}}-{{shareWith}}" type="checkbox" name="update" class="permissions checkbox" {{#if hasUpdatePermission}}checked="checked"{{/if}} data-permissions="{{updatePermission}}"/>' +
- '<label for="canUpdate-{{cid}}-{{shareWith}}">{{updatePermissionLabel}}</label>' +
- '</span>' +
- '</li>' +
- '{{/unless}}{{/if}}' +
- '{{#if deletePermissionPossible}}{{#unless isMailShare}}' +
- '<li>' +
- '<span class="shareOption">' +
- '<input id="canDelete-{{cid}}-{{shareWith}}" type="checkbox" name="delete" class="permissions checkbox" {{#if hasDeletePermission}}checked="checked"{{/if}} data-permissions="{{deletePermission}}"/>' +
- '<label for="canDelete-{{cid}}-{{shareWith}}">{{deletePermissionLabel}}</label>' +
- '</span>' +
- '</li>' +
- '{{/unless}}{{/if}}' +
- '{{/if}}' +
- '<li>' +
- '<a href="#" class="unshare"><span class="icon-loading-small hidden"></span><span class="icon icon-delete"></span><span>{{unshareLabel}}</span></a>' +
- '</li>' +
- '</ul>' +
- '</div>' +
+ '{{{popoverMenu}}}' +
'</span>' +
'</li>' +
'{{/each}}' +
@@ -94,6 +54,49 @@
'</ul>'
;
+ var TEMPLATE_POPOVER_MENU =
+ '<div class="popovermenu bubble hidden menu">' +
+ '<ul>' +
+ '{{#if isResharingAllowed}} {{#if sharePermissionPossible}} {{#unless isMailShare}}' +
+ '<li>' +
+ '<span class="shareOption menuitem">' +
+ '<input id="canShare-{{cid}}-{{shareWith}}" type="checkbox" name="share" class="permissions checkbox" {{#if hasSharePermission}}checked="checked"{{/if}} data-permissions="{{sharePermission}}" />' +
+ '<label for="canShare-{{cid}}-{{shareWith}}">{{canShareLabel}}</label>' +
+ '</span>' +
+ '</li>' +
+ '{{/unless}} {{/if}} {{/if}}' +
+ '{{#if isFolder}}' +
+ '{{#if createPermissionPossible}}{{#unless isMailShare}}' +
+ '<li>' +
+ '<span class="shareOption menuitem">' +
+ '<input id="canCreate-{{cid}}-{{shareWith}}" type="checkbox" name="create" class="permissions checkbox" {{#if hasCreatePermission}}checked="checked"{{/if}} data-permissions="{{createPermission}}"/>' +
+ '<label for="canCreate-{{cid}}-{{shareWith}}">{{createPermissionLabel}}</label>' +
+ '</span>' +
+ '</li>' +
+ '{{/unless}}{{/if}}' +
+ '{{#if updatePermissionPossible}}{{#unless isMailShare}}' +
+ '<li>' +
+ '<span class="shareOption menuitem">' +
+ '<input id="canUpdate-{{cid}}-{{shareWith}}" type="checkbox" name="update" class="permissions checkbox" {{#if hasUpdatePermission}}checked="checked"{{/if}} data-permissions="{{updatePermission}}"/>' +
+ '<label for="canUpdate-{{cid}}-{{shareWith}}">{{updatePermissionLabel}}</label>' +
+ '</span>' +
+ '</li>' +
+ '{{/unless}}{{/if}}' +
+ '{{#if deletePermissionPossible}}{{#unless isMailShare}}' +
+ '<li>' +
+ '<span class="shareOption menuitem">' +
+ '<input id="canDelete-{{cid}}-{{shareWith}}" type="checkbox" name="delete" class="permissions checkbox" {{#if hasDeletePermission}}checked="checked"{{/if}} data-permissions="{{deletePermission}}"/>' +
+ '<label for="canDelete-{{cid}}-{{shareWith}}">{{deletePermissionLabel}}</label>' +
+ '</span>' +
+ '</li>' +
+ '{{/unless}}{{/if}}' +
+ '{{/if}}' +
+ '<li>' +
+ '<a href="#" class="unshare"><span class="icon-loading-small hidden"></span><span class="icon icon-delete"></span><span>{{unshareLabel}}</span></a>' +
+ '</li>' +
+ '</ul>' +
+ '</div>';
+
/**
* @class OCA.Share.ShareDialogShareeListView
* @member {OC.Share.ShareItemModel} model
@@ -114,8 +117,14 @@
/** @type {Function} **/
_template: undefined,
+ /** @type {Function} **/
+ _popoverMenuTemplate: undefined,
+
_menuOpen: false,
+ /** @type {boolean|number} **/
+ _renderPermissionChange: false,
+
events: {
'click .unshare': 'onUnshare',
'click .icon-more': 'onToggleMenu',
@@ -182,8 +191,8 @@
});
},
- getShareeList: function() {
- var universal = {
+ getShareProperties: function() {
+ return {
avatarEnabled: this.configModel.areAvatarsEnabled(),
unshareLabel: t('core', 'Unshare'),
canShareLabel: t('core', 'can reshare'),
@@ -205,6 +214,15 @@
deletePermission: OC.PERMISSION_DELETE,
isFolder: this.model.isFolder()
};
+ },
+
+ /**
+ * get an array of sharees' share properties
+ *
+ * @returns {Array}
+ */
+ getShareeList: function() {
+ var universal = this.getShareProperties();
if(!this.model.hasUserShares()) {
return [];
@@ -256,29 +274,45 @@
},
render: function() {
- this.$el.html(this.template({
- cid: this.cid,
- sharees: this.getShareeList(),
- linkReshares: this.getLinkReshares()
- }));
-
- if(this.configModel.areAvatarsEnabled()) {
- this.$('.avatar').each(function() {
- var $this = $(this);
- if ($this.hasClass('imageplaceholderseed')) {
- $this.css({width: 32, height: 32});
- $this.imageplaceholder($this.data('seed'));
- } else {
- // user, size, ie8fix, hidedefault, callback, displayname
- $this.avatar($this.data('username'), 32, undefined, undefined, undefined, $this.data('displayname'));
- }
+ if(!this._renderPermissionChange) {
+ this.$el.html(this.template({
+ cid: this.cid,
+ sharees: this.getShareeList(),
+ linkReshares: this.getLinkReshares()
+ }));
+
+ if (this.configModel.areAvatarsEnabled()) {
+ this.$('.avatar').each(function () {
+ var $this = $(this);
+ if ($this.hasClass('imageplaceholderseed')) {
+ $this.css({width: 32, height: 32});
+ $this.imageplaceholder($this.data('seed'));
+ } else {
+ // user, size, ie8fix, hidedefault, callback, displayname
+ $this.avatar($this.data('username'), 32, undefined, undefined, undefined, $this.data('displayname'));
+ }
+ });
+ }
+
+ this.$('.has-tooltip').tooltip({
+ placement: 'bottom'
});
+ } else {
+ var permissionChangeShareId = parseInt(this._renderPermissionChange, 10);
+ var shareWithIndex = this.model.findShareWithIndex(permissionChangeShareId);
+ var sharee = this.getShareeObject(shareWithIndex);
+ $.extend(sharee, this.getShareProperties());
+ var $li = this.$('li[data-share-id=' + permissionChangeShareId + ']');
+ $li.find('.popovermenu').replaceWith(this.popoverMenuTemplate(sharee));
+
+ var checkBoxId = 'canEdit-' + this.cid + '-' + sharee.shareWith;
+ checkBoxId = '#' + checkBoxId.replace( /(:|\.|\[|\]|,|=|@)/g, "\\$1");
+ var $edit = $li.parent().find(checkBoxId);
+ if($edit.length === 1) {
+ $edit.prop('checked', sharee.hasEditPermission);
+ }
}
- this.$('.has-tooltip').tooltip({
- placement: 'bottom'
- });
-
var _this = this;
this.$('.popovermenu').on('afterHide', function() {
_this._menuOpen = false;
@@ -292,6 +326,8 @@
}
}
+ this._renderPermissionChange = false;
+
this.delegateEvents();
return this;
@@ -305,9 +341,28 @@
if (!this._template) {
this._template = Handlebars.compile(TEMPLATE);
}
+ var sharees = data.sharees;
+ if(_.isArray(sharees)) {
+ for (var i = 0; i < sharees.length; i++) {
+ data.sharees[i].popoverMenu = this.popoverMenuTemplate(sharees[i]);
+ }
+ }
return this._template(data);
},
+ /**
+ * renders the popover template and returns the resulting HTML
+ *
+ * @param {Object} data
+ * @returns {string}
+ */
+ popoverMenuTemplate: function(data) {
+ if(!this._popoverMenuTemplate) {
+ this._popoverMenuTemplate = Handlebars.compile(TEMPLATE_POPOVER_MENU);
+ }
+ return this._popoverMenuTemplate(data);
+ },
+
onUnshare: function(event) {
event.preventDefault();
event.stopPropagation();
@@ -385,7 +440,20 @@
permissions |= $(checkbox).data('permissions');
});
- this.model.updateShare(shareId, {permissions: permissions});
+
+ /** disable checkboxes during save operation to avoid race conditions **/
+ $li.find('input[type=checkbox]').prop('disabled', true);
+ var enableCb = function() {
+ $li.find('input[type=checkbox]').prop('disabled', false);
+ };
+ var errorCb = function(elem, msg) {
+ OC.dialogs.alert(msg, t('core', 'Error while sharing'));
+ enableCb();
+ };
+
+ this.model.updateShare(shareId, {permissions: permissions}, {error: errorCb, success: enableCb});
+
+ this._renderPermissionChange = shareId;
},
});
diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js
index a784f59f67f..ae4c07e3f4e 100644
--- a/core/js/shareitemmodel.js
+++ b/core/js/shareitemmodel.js
@@ -272,6 +272,10 @@
return this.get('allowPublicUploadStatus');
},
+ isPublicEditingAllowed: function() {
+ return this.get('allowPublicEditingStatus');
+ },
+
/**
* @returns {boolean}
*/
@@ -345,6 +349,14 @@
},
/**
+ * @returns {string}
+ */
+ getReshareWithDisplayName: function() {
+ var reshare = this.get('reshare');
+ return reshare.share_with_displayname || reshare.share_with;
+ },
+
+ /**
* @returns {number}
*/
getReshareType: function() {
@@ -391,6 +403,26 @@
return share.share_with_displayname;
},
+ /**
+ * returns the array index of a sharee for a provided shareId
+ *
+ * @param shareId
+ * @returns {number}
+ */
+ findShareWithIndex: function(shareId) {
+ var shares = this.get('shares');
+ if(!_.isArray(shares)) {
+ throw "Unknown Share";
+ }
+ for(var i = 0; i < shares.length; i++) {
+ var shareWith = shares[i];
+ if(shareWith.id === shareId) {
+ return i;
+ }
+ }
+ throw "Unknown Sharee";
+ },
+
getShareType: function(shareIndex) {
/** @type OC.Share.Types.ShareInfo **/
var share = this.get('shares')[shareIndex];
@@ -553,7 +585,7 @@
return superShare;
},
- fetch: function() {
+ fetch: function(options) {
var model = this;
this.trigger('request', this);
@@ -577,6 +609,10 @@
shares: sharesMap,
reshare: reshare
}));
+
+ if(!_.isUndefined(options) && _.isFunction(options.success)) {
+ options.success();
+ }
});
return deferred;
@@ -647,6 +683,17 @@
});
}
+ var allowPublicEditingStatus = true;
+ if(!_.isUndefined(data.shares)) {
+ $.each(data.shares, function (key, value) {
+ if (value.share_type === OC.Share.SHARE_TYPE_LINK) {
+ allowPublicEditingStatus = (value.permissions & OC.PERMISSION_UPDATE) ? true : false;
+ return true;
+ }
+ });
+ }
+
+
var hideFileListStatus = false;
if(!_.isUndefined(data.shares)) {
$.each(data.shares, function (key, value) {
@@ -730,6 +777,7 @@
linkShare: linkShare,
permissions: permissions,
allowPublicUploadStatus: allowPublicUploadStatus,
+ allowPublicEditingStatus: allowPublicEditingStatus,
hideFileListStatus: hideFileListStatus
};
},
diff --git a/core/js/systemtags/systemtagmodel.js b/core/js/systemtags/systemtagmodel.js
index 89728357e25..72450a2abd0 100644
--- a/core/js/systemtags/systemtagmodel.js
+++ b/core/js/systemtags/systemtagmodel.js
@@ -9,7 +9,15 @@
*/
(function(OC) {
- var NS_OWNCLOUD = 'http://owncloud.org/ns';
+
+ _.extend(OC.Files.Client, {
+ PROPERTY_FILEID: '{' + OC.Files.Client.NS_OWNCLOUD + '}id',
+ PROPERTY_CAN_ASSIGN:'{' + OC.Files.Client.NS_OWNCLOUD + '}can-assign',
+ PROPERTY_DISPLAYNAME: '{' + OC.Files.Client.NS_OWNCLOUD + '}display-name',
+ PROPERTY_USERVISIBLE: '{' + OC.Files.Client.NS_OWNCLOUD + '}user-visible',
+ PROPERTY_USERASSIGNABLE:'{' + OC.Files.Client.NS_OWNCLOUD + '}user-assignable',
+ });
+
/**
* @class OCA.SystemTags.SystemTagsCollection
* @classdesc
@@ -28,12 +36,12 @@
},
davProperties: {
- 'id': '{' + NS_OWNCLOUD + '}id',
- 'name': '{' + NS_OWNCLOUD + '}display-name',
- 'userVisible': '{' + NS_OWNCLOUD + '}user-visible',
- 'userAssignable': '{' + NS_OWNCLOUD + '}user-assignable',
+ 'id': OC.Files.Client.PROPERTY_FILEID,
+ 'name': OC.Files.Client.PROPERTY_DISPLAYNAME,
+ 'userVisible': OC.Files.Client.PROPERTY_USERVISIBLE,
+ 'userAssignable': OC.Files.Client.PROPERTY_USERASSIGNABLE,
// read-only, effective permissions computed by the server,
- 'canAssign': '{' + NS_OWNCLOUD + '}can-assign'
+ 'canAssign': OC.Files.Client.PROPERTY_CAN_ASSIGN
},
parse: function(data) {
@@ -50,4 +58,3 @@
OC.SystemTags = OC.SystemTags || {};
OC.SystemTags.SystemTagModel = SystemTagModel;
})(OC);
-
diff --git a/core/js/systemtags/systemtagsinputfield.js b/core/js/systemtags/systemtagsinputfield.js
index 690525c0ebb..d5f6bd5f97e 100644
--- a/core/js/systemtags/systemtagsinputfield.js
+++ b/core/js/systemtags/systemtagsinputfield.js
@@ -40,7 +40,9 @@
'<form class="systemtags-rename-form">' +
' <label class="hidden-visually" for="{{cid}}-rename-input">{{renameLabel}}</label>' +
' <input id="{{cid}}-rename-input" type="text" value="{{name}}">' +
- ' <a href="#" class="delete icon icon-delete" title="{{deleteTooltip}}"></a>' +
+ ' {{#if isAdmin}}' +
+ ' <a href="#" class="delete icon icon-delete" title="{{deleteTooltip}}"></a>' +
+ ' {{/if}}' +
'</form>';
/**
@@ -148,7 +150,8 @@
cid: this.cid,
name: oldName,
deleteTooltip: t('core', 'Delete'),
- renameLabel: t('core', 'Rename')
+ renameLabel: t('core', 'Rename'),
+ isAdmin: this._isAdmin
}));
$item.find('.label').after($renameForm);
$item.find('.label, .systemtags-actions').addClass('hidden');
diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js
index d1734a9f3d1..d83c0cd9a38 100644
--- a/core/js/tests/specs/coreSpec.js
+++ b/core/js/tests/specs/coreSpec.js
@@ -590,6 +590,36 @@ describe('Core base tests', function() {
}
});
});
+ describe('computerFileSize', function() {
+ it('correctly parses file sizes from a human readable formated string', function() {
+ var data = [
+ ['125', 125],
+ ['125.25', 125.25],
+ ['0 B', 0],
+ ['125 B', 125],
+ ['125b', 125],
+ ['125 KB', 128000],
+ ['125kb', 128000],
+ ['122.1 MB', 128031130],
+ ['122.1mb', 128031130],
+ ['119.2 GB', 127990025421],
+ ['119.2gb', 127990025421],
+ ['116.4 TB', 127983153473126],
+ ['116.4tb', 127983153473126]
+ ];
+ for (var i = 0; i < data.length; i++) {
+ expect(OC.Util.computerFileSize(data[i][0])).toEqual(data[i][1]);
+ }
+ });
+ it('returns null if the parameter is not a string', function() {
+ expect(OC.Util.computerFileSize(NaN)).toEqual(null);
+ expect(OC.Util.computerFileSize(125)).toEqual(null);
+ });
+ it('returns null if the string is unparsable', function() {
+ expect(OC.Util.computerFileSize('')).toEqual(null);
+ expect(OC.Util.computerFileSize('foobar')).toEqual(null);
+ });
+ });
describe('stripTime', function() {
it('strips time from dates', function() {
expect(OC.Util.stripTime(new Date(2014, 2, 24, 15, 4, 45, 24)))
@@ -937,8 +967,9 @@ describe('Core base tests', function() {
fadeOutStub.restore();
});
it('hides the first notification when calling hide without arguments', function() {
- var $row1 = OC.Notification.show('One');
+ OC.Notification.show('One');
var $row2 = OC.Notification.show('Two');
+ spyOn(console, 'warn');
var $el = $('#notification');
var $rows = $el.find('.row');
@@ -946,6 +977,7 @@ describe('Core base tests', function() {
OC.Notification.hide();
+ expect(console.warn).toHaveBeenCalled();
$rows = $el.find('.row');
expect($rows.length).toEqual(1);
expect($rows.eq(0).is($row2)).toEqual(true);
diff --git a/core/js/tests/specs/l10nSpec.js b/core/js/tests/specs/l10nSpec.js
index 2ceb2f4a916..064b27aa34a 100644
--- a/core/js/tests/specs/l10nSpec.js
+++ b/core/js/tests/specs/l10nSpec.js
@@ -21,6 +21,7 @@ describe('OC.L10N tests', function() {
describe('text translation', function() {
beforeEach(function() {
+ spyOn(console, 'warn');
OC.L10N.register(TEST_APP, {
'Hello world!': 'Hallo Welt!',
'Hello {name}, the weather is {weather}': 'Hallo {name}, das Wetter ist {weather}',
@@ -78,8 +79,10 @@ describe('OC.L10N tests', function() {
}
it('generates plural for default text when translation does not exist', function() {
+ spyOn(console, 'warn');
OC.L10N.register(TEST_APP, {
});
+ expect(console.warn).toHaveBeenCalled();
expect(
n(TEST_APP, 'download %n file', 'download %n files', 0)
).toEqual('download 0 files');
@@ -94,10 +97,12 @@ describe('OC.L10N tests', function() {
).toEqual('download 1024 files');
});
it('generates plural with default function when no forms specified', function() {
+ spyOn(console, 'warn');
OC.L10N.register(TEST_APP, {
'_download %n file_::_download %n files_':
['%n Datei herunterladen', '%n Dateien herunterladen']
});
+ expect(console.warn).toHaveBeenCalled();
checkPlurals();
});
it('generates plural with generated function when forms is specified', function() {
@@ -150,9 +155,11 @@ describe('OC.L10N tests', function() {
it('calls callback if translation already available', function() {
var promiseStub = sinon.stub();
var callbackStub = sinon.stub();
+ spyOn(console, 'warn');
OC.L10N.register(TEST_APP, {
'Hello world!': 'Hallo Welt!'
});
+ expect(console.warn).toHaveBeenCalled();
OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
expect(callbackStub.calledOnce).toEqual(true);
expect(promiseStub.calledOnce).toEqual(true);
diff --git a/core/js/tests/specs/sharedialogviewSpec.js b/core/js/tests/specs/sharedialogviewSpec.js
index 985610d51fb..cbb74714ff7 100644
--- a/core/js/tests/specs/sharedialogviewSpec.js
+++ b/core/js/tests/specs/sharedialogviewSpec.js
@@ -975,16 +975,35 @@ describe('OC.Share.ShareDialogView', function() {
dialog.render();
expect(dialog.$el.find('.shareWithField').prop('disabled')).toEqual(true);
});
- it('shows reshare owner', function() {
+ it('shows reshare owner for single user share', function() {
shareModel.set({
reshare: {
- uid_owner: 'user1'
+ uid_owner: 'user1',
+ displayname_owner: 'User One',
+ share_type: OC.Share.SHARE_TYPE_USER
},
shares: [],
permissions: OC.PERMISSION_READ
});
dialog.render();
expect(dialog.$el.find('.resharerInfoView .reshare').length).toEqual(1);
+ expect(dialog.$el.find('.resharerInfoView .reshare').text().trim()).toEqual('Shared with you by User One');
+ });
+ it('shows reshare owner for single user share', function() {
+ shareModel.set({
+ reshare: {
+ uid_owner: 'user1',
+ displayname_owner: 'User One',
+ share_with: 'group2',
+ share_with_displayname: 'Group Two',
+ share_type: OC.Share.SHARE_TYPE_GROUP
+ },
+ shares: [],
+ permissions: OC.PERMISSION_READ
+ });
+ dialog.render();
+ expect(dialog.$el.find('.resharerInfoView .reshare').length).toEqual(1);
+ expect(dialog.$el.find('.resharerInfoView .reshare').text().trim()).toEqual('Shared with you and the group Group Two by User One');
});
it('does not show reshare owner if owner is current user', function() {
shareModel.set({
diff --git a/core/js/tests/specs/shareitemmodelSpec.js b/core/js/tests/specs/shareitemmodelSpec.js
index 1cddcb2acaa..3d3baf75d15 100644
--- a/core/js/tests/specs/shareitemmodelSpec.js
+++ b/core/js/tests/specs/shareitemmodelSpec.js
@@ -190,6 +190,7 @@ describe('OC.Share.ShareItemModel', function() {
uid_owner: 'owner',
displayname_owner: 'Owner',
share_with: 'root',
+ share_with_displayname: 'Wurzel',
permissions: 1
},
{
@@ -221,7 +222,11 @@ describe('OC.Share.ShareItemModel', function() {
// user share has higher priority
expect(reshare.share_type).toEqual(OC.Share.SHARE_TYPE_USER);
expect(reshare.share_with).toEqual('root');
+ expect(reshare.share_with_displayname).toEqual('Wurzel');
expect(reshare.id).toEqual('1');
+
+ expect(model.getReshareWith()).toEqual('root');
+ expect(model.getReshareWithDisplayName()).toEqual('Wurzel');
});
it('does not parse link share when for a different file', function() {
/* jshint camelcase: false */
diff --git a/core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js b/core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js
index 503bef7cf2b..8d3f67bfa0d 100644
--- a/core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js
+++ b/core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js
@@ -267,20 +267,6 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() {
saveStub.restore();
});
- it('deletes model and submits change when clicking delete', function() {
- var destroyStub = sinon.stub(OC.SystemTags.SystemTagModel.prototype, 'destroy');
-
- expect($dropdown.find('.delete').length).toEqual(0);
- $dropdown.find('.rename').mouseup();
- // delete button appears
- expect($dropdown.find('.delete').length).toEqual(1);
- $dropdown.find('.delete').mouseup();
-
- expect(destroyStub.calledOnce).toEqual(true);
- expect(destroyStub.calledOn(view.collection.get('1')));
-
- destroyStub.restore();
- });
});
describe('setting data', function() {
it('sets value when calling setValues', function() {
@@ -299,12 +285,18 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() {
});
describe('as admin', function() {
+ var $dropdown;
+
beforeEach(function() {
view = new OC.SystemTags.SystemTagsInputField({
isAdmin: true
});
- view.render();
$('.testInputContainer').append(view.$el);
+ $dropdown = $('<div class="select2-dropdown"></div>');
+ select2Stub.withArgs('dropdown').returns($dropdown);
+ $('#testArea').append($dropdown);
+
+ view.render();
});
it('formatResult renders tag name with visibility', function() {
var opts = select2Stub.getCall(0).args[0];
@@ -431,15 +423,50 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() {
]);
});
});
+ describe('tag actions', function() {
+ var opts;
+
+ beforeEach(function() {
+
+ opts = select2Stub.getCall(0).args[0];
+
+ view.collection.add([
+ new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}),
+ ]);
+
+ $dropdown.append(opts.formatResult(view.collection.get('1').toJSON()));
+
+ });
+ it('deletes model and submits change when clicking delete', function() {
+ var destroyStub = sinon.stub(OC.SystemTags.SystemTagModel.prototype, 'destroy');
+
+ expect($dropdown.find('.delete').length).toEqual(0);
+ $dropdown.find('.rename').mouseup();
+ // delete button appears
+ expect($dropdown.find('.delete').length).toEqual(1);
+ $dropdown.find('.delete').mouseup();
+
+ expect(destroyStub.calledOnce).toEqual(true);
+ expect(destroyStub.calledOn(view.collection.get('1')));
+
+ destroyStub.restore();
+ });
+ });
});
describe('as user', function() {
+ var $dropdown;
+
beforeEach(function() {
view = new OC.SystemTags.SystemTagsInputField({
isAdmin: false
});
- view.render();
$('.testInputContainer').append(view.$el);
+ $dropdown = $('<div class="select2-dropdown"></div>');
+ select2Stub.withArgs('dropdown').returns($dropdown);
+ $('#testArea').append($dropdown);
+
+ view.render();
});
it('formatResult renders tag name only', function() {
var opts = select2Stub.getCall(0).args[0];
@@ -570,5 +597,33 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() {
]);
});
});
+ describe('tag actions', function() {
+ var opts;
+
+ beforeEach(function() {
+
+ opts = select2Stub.getCall(0).args[0];
+
+ view.collection.add([
+ new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}),
+ ]);
+
+ $dropdown.append(opts.formatResult(view.collection.get('1').toJSON()));
+
+ });
+ it('deletes model and submits change when clicking delete', function() {
+ var destroyStub = sinon.stub(OC.SystemTags.SystemTagModel.prototype, 'destroy');
+
+ expect($dropdown.find('.delete').length).toEqual(0);
+ $dropdown.find('.rename').mouseup();
+ // delete button appears only for admins
+ expect($dropdown.find('.delete').length).toEqual(0);
+ $dropdown.find('.delete').mouseup();
+
+ expect(destroyStub.notCalled).toEqual(true);
+
+ destroyStub.restore();
+ });
+ });
});
});
diff --git a/core/js/update.js b/core/js/update.js
index 32cf2ce5ecc..e849d8a16ce 100644
--- a/core/js/update.js
+++ b/core/js/update.js
@@ -72,7 +72,7 @@
var span = $('<span>')
.addClass('bold');
if(message === 'Exception: Updates between multiple major versions and downgrades are unsupported.') {
- span.append(t('core', 'The update was unsuccessful. For more information <a href="{url}">check our forum post</a> covering this issue.', {'url': 'https://forum.owncloud.org/viewtopic.php?f=17&t=32087'}));
+ span.append(t('core', 'The update was unsuccessful. For more information <a href="{url}">check our forum post</a> covering this issue.', {'url': 'https://help.nextcloud.com/t/updates-between-multiple-major-versions-are-unsupported/7094'}));
} else {
span.append(t('core', 'The update was unsuccessful. ' +
'Please report this issue to the ' +
diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js
new file mode 100644
index 00000000000..a23ead44e93
--- /dev/null
+++ b/core/l10n/bg_BG.js
@@ -0,0 +1,370 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Моля изберете файл.",
+ "File is too big" : "Файлът е твърде голям",
+ "The selected file is not an image." : "Избраният файл не е изображение.",
+ "The selected file cannot be read." : "Избраният файл не може да бъде отворен.",
+ "Invalid file provided" : "Предоставен е невалиден файл",
+ "No image or file provided" : "Не бяха доставени картинка или файл",
+ "Unknown filetype" : "Непознат тип файл",
+ "Invalid image" : "Невалидно изображение",
+ "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" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е изтекла",
+ "Couldn't send reset email. Please make sure your username is correct." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, уверете се, че потребителското име е правилно.",
+ "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." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, свържете се с вашия администратор.",
+ "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.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Проверка на таблица %s",
+ "Turned on maintenance mode" : "Режимът за поддръжка е включен",
+ "Turned off maintenance mode" : "Режимът за поддръжка е изключен",
+ "Maintenance mode is kept active" : "Режим на поддръжка се поддържа активен",
+ "Updating database schema" : "Актуализиране на схемата на базата данни",
+ "Updated database" : "Базата данни е обоновена",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Проверка дали схемата на базата данни може да се актуализира (възможно е да отнеме повече време в зависимост от големината на базата данни)",
+ "Checked database schema update" : "Обновяването на схемата на базата данни е проверено",
+ "Checking updates of apps" : "Проверка на актуализациите за добавките",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Проверка дали схемата на базата данни %s може да бъде актуализирана (това може да отнеме повече време в зависимост от големината на базата данни)",
+ "Checked database schema update for apps" : "Обновяването на схемата на базата данни за приложения е проверено",
+ "Updated \"%s\" to %s" : "Обновен \"%s\" до %s",
+ "Set log level to debug" : "Промени ниво на лог на дебъг",
+ "Reset log level" : "Възстанови ниво на лог",
+ "Starting code integrity check" : "Стартиране на проверка за цялостта на кода",
+ "Finished code integrity check" : "Приключена проверка за цялостта на кода",
+ "%s (3rdparty)" : "%s (3-ти лица)",
+ "%s (incompatible)" : "%s (несъвместим)",
+ "Following apps have been disabled: %s" : "Следната добавка беше изключена: %s",
+ "Already up to date" : "Вече е актуална",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Има проблем с проверката за цялостта на кода. Повече информация…</a>",
+ "Settings" : "Настройки",
+ "Connection to server lost" : "Връзката със сървъра е загубена",
+ "Problem loading page, reloading in 5 seconds" : "Проблем при зареждане на страницата, презареждане след 5 секунди",
+ "Saving..." : "Запазване...",
+ "Dismiss" : "Отхвърляне",
+ "This action requires you to confirm your password" : "Това действие изисква да потвърдите паролата си",
+ "Authentication required" : "Изисква удостоверяване",
+ "Password" : "Парола",
+ "Cancel" : "Отказ",
+ "Confirm" : "Потвърди",
+ "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." : "Връзката за възстановяване на паролата беше изпратена до вашия имейл. Ако не я получите в разумен период от време, проверете спам и junk папките.<br>Ако не я откривате и там, се свържете с местния администратор.",
+ "I know what I'm doing" : "Знам какво правя",
+ "Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържете се с администратора.",
+ "No" : "Не",
+ "Yes" : "Да",
+ "No files in here" : "Тук няма файлове",
+ "Choose" : "Избиране",
+ "Error loading file picker template: {error}" : "Грешка при зареждането на шаблон за избор на файл: {error}",
+ "Ok" : "Добре",
+ "Error loading message template: {error}" : "Грешка при зареждането на шаблон за съобщения: {error}",
+ "read-only" : "Само за четене",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} файлов конфликт","{count} файлови кофликта"],
+ "One file conflict" : "Един файлов конфликт",
+ "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." : "Ако изберете и двете версии, към името на копирания файл ще бъде добавено число.",
+ "Continue" : "Продължаване",
+ "(all selected)" : "(всички избрани)",
+ "({count} selected)" : "({count} избрани)",
+ "Error loading file exists template" : "Грешка при зареждането на шаблон за вече съществуващ файл",
+ "Pending" : "Чакащо",
+ "Very weak password" : "Много слаба парола",
+ "Weak password" : "Слаба парола",
+ "So-so password" : "Не особено добра парола",
+ "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>." : "Не е настроен кеш за паметта. За да повишите ефективността, моля настройте кеш за паметта ако е възможно. Допълнителна информация може да бъде намерена в нашата <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 Group</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>." : "Хедърите за обратно прокси са невалидни, или достъпвате 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>." : "Кеширането на паметта е настроено като разпределена кеш, но е инсталиран грешен PHP модул \"memcache\". \\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>)",
+ "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 файлът не функционира. Силно препоръчваме да настроите уеб сървъра по такъв начин, че директорията за данни да не бъде достъпна или я преместете извън директорията на уеб сървъра.",
+ "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." : "\"{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>." : "HTTP хедъра на \"Strict-Transport-Security\" не е конфигуриран за най-малко \"{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" : "Задаване на дата на изтичане",
+ "Expiration" : "Изтичане",
+ "Expiration date" : "Дата на изтичане",
+ "Choose a password for the public link" : "Изберете парола за общодостъпната връзка",
+ "Copied!" : "Копирано!",
+ "Copy" : "Копиране",
+ "Not supported!" : "Не се поддържа!",
+ "Press ⌘-C to copy." : "За копиране натиснете ⌘-C.",
+ "Press Ctrl-C to copy." : "За копиране натиснете Ctrl-C.",
+ "Resharing is not allowed" : "Повторно споделяне не е разрешено.",
+ "Share link" : "Връзка за споделяне",
+ "Link" : "Връзка",
+ "Password protect" : "Защитено с парола",
+ "Allow upload and editing" : "Позволи обновяване и редактиране",
+ "Allow editing" : "Позволяване на редактиране",
+ "File drop (upload only)" : "Пускане на файл (качване само)",
+ "Email link to person" : "Имейл връзка към човек",
+ "Send" : "Изпращане",
+ "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с вас и групата {group}",
+ "Shared with you by {owner}" : "Споделено с вас от {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} споделен с връзка",
+ "group" : "група",
+ "remote" : "отдалечен",
+ "email" : "имейл",
+ "Unshare" : "Прекратяване на споделяне",
+ "can reshare" : "може да споделя",
+ "can edit" : "може да променя",
+ "can create" : "може да създава",
+ "can change" : "може да ",
+ "can delete" : "може да изтрива",
+ "access control" : "контрол на достъпа",
+ "Could not unshare" : "Споделянето не е прекратено",
+ "Share details could not be loaded for this item." : "Данните за споделяне не могат да бъдат заредени",
+ "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)",
+ "Share" : "Споделяне",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Сподели с хора на други сървъри, използващи тяхните Федерални Cloud ID username@example.com/nextcloud",
+ "Share with users or by mail..." : "Споделяне с потребители или чрез имейл...",
+ "Share with users or remote users..." : "Споделяне с потребители или с отдалечени потребители...",
+ "Share with users, remote users or by mail..." : "Споделяне с потребители, отдалечени потребители или с имейл...",
+ "Share with users or groups..." : "Споделяне с потребители или групи...",
+ "Share with users, groups or by mail..." : "Споделяне с потребители, групи или чрез имейл...",
+ "Share with users, groups or remote users..." : "Споделяне с потребители, групи или отдалечени потребители...",
+ "Share with users, groups, remote users or by 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}" : "Грешка при зареждането на шаблон за диалог: {error}.",
+ "No tags selected for deletion." : "Не са избрани тагове за изтриване.",
+ "unknown text" : "непознат текст",
+ "Hello world!" : "Здравей Свят!",
+ "sunny" : "слънчево",
+ "Hello {name}, the weather is {weather}" : "Здравей {name}, времето е {weather}",
+ "Hello {name}" : "Здравейте, {name}",
+ "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." : "Моля, презаредете страницата.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Актуализацията беше неуспешна. За повече информация <a href=\"{url}\">погледнете нашият пост</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 now." : "Обновяването беше успешно. Сега те пренасочваме към Nextcloud.",
+ "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" : "Админ",
+ "Help" : "Помощ",
+ "Access forbidden" : "Достъпът е забранен",
+ "File not found" : "Файлът не е открит",
+ "The specified document has not been found on the server." : "Избраният документ не е намерен на сървъра.",
+ "You can click here to return to %s." : "Можете да натиснете тук, за да се върнете на %s.",
+ "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!" : "Поздрави!",
+ "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." : "Моля, свържете се със сървърния администратор, ако тази грешка се появи отново. Също така Ви Молим да включите техническите данни, показани в доклада по-долу.",
+ "More details can be found in the server log." : "Повече детайли могат да бъдат намерени в сървърния журнал.",
+ "Technical details" : "Технически детайли",
+ "Remote Address: %s" : "Отдалечен адрес: %s",
+ "Request ID: %s" : "ID на заявка: %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." : "Вашата директория за данни и файлове Ви вероятно са достъпни от интернет, поради това, че файлът \".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" : "Хранилища и бази данни",
+ "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 password" : "Парола за базата данни",
+ "Database name" : "Име на базата данни",
+ "Database tablespace" : "Tablespace на базата данни",
+ "Database host" : "Хост за базата данни",
+ "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" : "Завършване на настройките",
+ "Finishing …" : "Завършване...",
+ "Need help?" : "Нуждаете се от помощ?",
+ "See the documentation" : "Прегледайте документацията",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "За да функционира приложението изисква JavaScript. Моля, {linkstart}включете JavaScript{linkend} и презаредете страницата.",
+ "Search" : "Търсене",
+ "Log out" : "Отписване",
+ "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." : "Опитайте отново или се свържете с администраотра.",
+ "Username or email" : "Потребител или имейл",
+ "Wrong password. Reset it?" : "Грешна парола. Желаете ли нова парола?",
+ "Wrong password." : "Грешна парола",
+ "Log in" : "Вписване",
+ "Stay logged in" : "Остани вписан",
+ "Alternative Logins" : "Алтернативни методи на вписване",
+ "Use the following link to reset your password: {link}" : "Използвайте следната връзка, за да възстановите паролата си: {link}",
+ "New password" : "Нова парола",
+ "New Password" : "Нова парола",
+ "Reset password" : "Възстановяване на паролата",
+ "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>.",
+ "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." : "Благодарим за търпението.",
+ "Two-factor authentication" : "Двуфакторно удостоверяване",
+ "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_domains\" настройките в 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\" като сигурен домейн",
+ "App update required" : "Изисква се обновяване на добавката",
+ "%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." : "Моля, уверете се, че сте направили копия на базата данни, папките с настройки и данните, преди да продължите.",
+ "Start update" : "Начало на обновяването",
+ "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 page will refresh itself when the %s instance is available again." : "Страницата ще се зареди автоматично, когато %s е отново на линия.",
+ "Error loading tags" : "Грешка при зареждане на етикети",
+ "Tag already exists" : "Етикетът вече съществува",
+ "Error deleting tag(s)" : "Грешка при изтриване на етикет(и)",
+ "Error tagging" : "Грешка при задаване на етикета",
+ "Error untagging" : "Грешка при премахване на етикета",
+ "Error favoriting" : "Грешка при добавяне в любими",
+ "Error unfavoriting" : "Грешка при премахване от любими",
+ "Couldn't send mail to following users: %s " : "Изпращането на имейл до следните потребители не е възможно: %s",
+ "Sunday" : "неделя",
+ "Monday" : "понеделник",
+ "Tuesday" : "вторник",
+ "Wednesday" : "сряда",
+ "Thursday" : "четвъртък",
+ "Friday" : "петък",
+ "Saturday" : "събота",
+ "Sun." : "нед",
+ "Mon." : "пон",
+ "Tue." : "вт",
+ "Wed." : "ср",
+ "Thu." : "чет",
+ "Fri." : "пет",
+ "Sat." : "съб",
+ "Su" : "нд",
+ "Mo" : "пн",
+ "Tu" : "вт",
+ "We" : "ср",
+ "Th" : "чт",
+ "Fr" : "пт",
+ "Sa" : "сб",
+ "January" : "януари",
+ "February" : "февруару",
+ "March" : "март",
+ "April" : "април",
+ "May" : "май",
+ "June" : "юни",
+ "July" : "юли",
+ "August" : "август",
+ "September" : "септември",
+ "October" : "октомври",
+ "November" : "ноември",
+ "December" : "декември",
+ "Jan." : "яну",
+ "Feb." : "фев",
+ "Mar." : "мар",
+ "Apr." : "апр",
+ "May." : "май",
+ "Jun." : "юни",
+ "Jul." : "юли",
+ "Aug." : "авг",
+ "Sep." : "сеп",
+ "Oct." : "окт",
+ "Nov." : "ное",
+ "Dec." : "дек",
+ "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/>Наистина ли желаете да продължите?",
+ "This server has no working Internet connection. 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." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Хедърите за обратно прокси са невалидни, или достъпвате Nextcloud от доверено прокси. Ако не достъпвате Nextcloud от доверено прокси, то това е проблем в сигурността и може да позволи на хакер да прикрие IP адреса си в Nextcloud. Допълнителна информация може да бъде намерена в нашата <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документация</a>.",
+ "Hide file listing" : "Скрий показването на файлове",
+ "Sending ..." : "Изпращане ...",
+ "Email sent" : "Имейла е изпратен",
+ "Send link via email" : "Сподели връзка с имейл",
+ "notify by email" : "уведомяване по електронна поща",
+ "can share" : "може да споделя",
+ "create" : "създаване",
+ "change" : "промяна",
+ "delete" : "изтриване",
+ "{sharee} (at {server})" : "{sharee} (в {server})",
+ "Share with users…" : "Споделяне с потребители...",
+ "Share with users, groups or remote users…" : "Споделяне с потребители, групи и отдалечени потребители...",
+ "Share with users or groups…" : "Споделяне с потребители или групи...",
+ "Share with users or remote users…" : "Споделяне с потребители или с отдалечени потребители...",
+ "Warning" : "Предупреждение",
+ "Error while sending notification" : "Грешка при изпращане на уведомление",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Актуализирането е в процес, в някой среди - напускането на тази страница може да прекъсне процеса.",
+ "Updating to {version}" : "Обновяване до {version}",
+ "The update was successful. There were warnings." : "Обновяването мина успешно. Има предупреждения.",
+ "No search results in other folders" : "Няма търсени резултати в други папки",
+ "Two-step verification" : "Потвърждаване в две стъпки",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Повишената сигурност е активирана за профила ви. Моля удостоверете използвайки втори фактор.",
+ "Cancel login" : "Откажи вписване",
+ "Please authenticate using the selected factor." : "Моля удостоверете използвайки вторият фактор.",
+ "An error occured while verifying the token" : "Възникна грешка при проверка на токена"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json
new file mode 100644
index 00000000000..7146057c1f0
--- /dev/null
+++ b/core/l10n/bg_BG.json
@@ -0,0 +1,368 @@
+{ "translations": {
+ "Please select a file." : "Моля изберете файл.",
+ "File is too big" : "Файлът е твърде голям",
+ "The selected file is not an image." : "Избраният файл не е изображение.",
+ "The selected file cannot be read." : "Избраният файл не може да бъде отворен.",
+ "Invalid file provided" : "Предоставен е невалиден файл",
+ "No image or file provided" : "Не бяха доставени картинка или файл",
+ "Unknown filetype" : "Непознат тип файл",
+ "Invalid image" : "Невалидно изображение",
+ "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" : "Нулирането на паролата е невъзможно, защото връзката за удостоверение е изтекла",
+ "Couldn't send reset email. Please make sure your username is correct." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, уверете се, че потребителското име е правилно.",
+ "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." : "Неуспешно изпращане на имейл за възстановяване на паролата. Моля, свържете се с вашия администратор.",
+ "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.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Проверка на таблица %s",
+ "Turned on maintenance mode" : "Режимът за поддръжка е включен",
+ "Turned off maintenance mode" : "Режимът за поддръжка е изключен",
+ "Maintenance mode is kept active" : "Режим на поддръжка се поддържа активен",
+ "Updating database schema" : "Актуализиране на схемата на базата данни",
+ "Updated database" : "Базата данни е обоновена",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Проверка дали схемата на базата данни може да се актуализира (възможно е да отнеме повече време в зависимост от големината на базата данни)",
+ "Checked database schema update" : "Обновяването на схемата на базата данни е проверено",
+ "Checking updates of apps" : "Проверка на актуализациите за добавките",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Проверка дали схемата на базата данни %s може да бъде актуализирана (това може да отнеме повече време в зависимост от големината на базата данни)",
+ "Checked database schema update for apps" : "Обновяването на схемата на базата данни за приложения е проверено",
+ "Updated \"%s\" to %s" : "Обновен \"%s\" до %s",
+ "Set log level to debug" : "Промени ниво на лог на дебъг",
+ "Reset log level" : "Възстанови ниво на лог",
+ "Starting code integrity check" : "Стартиране на проверка за цялостта на кода",
+ "Finished code integrity check" : "Приключена проверка за цялостта на кода",
+ "%s (3rdparty)" : "%s (3-ти лица)",
+ "%s (incompatible)" : "%s (несъвместим)",
+ "Following apps have been disabled: %s" : "Следната добавка беше изключена: %s",
+ "Already up to date" : "Вече е актуална",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Има проблем с проверката за цялостта на кода. Повече информация…</a>",
+ "Settings" : "Настройки",
+ "Connection to server lost" : "Връзката със сървъра е загубена",
+ "Problem loading page, reloading in 5 seconds" : "Проблем при зареждане на страницата, презареждане след 5 секунди",
+ "Saving..." : "Запазване...",
+ "Dismiss" : "Отхвърляне",
+ "This action requires you to confirm your password" : "Това действие изисква да потвърдите паролата си",
+ "Authentication required" : "Изисква удостоверяване",
+ "Password" : "Парола",
+ "Cancel" : "Отказ",
+ "Confirm" : "Потвърди",
+ "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." : "Връзката за възстановяване на паролата беше изпратена до вашия имейл. Ако не я получите в разумен период от време, проверете спам и junk папките.<br>Ако не я откривате и там, се свържете с местния администратор.",
+ "I know what I'm doing" : "Знам какво правя",
+ "Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържете се с администратора.",
+ "No" : "Не",
+ "Yes" : "Да",
+ "No files in here" : "Тук няма файлове",
+ "Choose" : "Избиране",
+ "Error loading file picker template: {error}" : "Грешка при зареждането на шаблон за избор на файл: {error}",
+ "Ok" : "Добре",
+ "Error loading message template: {error}" : "Грешка при зареждането на шаблон за съобщения: {error}",
+ "read-only" : "Само за четене",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} файлов конфликт","{count} файлови кофликта"],
+ "One file conflict" : "Един файлов конфликт",
+ "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." : "Ако изберете и двете версии, към името на копирания файл ще бъде добавено число.",
+ "Continue" : "Продължаване",
+ "(all selected)" : "(всички избрани)",
+ "({count} selected)" : "({count} избрани)",
+ "Error loading file exists template" : "Грешка при зареждането на шаблон за вече съществуващ файл",
+ "Pending" : "Чакащо",
+ "Very weak password" : "Много слаба парола",
+ "Weak password" : "Слаба парола",
+ "So-so password" : "Не особено добра парола",
+ "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>." : "Не е настроен кеш за паметта. За да повишите ефективността, моля настройте кеш за паметта ако е възможно. Допълнителна информация може да бъде намерена в нашата <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 Group</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>." : "Хедърите за обратно прокси са невалидни, или достъпвате 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>." : "Кеширането на паметта е настроено като разпределена кеш, но е инсталиран грешен PHP модул \"memcache\". \\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>)",
+ "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 файлът не функционира. Силно препоръчваме да настроите уеб сървъра по такъв начин, че директорията за данни да не бъде достъпна или я преместете извън директорията на уеб сървъра.",
+ "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." : "\"{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>." : "HTTP хедъра на \"Strict-Transport-Security\" не е конфигуриран за най-малко \"{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" : "Задаване на дата на изтичане",
+ "Expiration" : "Изтичане",
+ "Expiration date" : "Дата на изтичане",
+ "Choose a password for the public link" : "Изберете парола за общодостъпната връзка",
+ "Copied!" : "Копирано!",
+ "Copy" : "Копиране",
+ "Not supported!" : "Не се поддържа!",
+ "Press ⌘-C to copy." : "За копиране натиснете ⌘-C.",
+ "Press Ctrl-C to copy." : "За копиране натиснете Ctrl-C.",
+ "Resharing is not allowed" : "Повторно споделяне не е разрешено.",
+ "Share link" : "Връзка за споделяне",
+ "Link" : "Връзка",
+ "Password protect" : "Защитено с парола",
+ "Allow upload and editing" : "Позволи обновяване и редактиране",
+ "Allow editing" : "Позволяване на редактиране",
+ "File drop (upload only)" : "Пускане на файл (качване само)",
+ "Email link to person" : "Имейл връзка към човек",
+ "Send" : "Изпращане",
+ "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с вас и групата {group}",
+ "Shared with you by {owner}" : "Споделено с вас от {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} споделен с връзка",
+ "group" : "група",
+ "remote" : "отдалечен",
+ "email" : "имейл",
+ "Unshare" : "Прекратяване на споделяне",
+ "can reshare" : "може да споделя",
+ "can edit" : "може да променя",
+ "can create" : "може да създава",
+ "can change" : "може да ",
+ "can delete" : "може да изтрива",
+ "access control" : "контрол на достъпа",
+ "Could not unshare" : "Споделянето не е прекратено",
+ "Share details could not be loaded for this item." : "Данните за споделяне не могат да бъдат заредени",
+ "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)",
+ "Share" : "Споделяне",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Сподели с хора на други сървъри, използващи тяхните Федерални Cloud ID username@example.com/nextcloud",
+ "Share with users or by mail..." : "Споделяне с потребители или чрез имейл...",
+ "Share with users or remote users..." : "Споделяне с потребители или с отдалечени потребители...",
+ "Share with users, remote users or by mail..." : "Споделяне с потребители, отдалечени потребители или с имейл...",
+ "Share with users or groups..." : "Споделяне с потребители или групи...",
+ "Share with users, groups or by mail..." : "Споделяне с потребители, групи или чрез имейл...",
+ "Share with users, groups or remote users..." : "Споделяне с потребители, групи или отдалечени потребители...",
+ "Share with users, groups, remote users or by 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}" : "Грешка при зареждането на шаблон за диалог: {error}.",
+ "No tags selected for deletion." : "Не са избрани тагове за изтриване.",
+ "unknown text" : "непознат текст",
+ "Hello world!" : "Здравей Свят!",
+ "sunny" : "слънчево",
+ "Hello {name}, the weather is {weather}" : "Здравей {name}, времето е {weather}",
+ "Hello {name}" : "Здравейте, {name}",
+ "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." : "Моля, презаредете страницата.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Актуализацията беше неуспешна. За повече информация <a href=\"{url}\">погледнете нашият пост</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 now." : "Обновяването беше успешно. Сега те пренасочваме към Nextcloud.",
+ "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" : "Админ",
+ "Help" : "Помощ",
+ "Access forbidden" : "Достъпът е забранен",
+ "File not found" : "Файлът не е открит",
+ "The specified document has not been found on the server." : "Избраният документ не е намерен на сървъра.",
+ "You can click here to return to %s." : "Можете да натиснете тук, за да се върнете на %s.",
+ "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!" : "Поздрави!",
+ "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." : "Моля, свържете се със сървърния администратор, ако тази грешка се появи отново. Също така Ви Молим да включите техническите данни, показани в доклада по-долу.",
+ "More details can be found in the server log." : "Повече детайли могат да бъдат намерени в сървърния журнал.",
+ "Technical details" : "Технически детайли",
+ "Remote Address: %s" : "Отдалечен адрес: %s",
+ "Request ID: %s" : "ID на заявка: %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." : "Вашата директория за данни и файлове Ви вероятно са достъпни от интернет, поради това, че файлът \".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" : "Хранилища и бази данни",
+ "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 password" : "Парола за базата данни",
+ "Database name" : "Име на базата данни",
+ "Database tablespace" : "Tablespace на базата данни",
+ "Database host" : "Хост за базата данни",
+ "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" : "Завършване на настройките",
+ "Finishing …" : "Завършване...",
+ "Need help?" : "Нуждаете се от помощ?",
+ "See the documentation" : "Прегледайте документацията",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "За да функционира приложението изисква JavaScript. Моля, {linkstart}включете JavaScript{linkend} и презаредете страницата.",
+ "Search" : "Търсене",
+ "Log out" : "Отписване",
+ "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." : "Опитайте отново или се свържете с администраотра.",
+ "Username or email" : "Потребител или имейл",
+ "Wrong password. Reset it?" : "Грешна парола. Желаете ли нова парола?",
+ "Wrong password." : "Грешна парола",
+ "Log in" : "Вписване",
+ "Stay logged in" : "Остани вписан",
+ "Alternative Logins" : "Алтернативни методи на вписване",
+ "Use the following link to reset your password: {link}" : "Използвайте следната връзка, за да възстановите паролата си: {link}",
+ "New password" : "Нова парола",
+ "New Password" : "Нова парола",
+ "Reset password" : "Възстановяване на паролата",
+ "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>.",
+ "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." : "Благодарим за търпението.",
+ "Two-factor authentication" : "Двуфакторно удостоверяване",
+ "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_domains\" настройките в 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\" като сигурен домейн",
+ "App update required" : "Изисква се обновяване на добавката",
+ "%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." : "Моля, уверете се, че сте направили копия на базата данни, папките с настройки и данните, преди да продължите.",
+ "Start update" : "Начало на обновяването",
+ "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 page will refresh itself when the %s instance is available again." : "Страницата ще се зареди автоматично, когато %s е отново на линия.",
+ "Error loading tags" : "Грешка при зареждане на етикети",
+ "Tag already exists" : "Етикетът вече съществува",
+ "Error deleting tag(s)" : "Грешка при изтриване на етикет(и)",
+ "Error tagging" : "Грешка при задаване на етикета",
+ "Error untagging" : "Грешка при премахване на етикета",
+ "Error favoriting" : "Грешка при добавяне в любими",
+ "Error unfavoriting" : "Грешка при премахване от любими",
+ "Couldn't send mail to following users: %s " : "Изпращането на имейл до следните потребители не е възможно: %s",
+ "Sunday" : "неделя",
+ "Monday" : "понеделник",
+ "Tuesday" : "вторник",
+ "Wednesday" : "сряда",
+ "Thursday" : "четвъртък",
+ "Friday" : "петък",
+ "Saturday" : "събота",
+ "Sun." : "нед",
+ "Mon." : "пон",
+ "Tue." : "вт",
+ "Wed." : "ср",
+ "Thu." : "чет",
+ "Fri." : "пет",
+ "Sat." : "съб",
+ "Su" : "нд",
+ "Mo" : "пн",
+ "Tu" : "вт",
+ "We" : "ср",
+ "Th" : "чт",
+ "Fr" : "пт",
+ "Sa" : "сб",
+ "January" : "януари",
+ "February" : "февруару",
+ "March" : "март",
+ "April" : "април",
+ "May" : "май",
+ "June" : "юни",
+ "July" : "юли",
+ "August" : "август",
+ "September" : "септември",
+ "October" : "октомври",
+ "November" : "ноември",
+ "December" : "декември",
+ "Jan." : "яну",
+ "Feb." : "фев",
+ "Mar." : "мар",
+ "Apr." : "апр",
+ "May." : "май",
+ "Jun." : "юни",
+ "Jul." : "юли",
+ "Aug." : "авг",
+ "Sep." : "сеп",
+ "Oct." : "окт",
+ "Nov." : "ное",
+ "Dec." : "дек",
+ "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/>Наистина ли желаете да продължите?",
+ "This server has no working Internet connection. 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." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Хедърите за обратно прокси са невалидни, или достъпвате Nextcloud от доверено прокси. Ако не достъпвате Nextcloud от доверено прокси, то това е проблем в сигурността и може да позволи на хакер да прикрие IP адреса си в Nextcloud. Допълнителна информация може да бъде намерена в нашата <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документация</a>.",
+ "Hide file listing" : "Скрий показването на файлове",
+ "Sending ..." : "Изпращане ...",
+ "Email sent" : "Имейла е изпратен",
+ "Send link via email" : "Сподели връзка с имейл",
+ "notify by email" : "уведомяване по електронна поща",
+ "can share" : "може да споделя",
+ "create" : "създаване",
+ "change" : "промяна",
+ "delete" : "изтриване",
+ "{sharee} (at {server})" : "{sharee} (в {server})",
+ "Share with users…" : "Споделяне с потребители...",
+ "Share with users, groups or remote users…" : "Споделяне с потребители, групи и отдалечени потребители...",
+ "Share with users or groups…" : "Споделяне с потребители или групи...",
+ "Share with users or remote users…" : "Споделяне с потребители или с отдалечени потребители...",
+ "Warning" : "Предупреждение",
+ "Error while sending notification" : "Грешка при изпращане на уведомление",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Актуализирането е в процес, в някой среди - напускането на тази страница може да прекъсне процеса.",
+ "Updating to {version}" : "Обновяване до {version}",
+ "The update was successful. There were warnings." : "Обновяването мина успешно. Има предупреждения.",
+ "No search results in other folders" : "Няма търсени резултати в други папки",
+ "Two-step verification" : "Потвърждаване в две стъпки",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Повишената сигурност е активирана за профила ви. Моля удостоверете използвайки втори фактор.",
+ "Cancel login" : "Откажи вписване",
+ "Please authenticate using the selected factor." : "Моля удостоверете използвайки вторият фактор.",
+ "An error occured while verifying the token" : "Възникна грешка при проверка на токена"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js
index b96bd2116a0..3c590e6f727 100644
--- a/core/l10n/cs_CZ.js
+++ b/core/l10n/cs_CZ.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "před pár sekundami",
"Logging in …" : "Přihlašování …",
"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." : "Odkaz na obnovení hesla byl odeslán na vaši emailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte nevyžádanou poštu a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.",
- "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?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
+ "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?" : "Vaše soubory jsou šifrovány. Po vyresetování vašeho hesla nebudete moc získat data zpět.<br/>Pokud si nejste jisti tím co děláte, předtím než budete pokračovat, kontaktujte vašeho administrátora.<br/>Opravdu chcete pokračovat?",
"I know what I'm doing" : "Vím co dělám",
"Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.",
"No" : "Ne",
@@ -122,6 +122,8 @@ OC.L10N.register(
"Link" : "Odkaz",
"Password protect" : "Chránit heslem",
"Allow upload and editing" : "Povolit nahrávání a úpravy",
+ "Allow editing" : "Povolit úpravy",
+ "File drop (upload only)" : "Přetažení souboru (pouze nahrání)",
"Email link to person" : "Odeslat osobě odkaz emailem",
"Send" : "Odeslat",
"Shared with you and the group {group} by {owner}" : "S Vámi a skupinou {group} sdílí {owner}",
@@ -229,6 +231,7 @@ OC.L10N.register(
"Database name" : "Název databáze",
"Database tablespace" : "Tabulkový prostor databáze",
"Database host" : "Hostitel databáze",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Prosím, specifikujte port spolu se jménem hostitele (t. j., localhost:5432).",
"Performance warning" : "Varování o výkonu",
"SQLite will be used as database." : "Bude použita SQLite databáze.",
"For larger installations we recommend to choose a different database backend." : "Pro větší instalace doporučujeme vybrat jiné databázové řešení.",
@@ -238,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Potřebujete pomoc?",
"See the documentation" : "Shlédnout dokumentaci",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím {linkstart}povolte JavaScript{linkend} a znovu načtěte stránku.",
- "Log out" : "Odhlásit se",
"Search" : "Hledat",
+ "Log out" : "Odhlásit se",
"This action requires you to confirm your password:" : "Tato akce vyžaduje potvrzení vašeho hesla:",
"Confirm your password" : "Potvrdit heslo",
"Server side authentication failed!" : "Autentizace na serveru selhala!",
@@ -337,9 +340,9 @@ OC.L10N.register(
"Oct." : "íjen",
"Nov." : "listopad",
"Dec." : "prosinec",
+ "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?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"This server has no working Internet connection. 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." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na ownCloud z důvěryhodné proxy. Pokud nepřistupujete k ownCloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</a>.",
- "Allow editing" : "Povolit úpravy",
"Hide file listing" : "Skrýt seznam souborů",
"Sending ..." : "Odesílám ...",
"Email sent" : "Email odeslán",
@@ -364,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Bylo zapnuto vylepšené zabezpečení pro tento účet. Přihlašte se za použití druhého faktoru.",
"Cancel login" : "Zrušit přihlášení",
"Please authenticate using the selected factor." : "Přihlašte se za použití vybraného faktoru.",
- "An error occured while verifying the token" : "Chyba při ověřování tokenu",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Tento webový server není správně nastaven pro rozpoznání \"{url}\". Více informací lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Nebyla nakonfigurována paměťová cache. Pokud je dostupná, nakonfigurujte ji prosím pro zlepšení výkonu. Další informace lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</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\" href=\"{docLink}\">documentation</a>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Aktuálně používáte PHP {version}. Doporučujeme aktualizovat verzi PHP, abyste mohli využít <a target=\"_blank\" href=\"{phpLink}\">výkonnostních a bezpečnostních aktualizací poskytovaných autory PHP</a> tak rychle, jak to vaše distribuce umožňuje.",
- "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\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na Nextcloud z důvěryhodné proxy. Pokud nepřistupujete k Nextcloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Je nakonfigurován memcached jako distribuovaná cache, ale je nainstalovaný nesprávný PHP modul \"memcache\". \\OC\\Memcache\\Memcached podporuje pouze \"memcached\" a ne \"memcache\". Podívejte se na <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki o obou modulech</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Některé soubory neprošly kontrolou integrity. Více informací o tom jak tento problém vyřešit, lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Seznam neplatných souborů…</a> / <a href=\"{rescanEndpoint}\">Znovu ověřit…</a>)",
- "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}\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.",
- "An error occured. Please try again" : "Došlo k chybě. Zkuste to prosím znovu",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Sdílejte s lidmi na ownClouds použitím syntaxe username@example.com/owncloud",
- "not assignable" : "nepřiřaditelné",
- "Updating {productName} to version {version}, this may take a while." : "Aktualizace {productName} na verzi {version}, to chvíli potrvá.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.",
- "An internal error occured." : "Nastala vnitřní chyba."
+ "An error occured while verifying the token" : "Chyba při ověřování tokenu"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json
index 20f86d4de2d..ef9261ac7b9 100644
--- a/core/l10n/cs_CZ.json
+++ b/core/l10n/cs_CZ.json
@@ -58,7 +58,7 @@
"seconds ago" : "před pár sekundami",
"Logging in …" : "Přihlašování …",
"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." : "Odkaz na obnovení hesla byl odeslán na vaši emailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte nevyžádanou poštu a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.",
- "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?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
+ "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?" : "Vaše soubory jsou šifrovány. Po vyresetování vašeho hesla nebudete moc získat data zpět.<br/>Pokud si nejste jisti tím co děláte, předtím než budete pokračovat, kontaktujte vašeho administrátora.<br/>Opravdu chcete pokračovat?",
"I know what I'm doing" : "Vím co dělám",
"Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.",
"No" : "Ne",
@@ -120,6 +120,8 @@
"Link" : "Odkaz",
"Password protect" : "Chránit heslem",
"Allow upload and editing" : "Povolit nahrávání a úpravy",
+ "Allow editing" : "Povolit úpravy",
+ "File drop (upload only)" : "Přetažení souboru (pouze nahrání)",
"Email link to person" : "Odeslat osobě odkaz emailem",
"Send" : "Odeslat",
"Shared with you and the group {group} by {owner}" : "S Vámi a skupinou {group} sdílí {owner}",
@@ -227,6 +229,7 @@
"Database name" : "Název databáze",
"Database tablespace" : "Tabulkový prostor databáze",
"Database host" : "Hostitel databáze",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Prosím, specifikujte port spolu se jménem hostitele (t. j., localhost:5432).",
"Performance warning" : "Varování o výkonu",
"SQLite will be used as database." : "Bude použita SQLite databáze.",
"For larger installations we recommend to choose a different database backend." : "Pro větší instalace doporučujeme vybrat jiné databázové řešení.",
@@ -236,8 +239,8 @@
"Need help?" : "Potřebujete pomoc?",
"See the documentation" : "Shlédnout dokumentaci",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím {linkstart}povolte JavaScript{linkend} a znovu načtěte stránku.",
- "Log out" : "Odhlásit se",
"Search" : "Hledat",
+ "Log out" : "Odhlásit se",
"This action requires you to confirm your password:" : "Tato akce vyžaduje potvrzení vašeho hesla:",
"Confirm your password" : "Potvrdit heslo",
"Server side authentication failed!" : "Autentizace na serveru selhala!",
@@ -335,9 +338,9 @@
"Oct." : "íjen",
"Nov." : "listopad",
"Dec." : "prosinec",
+ "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?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"This server has no working Internet connection. 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." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na ownCloud z důvěryhodné proxy. Pokud nepřistupujete k ownCloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</a>.",
- "Allow editing" : "Povolit úpravy",
"Hide file listing" : "Skrýt seznam souborů",
"Sending ..." : "Odesílám ...",
"Email sent" : "Email odeslán",
@@ -362,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Bylo zapnuto vylepšené zabezpečení pro tento účet. Přihlašte se za použití druhého faktoru.",
"Cancel login" : "Zrušit přihlášení",
"Please authenticate using the selected factor." : "Přihlašte se za použití vybraného faktoru.",
- "An error occured while verifying the token" : "Chyba při ověřování tokenu",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Tento webový server není správně nastaven pro rozpoznání \"{url}\". Více informací lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Nebyla nakonfigurována paměťová cache. Pokud je dostupná, nakonfigurujte ji prosím pro zlepšení výkonu. Další informace lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</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\" href=\"{docLink}\">documentation</a>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Aktuálně používáte PHP {version}. Doporučujeme aktualizovat verzi PHP, abyste mohli využít <a target=\"_blank\" href=\"{phpLink}\">výkonnostních a bezpečnostních aktualizací poskytovaných autory PHP</a> tak rychle, jak to vaše distribuce umožňuje.",
- "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\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na Nextcloud z důvěryhodné proxy. Pokud nepřistupujete k Nextcloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Je nakonfigurován memcached jako distribuovaná cache, ale je nainstalovaný nesprávný PHP modul \"memcache\". \\OC\\Memcache\\Memcached podporuje pouze \"memcached\" a ne \"memcache\". Podívejte se na <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki o obou modulech</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Některé soubory neprošly kontrolou integrity. Více informací o tom jak tento problém vyřešit, lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Seznam neplatných souborů…</a> / <a href=\"{rescanEndpoint}\">Znovu ověřit…</a>)",
- "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}\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.",
- "An error occured. Please try again" : "Došlo k chybě. Zkuste to prosím znovu",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Sdílejte s lidmi na ownClouds použitím syntaxe username@example.com/owncloud",
- "not assignable" : "nepřiřaditelné",
- "Updating {productName} to version {version}, this may take a while." : "Aktualizace {productName} na verzi {version}, to chvíli potrvá.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.",
- "An internal error occured." : "Nastala vnitřní chyba."
+ "An error occured while verifying the token" : "Chyba při ověřování tokenu"
},"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 a29f3d00a3d..16740e8fc55 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -50,7 +50,6 @@ OC.L10N.register(
"Cancel" : "Annuller",
"seconds ago" : "sekunder siden",
"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." : "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.",
- "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?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"I know what I'm doing" : "Jeg ved, hvad jeg har gang i",
"Password can not be changed. Please contact your administrator." : "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.",
"No" : "Nej",
@@ -101,6 +100,7 @@ OC.L10N.register(
"Share link" : "Del link",
"Link" : "Link",
"Password protect" : "Beskyt med adgangskode",
+ "Allow editing" : "Tillad redigering",
"Email link to person" : "E-mail link til person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Delt med dig og gruppen {group} af {owner}",
@@ -192,8 +192,8 @@ OC.L10N.register(
"Need help?" : "Brug for hjælp?",
"See the documentation" : "Se dokumentationen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ",
- "Log out" : "Log ud",
"Search" : "Søg",
+ "Log out" : "Log ud",
"Server side authentication failed!" : "Server side godkendelse mislykkedes!",
"Please contact your administrator." : "Kontakt venligst din administrator",
"An internal error occurred." : "Der opstod en intern fejl.",
@@ -279,8 +279,8 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
+ "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?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurationen af reverse proxy-headere er ikke korrekt eller du tilgår ownCloud fra en betroet proxy. Hvis du ikke tilgår ownCloud fra en betroet proxy, så er dette et sikkerhedsproblem og kan tillade en angriber af forfalske deres IP-adresse som synlig for ownCloud. Yderligere information kan findes i vores <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
- "Allow editing" : "Tillad redigering",
"Sending ..." : "Sender ...",
"Email sent" : "E-mail afsendt",
"Send link via email" : "Send link via e-mail",
@@ -296,7 +296,6 @@ OC.L10N.register(
"Warning" : "Advarsel",
"Error while sending notification" : "Fejl ved afsendelse af notifikation",
"No search results in other folders" : "Søgning gav ingen resultater in andre mapper",
- "Cancel login" : "Annuller login",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med andre på ownCloud ved hjælp af syntaxen username@example.com/owncloud"
+ "Cancel login" : "Annuller login"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/da.json b/core/l10n/da.json
index 253b1966cd0..b479be4e426 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -48,7 +48,6 @@
"Cancel" : "Annuller",
"seconds ago" : "sekunder siden",
"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." : "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.",
- "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?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"I know what I'm doing" : "Jeg ved, hvad jeg har gang i",
"Password can not be changed. Please contact your administrator." : "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.",
"No" : "Nej",
@@ -99,6 +98,7 @@
"Share link" : "Del link",
"Link" : "Link",
"Password protect" : "Beskyt med adgangskode",
+ "Allow editing" : "Tillad redigering",
"Email link to person" : "E-mail link til person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Delt med dig og gruppen {group} af {owner}",
@@ -190,8 +190,8 @@
"Need help?" : "Brug for hjælp?",
"See the documentation" : "Se dokumentationen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ",
- "Log out" : "Log ud",
"Search" : "Søg",
+ "Log out" : "Log ud",
"Server side authentication failed!" : "Server side godkendelse mislykkedes!",
"Please contact your administrator." : "Kontakt venligst din administrator",
"An internal error occurred." : "Der opstod en intern fejl.",
@@ -277,8 +277,8 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
+ "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?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurationen af reverse proxy-headere er ikke korrekt eller du tilgår ownCloud fra en betroet proxy. Hvis du ikke tilgår ownCloud fra en betroet proxy, så er dette et sikkerhedsproblem og kan tillade en angriber af forfalske deres IP-adresse som synlig for ownCloud. Yderligere information kan findes i vores <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
- "Allow editing" : "Tillad redigering",
"Sending ..." : "Sender ...",
"Email sent" : "E-mail afsendt",
"Send link via email" : "Send link via e-mail",
@@ -294,7 +294,6 @@
"Warning" : "Advarsel",
"Error while sending notification" : "Fejl ved afsendelse af notifikation",
"No search results in other folders" : "Søgning gav ingen resultater in andre mapper",
- "Cancel login" : "Annuller login",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med andre på ownCloud ved hjælp af syntaxen username@example.com/owncloud"
+ "Cancel login" : "Annuller login"
},"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 f16de9940aa..3ac9e1ab061 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"core",
{
- "Please select a file." : "Bitte wähle eine Datei aus.",
+ "Please select a file." : "Bitte eine Datei wählen.",
"File is too big" : "Datei ist zu groß",
"The selected file is not an image." : "Die ausgewählte Datei ist kein Bild.",
"The selected file cannot be read." : "Die ausgewählte Datei konnte nicht gelesen werden.",
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "Gerade eben",
"Logging in …" : "Melde an ...",
"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." : "Der Link zum Rücksetzen deines Passwortes ist an deine E-Mail-Adresse versandt worden. Solltest du in Kürze keine entsprechende E-Mail erhalten, überprüfe bitte deinen Spam-Ordner.<br>Ansonsten kannst du dich bei deinem lokalen Administrator melden.",
- "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?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?",
+ "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?" : "Deine Dateien sind verschlüsselt. Es gibt keinen Weg Deine Dateien nach dem Rücksetzen des Passwortes wiederherzustellen.<br />Falls Du Dir nicht sicher bist, kontaktiere Deinen Administrator.<br />Möchtest Du wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktiere deinen Administrator.",
"No" : "Nein",
@@ -87,7 +87,7 @@ OC.L10N.register(
"So-so password" : "Passables Passwort",
"Good password" : "Gutes Passwort",
"Strong password" : "Starkes Passwort",
- "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, da die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
"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>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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." : "Dieser Server hat keine funktionierende Internetverbindung: Mehrere Ziele konnten nicht erreicht werden. Dies bedeutet, dass einige Funktionen, wie das Einhängen exernen Speichers, Benachrichtigungen über Updates oder die Installation von Drittanbieter-Apps nicht funktionieren. \nDer Zugriff auf entfernte Dateien und das Senden von E-Mail-Benachrichtigungen wird wahrscheinlich ebenfalls nicht funktionieren.\nEs wird empfohlen, die Internet-Verbindung für diesen Server zu aktivieren, wenn Du alle Funktionen nutzen möchtest.",
"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>." : "Es wurde kein PHP Memory Cache konfiguriert. Zur Erhöhung der Leistungsfähigkeit kann ein Memory-Cache konfiguriert werden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Link",
"Password protect" : "Passwortschutz",
"Allow upload and editing" : "Hochladen und Bearbeiten erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"File drop (upload only)" : "Dateien ablegen (nur Hochladen)",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
@@ -139,7 +140,7 @@ OC.L10N.register(
"can delete" : "kann löschen",
"access control" : "Zugriffskontrolle",
"Could not unshare" : "Freigabe konnte nicht entfernt werden",
- "Share details could not be loaded for this item." : "Details der geteilten Freigabe konnten nicht geladen werden zu diesem Eintrag.",
+ "Share details could not be loaded for this item." : "Details der geteilten Freigabe zu diesem Eintrag konnten nicht geladen werden.",
"No users or groups found for {search}" : "Keine Benutzer oder Gruppen gefunden für {search}",
"No users found for {search}" : "Kein Benutzer gefunden für {search}",
"An error occurred. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal",
@@ -230,6 +231,7 @@ OC.L10N.register(
"Database name" : "Datenbank-Name",
"Database tablespace" : "Datenbank-Tablespace",
"Database host" : "Datenbank-Host",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Bitte die Portnummer mit der Hostadresse zusammen angeben (z.B. localhost:5432)",
"Performance warning" : "Leistungswarnung",
"SQLite will be used as database." : "SQLite wird als Datenbank benutzt.",
"For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.",
@@ -239,14 +241,14 @@ OC.L10N.register(
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schau in die Dokumentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte aktiviere {linkstart}JavaScript{linkend} und lade die Seite neu.",
- "Log out" : "Abmelden",
"Search" : "Suche",
+ "Log out" : "Abmelden",
"This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von dir:",
"Confirm your password" : "Bestätige dein Passwort",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
- "Please contact your administrator." : "Bitte kontaktiere deinen Administrator.",
+ "Please contact your administrator." : "Bitte kontaktiere den Administrator.",
"An internal error occurred." : "Es ist ein interner Fehler aufgetreten.",
- "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere deinen Administrator.",
+ "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere den Administrator.",
"Username or email" : "Benutzername oder E-Mail",
"Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?",
"Wrong password." : "Falsches Passwort.",
@@ -260,7 +262,7 @@ OC.L10N.register(
"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>",
"This Nextcloud instance is currently in single user mode." : "Diese Nextcloud-Instanz befindet sich derzeit im Einzelbenutzermodus.",
"This means only administrators can use the instance." : "Dies bedeutet, dass diese Instanz nur von Administratoren genutzt werden kann.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktiere deinen Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktiere den Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.",
"Thank you for your patience." : "Vielen Dank für deine Geduld.",
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für dein Konto aktiviert. Bitte authentifiziere dich mit einem zweiten Faktor. ",
@@ -338,9 +340,9 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dez.",
+ "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?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?",
"This server has no working Internet connection. 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." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder du greifst auf Nextcloud über einen vertrauenswürdigen Proxy zu. Wenn du nicht über einen vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das es einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
- "Allow editing" : "Bearbeitung erlauben",
"Hide file listing" : "Dateiliste verbergen",
"Sending ..." : "Senden…",
"Email sent" : "E-Mail wurde verschickt",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für dein Konto aktiviert. Bitte authentifiziere dich mit der zweiten Stufe.",
"Cancel login" : "Anmelden abbrechen",
"Please authenticate using the selected factor." : "Bitte authentifiziere dich mit dem ausgewählten zweiten Faktor. ",
- "An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen: \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du verwendest derzeit PHP {version}. Wir empfehlen ein Upgrade deiner PHP-Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP-Gruppe bereitgestellt werden</a>, sobald deine Distribution diese unterstützt.",
- "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\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder du greifst auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn du auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Einige Dateien haben die Integritätsprüfung nicht bestanden. Weiterführende Information zum Lösen des Problems findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien ...</a> / <a href=\"{rescanEndpoint}\">Erneut analysieren…</a>)",
- "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}\">security tips</a>." : "Der \"Strict-Transport-Security\" HTTP-Header ist nicht auf mindestens \"{seconds}\" Sekunden eingestellt. Um die Sicherheit zu erhöhen, empfehlen wir das Aktivieren von HSTS, wie es in den <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.",
- "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Teile es mit Nutzern auf anderen Nextclouds. Die Syntax hierfür lautet: username@example.com/nextcloud",
- "not assignable" : "nicht zuweisbar",
- "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}, dies kann eine Weile dauern.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren deines Servers kannst du der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.",
- "An internal error occured." : "Es ist ein interner Fehler aufgetreten."
+ "An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 027b10bda5f..be81fc7f0a2 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Please select a file." : "Bitte wähle eine Datei aus.",
+ "Please select a file." : "Bitte eine Datei wählen.",
"File is too big" : "Datei ist zu groß",
"The selected file is not an image." : "Die ausgewählte Datei ist kein Bild.",
"The selected file cannot be read." : "Die ausgewählte Datei konnte nicht gelesen werden.",
@@ -58,7 +58,7 @@
"seconds ago" : "Gerade eben",
"Logging in …" : "Melde an ...",
"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." : "Der Link zum Rücksetzen deines Passwortes ist an deine E-Mail-Adresse versandt worden. Solltest du in Kürze keine entsprechende E-Mail erhalten, überprüfe bitte deinen Spam-Ordner.<br>Ansonsten kannst du dich bei deinem lokalen Administrator melden.",
- "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?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?",
+ "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?" : "Deine Dateien sind verschlüsselt. Es gibt keinen Weg Deine Dateien nach dem Rücksetzen des Passwortes wiederherzustellen.<br />Falls Du Dir nicht sicher bist, kontaktiere Deinen Administrator.<br />Möchtest Du wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktiere deinen Administrator.",
"No" : "Nein",
@@ -85,7 +85,7 @@
"So-so password" : "Passables Passwort",
"Good password" : "Gutes Passwort",
"Strong password" : "Starkes Passwort",
- "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, da die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
"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>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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." : "Dieser Server hat keine funktionierende Internetverbindung: Mehrere Ziele konnten nicht erreicht werden. Dies bedeutet, dass einige Funktionen, wie das Einhängen exernen Speichers, Benachrichtigungen über Updates oder die Installation von Drittanbieter-Apps nicht funktionieren. \nDer Zugriff auf entfernte Dateien und das Senden von E-Mail-Benachrichtigungen wird wahrscheinlich ebenfalls nicht funktionieren.\nEs wird empfohlen, die Internet-Verbindung für diesen Server zu aktivieren, wenn Du alle Funktionen nutzen möchtest.",
"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>." : "Es wurde kein PHP Memory Cache konfiguriert. Zur Erhöhung der Leistungsfähigkeit kann ein Memory-Cache konfiguriert werden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
@@ -120,6 +120,7 @@
"Link" : "Link",
"Password protect" : "Passwortschutz",
"Allow upload and editing" : "Hochladen und Bearbeiten erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"File drop (upload only)" : "Dateien ablegen (nur Hochladen)",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
@@ -137,7 +138,7 @@
"can delete" : "kann löschen",
"access control" : "Zugriffskontrolle",
"Could not unshare" : "Freigabe konnte nicht entfernt werden",
- "Share details could not be loaded for this item." : "Details der geteilten Freigabe konnten nicht geladen werden zu diesem Eintrag.",
+ "Share details could not be loaded for this item." : "Details der geteilten Freigabe zu diesem Eintrag konnten nicht geladen werden.",
"No users or groups found for {search}" : "Keine Benutzer oder Gruppen gefunden für {search}",
"No users found for {search}" : "Kein Benutzer gefunden für {search}",
"An error occurred. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal",
@@ -228,6 +229,7 @@
"Database name" : "Datenbank-Name",
"Database tablespace" : "Datenbank-Tablespace",
"Database host" : "Datenbank-Host",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Bitte die Portnummer mit der Hostadresse zusammen angeben (z.B. localhost:5432)",
"Performance warning" : "Leistungswarnung",
"SQLite will be used as database." : "SQLite wird als Datenbank benutzt.",
"For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.",
@@ -237,14 +239,14 @@
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schau in die Dokumentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte aktiviere {linkstart}JavaScript{linkend} und lade die Seite neu.",
- "Log out" : "Abmelden",
"Search" : "Suche",
+ "Log out" : "Abmelden",
"This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von dir:",
"Confirm your password" : "Bestätige dein Passwort",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
- "Please contact your administrator." : "Bitte kontaktiere deinen Administrator.",
+ "Please contact your administrator." : "Bitte kontaktiere den Administrator.",
"An internal error occurred." : "Es ist ein interner Fehler aufgetreten.",
- "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere deinen Administrator.",
+ "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere den Administrator.",
"Username or email" : "Benutzername oder E-Mail",
"Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?",
"Wrong password." : "Falsches Passwort.",
@@ -258,7 +260,7 @@
"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>",
"This Nextcloud instance is currently in single user mode." : "Diese Nextcloud-Instanz befindet sich derzeit im Einzelbenutzermodus.",
"This means only administrators can use the instance." : "Dies bedeutet, dass diese Instanz nur von Administratoren genutzt werden kann.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktiere deinen Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktiere den Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.",
"Thank you for your patience." : "Vielen Dank für deine Geduld.",
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für dein Konto aktiviert. Bitte authentifiziere dich mit einem zweiten Faktor. ",
@@ -336,9 +338,9 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dez.",
+ "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?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?",
"This server has no working Internet connection. 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." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder du greifst auf Nextcloud über einen vertrauenswürdigen Proxy zu. Wenn du nicht über einen vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das es einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
- "Allow editing" : "Bearbeitung erlauben",
"Hide file listing" : "Dateiliste verbergen",
"Sending ..." : "Senden…",
"Email sent" : "E-Mail wurde verschickt",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für dein Konto aktiviert. Bitte authentifiziere dich mit der zweiten Stufe.",
"Cancel login" : "Anmelden abbrechen",
"Please authenticate using the selected factor." : "Bitte authentifiziere dich mit dem ausgewählten zweiten Faktor. ",
- "An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen: \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du verwendest derzeit PHP {version}. Wir empfehlen ein Upgrade deiner PHP-Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP-Gruppe bereitgestellt werden</a>, sobald deine Distribution diese unterstützt.",
- "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\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder du greifst auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn du auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Einige Dateien haben die Integritätsprüfung nicht bestanden. Weiterführende Information zum Lösen des Problems findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien ...</a> / <a href=\"{rescanEndpoint}\">Erneut analysieren…</a>)",
- "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}\">security tips</a>." : "Der \"Strict-Transport-Security\" HTTP-Header ist nicht auf mindestens \"{seconds}\" Sekunden eingestellt. Um die Sicherheit zu erhöhen, empfehlen wir das Aktivieren von HSTS, wie es in den <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.",
- "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Teile es mit Nutzern auf anderen Nextclouds. Die Syntax hierfür lautet: username@example.com/nextcloud",
- "not assignable" : "nicht zuweisbar",
- "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}, dies kann eine Weile dauern.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren deines Servers kannst du der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.",
- "An internal error occured." : "Es ist ein interner Fehler aufgetreten."
+ "An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten"
},"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 b54de30fbac..626653e7d63 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "Gerade eben",
"Logging in …" : "Melde an ...",
"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." : "Der Link zum Rücksetzen Ihres Passworts ist an Ihre E-Mail-Adresse versandt worden. Sollten Sie ihn nicht in Kürze erhalten, prüfen Sie bitte Ihren Spam-Ordner.<br>Wenn die E-Mail sich nicht darin befindet, wenden Sie sich bette an Ihrem lokalen Administrator.",
- "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?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
+ "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?" : "Ihre Dateien sind verschlüsselt. Es gibt keinen Weg Ihre Dateien nach dem Rücksetzen des Passwortes wiederherzustellen.<br />Falls Sie sich nicht sicher sind, kontaktieren Sie Ihren Administrator.<br />Möchten Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"No" : "Nein",
@@ -95,7 +95,7 @@ OC.L10N.register(
"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." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.",
"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>." : "Die Reverse-Proxy-Header-Konfiguration ist fehlerhaft oder Sie greifen auf Nextcloud über einen vertrauenswürdigen Proxy zu. Wenn Sie auf Nextcloud nicht über einen vertrauenswürdigen Proxy zugreifen, dann besteht ein Sicherheitsproblem, das einem Angreifer erlaubt die IP-Adresse, die für Nextcloud sichtbar ist, auszuspähen. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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>." : "Memcache ist als verteilter Cache konfiguriert, aber das falsche PHP Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" und nicht \"memcache\". Siehe <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached Wiki über beide Module</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>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu behen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</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>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu beheben finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</a>)",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"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." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.",
"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." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Link",
"Password protect" : "Passwortschutz",
"Allow upload and editing" : "Hochladen und Bearbeiten erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"File drop (upload only)" : "Dateien ablegen (nur Hochladen)",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
@@ -224,12 +225,13 @@ OC.L10N.register(
"Configure the database" : "Datenbank einrichten",
"Only %s is available." : "Es ist nur %s verfügbar.",
"Install and activate additional PHP modules to choose other database types." : "Installieren und aktivieren Sie zusätzliche PHP-Module, um andere Datenbank-Typen auswählen zu können.",
- "For more details check out the documentation." : "Schauen Sie für weitere Informationen in die Dokumentation.",
+ "For more details check out the documentation." : "Weitere Informationen finden Sie in der Dokumentation.",
"Database user" : "Datenbank-Benutzer",
"Database password" : "Datenbank-Passwort",
"Database name" : "Datenbank-Name",
"Database tablespace" : "Datenbank-Tablespace",
"Database host" : "Datenbank-Host",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Bitte die Portnummer mit der Hostadresse zusammen angeben (z.B. localhost:5432)",
"Performance warning" : "Leistungswarnung",
"SQLite will be used as database." : "SQLite wird als Datenbank benutzt.",
"For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schauen Sie in die Dokumentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktivieren Sie JavaScript{linkend} und laden Sie die Seite neu.",
- "Log out" : "Abmelden",
"Search" : "Suche",
+ "Log out" : "Abmelden",
"This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von Ihnen:",
"Confirm your password" : "Bestätigen Sie Ihr Passwort",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
@@ -264,7 +266,7 @@ OC.L10N.register(
"Thank you for your patience." : "Vielen Dank für Ihre Geduld.",
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für Ihr Konto aktiviert. Bitte authentifizieren Sie sich mit einem zweiten Faktor. ",
- "Cancel log in" : "Anmelden abbrechen",
+ "Cancel log in" : "Anmeldung abbrechen",
"Use backup code" : "Backup-Code benutzen",
"Error while validating your second factor" : "Fehler beim Bestätigen des zweiten Sicherheitsfaktors",
"You are accessing the server from an untrusted domain." : "Sie greifen von einer nicht vertrauenswürdigen Domain auf den Server zu.",
@@ -338,9 +340,9 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dez.",
+ "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?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"This server has no working Internet connection. 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." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fäschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
- "Allow editing" : "Bearbeitung erlauben",
"Hide file listing" : "Dateiliste verbergen",
"Sending ..." : "Senden…",
"Email sent" : "E-Mail gesendet",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für Ihr Konto aktiviert. Bitte authentifizieren Sie sich mit einem zweiten Faktor. ",
"Cancel login" : "Anmelden abbrechen",
"Please authenticate using the selected factor." : "Bitte authentifizieren Sie sich mit dem ausgewählten zweiten Faktor. ",
- "An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Ihr Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" href=\"[docLink}\">Dokumentation</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfigurieren Sie zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.",
- "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\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu behen finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</a>)",
- "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}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\" >Sicherheitshinweisen</a> erläutert ist.",
- "An error occured. Please try again" : "Fehler aufgetreten. Bitte erneut versuchen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Teilen Sie es mit Nutzern in anderen Nextclouds. Die Syntax hierfür lautet: username@beispiel.de/nextcloud",
- "not assignable" : "nicht zuweisbar",
- "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}, dies kann etwas dauern.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren Ihres Servers können Sie der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.",
- "An internal error occured." : "Es ist ein interner Fehler aufgetreten."
+ "An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 0eff22d41d8..213f7886d71 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -58,7 +58,7 @@
"seconds ago" : "Gerade eben",
"Logging in …" : "Melde an ...",
"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." : "Der Link zum Rücksetzen Ihres Passworts ist an Ihre E-Mail-Adresse versandt worden. Sollten Sie ihn nicht in Kürze erhalten, prüfen Sie bitte Ihren Spam-Ordner.<br>Wenn die E-Mail sich nicht darin befindet, wenden Sie sich bette an Ihrem lokalen Administrator.",
- "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?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
+ "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?" : "Ihre Dateien sind verschlüsselt. Es gibt keinen Weg Ihre Dateien nach dem Rücksetzen des Passwortes wiederherzustellen.<br />Falls Sie sich nicht sicher sind, kontaktieren Sie Ihren Administrator.<br />Möchten Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"No" : "Nein",
@@ -93,7 +93,7 @@
"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." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.",
"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>." : "Die Reverse-Proxy-Header-Konfiguration ist fehlerhaft oder Sie greifen auf Nextcloud über einen vertrauenswürdigen Proxy zu. Wenn Sie auf Nextcloud nicht über einen vertrauenswürdigen Proxy zugreifen, dann besteht ein Sicherheitsproblem, das einem Angreifer erlaubt die IP-Adresse, die für Nextcloud sichtbar ist, auszuspähen. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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>." : "Memcache ist als verteilter Cache konfiguriert, aber das falsche PHP Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" und nicht \"memcache\". Siehe <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached Wiki über beide Module</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>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu behen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</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>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu beheben finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</a>)",
"Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung",
"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." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.",
"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." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.",
@@ -120,6 +120,7 @@
"Link" : "Link",
"Password protect" : "Passwortschutz",
"Allow upload and editing" : "Hochladen und Bearbeiten erlauben",
+ "Allow editing" : "Bearbeitung erlauben",
"File drop (upload only)" : "Dateien ablegen (nur Hochladen)",
"Email link to person" : "Link per E-Mail verschicken",
"Send" : "Senden",
@@ -222,12 +223,13 @@
"Configure the database" : "Datenbank einrichten",
"Only %s is available." : "Es ist nur %s verfügbar.",
"Install and activate additional PHP modules to choose other database types." : "Installieren und aktivieren Sie zusätzliche PHP-Module, um andere Datenbank-Typen auswählen zu können.",
- "For more details check out the documentation." : "Schauen Sie für weitere Informationen in die Dokumentation.",
+ "For more details check out the documentation." : "Weitere Informationen finden Sie in der Dokumentation.",
"Database user" : "Datenbank-Benutzer",
"Database password" : "Datenbank-Passwort",
"Database name" : "Datenbank-Name",
"Database tablespace" : "Datenbank-Tablespace",
"Database host" : "Datenbank-Host",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Bitte die Portnummer mit der Hostadresse zusammen angeben (z.B. localhost:5432)",
"Performance warning" : "Leistungswarnung",
"SQLite will be used as database." : "SQLite wird als Datenbank benutzt.",
"For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.",
@@ -237,8 +239,8 @@
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schauen Sie in die Dokumentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktivieren Sie JavaScript{linkend} und laden Sie die Seite neu.",
- "Log out" : "Abmelden",
"Search" : "Suche",
+ "Log out" : "Abmelden",
"This action requires you to confirm your password:" : "Dieser Vorgang benötigt eine Passwortbestätigung von Ihnen:",
"Confirm your password" : "Bestätigen Sie Ihr Passwort",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
@@ -262,7 +264,7 @@
"Thank you for your patience." : "Vielen Dank für Ihre Geduld.",
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für Ihr Konto aktiviert. Bitte authentifizieren Sie sich mit einem zweiten Faktor. ",
- "Cancel log in" : "Anmelden abbrechen",
+ "Cancel log in" : "Anmeldung abbrechen",
"Use backup code" : "Backup-Code benutzen",
"Error while validating your second factor" : "Fehler beim Bestätigen des zweiten Sicherheitsfaktors",
"You are accessing the server from an untrusted domain." : "Sie greifen von einer nicht vertrauenswürdigen Domain auf den Server zu.",
@@ -336,9 +338,9 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dez.",
+ "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?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"This server has no working Internet connection. 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." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fäschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.",
- "Allow editing" : "Bearbeitung erlauben",
"Hide file listing" : "Dateiliste verbergen",
"Sending ..." : "Senden…",
"Email sent" : "E-Mail gesendet",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für Ihr Konto aktiviert. Bitte authentifizieren Sie sich mit einem zweiten Faktor. ",
"Cancel login" : "Anmelden abbrechen",
"Please authenticate using the selected factor." : "Bitte authentifizieren Sie sich mit dem ausgewählten zweiten Faktor. ",
- "An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Ihr Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" href=\"[docLink}\">Dokumentation</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfigurieren Sie zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.",
- "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\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu behen finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</a>)",
- "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}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\" >Sicherheitshinweisen</a> erläutert ist.",
- "An error occured. Please try again" : "Fehler aufgetreten. Bitte erneut versuchen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Teilen Sie es mit Nutzern in anderen Nextclouds. Die Syntax hierfür lautet: username@beispiel.de/nextcloud",
- "not assignable" : "nicht zuweisbar",
- "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}, dies kann etwas dauern.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren Ihres Servers können Sie der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.",
- "An internal error occured." : "Es ist ein interner Fehler aufgetreten."
+ "An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten"
},"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 aa4b77e1686..e8d61bd3547 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -3,6 +3,8 @@ OC.L10N.register(
{
"Please select a file." : "Παρακαλώ επιλέξτε αρχείο.",
"File is too big" : "Το αρχείο είναι πολύ μεγάλο",
+ "The selected file is not an image." : "Το επιλεγμένο αρχείο δεν είναι εικόνας.",
+ "The selected file cannot be read." : "Το επιλεγμένο αρχείο δεν μπορεί να αναγνωσθεί",
"Invalid file provided" : "Έχει δοθεί μη έγκυρο αρχείο",
"No image or file provided" : "Δεν δόθηκε εικόνα ή αρχείο",
"Unknown filetype" : "Άγνωστος τύπος αρχείου",
@@ -47,7 +49,6 @@ OC.L10N.register(
"Cancel" : "Άκυρο",
"seconds ago" : "δευτερόλεπτα πριν",
"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. 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 />Θέλετε στ' αλήθεια να συνεχίσετε;",
"I know what I'm doing" : "Γνωρίζω τι κάνω",
"Password can not be changed. Please contact your administrator." : "Ο κωδικός πρόσβασης δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"No" : "Όχι",
@@ -96,6 +97,7 @@ OC.L10N.register(
"Share link" : "Διαμοιρασμός συνδέσμου",
"Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Email link to person" : "Αποστολή συνδέσμου με email ",
"Send" : "Αποστολή",
"Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}",
@@ -184,8 +186,8 @@ OC.L10N.register(
"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} και επαναφορτώστε τη σελίδα.",
- "Log out" : "Αποσύνδεση",
"Search" : "Αναζήτηση",
+ "Log out" : "Αποσύνδεση",
"Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
"Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
"An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.",
@@ -274,7 +276,7 @@ OC.L10N.register(
"Oct." : "Οκτ.",
"Nov." : "Νοε.",
"Dec." : "Δεκ.",
- "Allow editing" : "Επιτρέπεται η επεξεργασία",
+ "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 />Θέλετε στ' αλήθεια να συνεχίσετε;",
"Sending ..." : "Αποστολή...",
"Email sent" : "Το Email απεστάλη ",
"Send link via email" : "Αποστολή συνδέσμου μέσω email",
@@ -290,7 +292,6 @@ OC.L10N.register(
"Error while sending notification" : "Σφάλμα κατά την αποστολή ειδοποίησης",
"Updating to {version}" : "Ενημέρωση στην έκδοση {version}",
"The update was successful. There were warnings." : "Η ενημέρωση ήταν επιτυχής. Υπάρχουν προειδοποιήσεις.",
- "No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud"
+ "No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/el.json b/core/l10n/el.json
index cf36b408be5..cff6d1a7987 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -1,6 +1,8 @@
{ "translations": {
"Please select a file." : "Παρακαλώ επιλέξτε αρχείο.",
"File is too big" : "Το αρχείο είναι πολύ μεγάλο",
+ "The selected file is not an image." : "Το επιλεγμένο αρχείο δεν είναι εικόνας.",
+ "The selected file cannot be read." : "Το επιλεγμένο αρχείο δεν μπορεί να αναγνωσθεί",
"Invalid file provided" : "Έχει δοθεί μη έγκυρο αρχείο",
"No image or file provided" : "Δεν δόθηκε εικόνα ή αρχείο",
"Unknown filetype" : "Άγνωστος τύπος αρχείου",
@@ -45,7 +47,6 @@
"Cancel" : "Άκυρο",
"seconds ago" : "δευτερόλεπτα πριν",
"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. 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 />Θέλετε στ' αλήθεια να συνεχίσετε;",
"I know what I'm doing" : "Γνωρίζω τι κάνω",
"Password can not be changed. Please contact your administrator." : "Ο κωδικός πρόσβασης δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"No" : "Όχι",
@@ -94,6 +95,7 @@
"Share link" : "Διαμοιρασμός συνδέσμου",
"Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Allow editing" : "Επιτρέπεται η επεξεργασία",
"Email link to person" : "Αποστολή συνδέσμου με email ",
"Send" : "Αποστολή",
"Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}",
@@ -182,8 +184,8 @@
"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} και επαναφορτώστε τη σελίδα.",
- "Log out" : "Αποσύνδεση",
"Search" : "Αναζήτηση",
+ "Log out" : "Αποσύνδεση",
"Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
"Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
"An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.",
@@ -272,7 +274,7 @@
"Oct." : "Οκτ.",
"Nov." : "Νοε.",
"Dec." : "Δεκ.",
- "Allow editing" : "Επιτρέπεται η επεξεργασία",
+ "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 />Θέλετε στ' αλήθεια να συνεχίσετε;",
"Sending ..." : "Αποστολή...",
"Email sent" : "Το Email απεστάλη ",
"Send link via email" : "Αποστολή συνδέσμου μέσω email",
@@ -288,7 +290,6 @@
"Error while sending notification" : "Σφάλμα κατά την αποστολή ειδοποίησης",
"Updating to {version}" : "Ενημέρωση στην έκδοση {version}",
"The update was successful. There were warnings." : "Η ενημέρωση ήταν επιτυχής. Υπάρχουν προειδοποιήσεις.",
- "No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud"
+ "No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους"
},"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 b0d6f1a3098..d78122ce116 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -60,7 +60,6 @@ OC.L10N.register(
"seconds ago" : "seconds ago",
"Logging in …" : "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." : "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.",
- "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?" : "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?",
"I know what I'm doing" : "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" : "No",
@@ -117,6 +116,7 @@ OC.L10N.register(
"Share link" : "Share link",
"Link" : "Link",
"Password protect" : "Password protect",
+ "Allow editing" : "Allow editing",
"Email link to person" : "Email link to person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}",
@@ -212,8 +212,8 @@ OC.L10N.register(
"Need help?" : "Need help?",
"See the documentation" : "See the documentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.",
- "Log out" : "Log out",
"Search" : "Search",
+ "Log out" : "Log out",
"Server side authentication failed!" : "Server side authentication failed!",
"Please contact your administrator." : "Please contact your administrator.",
"An internal error occurred." : "An internal error occurred.",
@@ -304,8 +304,8 @@ OC.L10N.register(
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Dec.",
+ "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?" : "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?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
- "Allow editing" : "Allow editing",
"Hide file listing" : "Hide file listing",
"Sending ..." : "Sending ...",
"Email sent" : "Email sent",
@@ -327,7 +327,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Enhanced security has been enabled for your account. Please authenticate using a second factor.",
"Cancel login" : "Cancel login",
"Please authenticate using the selected factor." : "Please authenticate using the selected factor.",
- "An error occured while verifying the token" : "An error occured while verifying the token",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Share with people on other ownClouds using the syntax username@example.com/owncloud"
+ "An error occured while verifying the token" : "An error occured while verifying the token"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index 19e3b8e50cd..64f79a7e768 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -58,7 +58,6 @@
"seconds ago" : "seconds ago",
"Logging in …" : "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." : "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.",
- "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?" : "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?",
"I know what I'm doing" : "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" : "No",
@@ -115,6 +114,7 @@
"Share link" : "Share link",
"Link" : "Link",
"Password protect" : "Password protect",
+ "Allow editing" : "Allow editing",
"Email link to person" : "Email link to person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}",
@@ -210,8 +210,8 @@
"Need help?" : "Need help?",
"See the documentation" : "See the documentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.",
- "Log out" : "Log out",
"Search" : "Search",
+ "Log out" : "Log out",
"Server side authentication failed!" : "Server side authentication failed!",
"Please contact your administrator." : "Please contact your administrator.",
"An internal error occurred." : "An internal error occurred.",
@@ -302,8 +302,8 @@
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Dec.",
+ "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?" : "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?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
- "Allow editing" : "Allow editing",
"Hide file listing" : "Hide file listing",
"Sending ..." : "Sending ...",
"Email sent" : "Email sent",
@@ -325,7 +325,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Enhanced security has been enabled for your account. Please authenticate using a second factor.",
"Cancel login" : "Cancel login",
"Please authenticate using the selected factor." : "Please authenticate using the selected factor.",
- "An error occured while verifying the token" : "An error occured while verifying the token",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Share with people on other ownClouds using the syntax username@example.com/owncloud"
+ "An error occured while verifying the token" : "An error occured while verifying the token"
},"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 c9eaf5f22b1..9844386dd2b 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Reset log level" : "Restablecer el nivel de registro",
"Starting code integrity check" : "Comenzando comprobación de integridad de código",
"Finished code integrity check" : "Terminando comprobación de integridad de código",
- "%s (3rdparty)" : "%s (tercer parte)",
+ "%s (3rdparty)" : "%s (tercero)",
"%s (incompatible)" : "%s (incompatible)",
"Following apps have been disabled: %s" : "Siguiendo aplicaciones ha sido deshabilitado: %s",
"Already up to date" : "Ya actualizado",
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "hace segundos",
"Logging in …" : "Iniciando sesión ...",
"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." : "Se ha enviado un enlace para restablecer su contraseña a su correo electrónico. Si usted no lo recibe en un tiempo razonable, revise su carpeta de spam/chatarra/basura.<br>Si no lo encuentra, consulte a su administrador local.",
- "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?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
+ "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?" : "Sus archivos han sido cifrados. No habrá forma de recuperar sus datos tras resetear la contraseña.<br /> Si no está seguro de qué hacer, contacte con su administrador antes de continuar. ¿Está seguro de qué quiere continuar?",
"I know what I'm doing" : "Sé lo que estoy haciendo",
"Password can not be changed. Please contact your administrator." : "La contraseña no se puede cambiar. Por favor, contacte a su administrador.",
"No" : "No",
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Enlace",
"Password protect" : "Protección con contraseña",
"Allow upload and editing" : "Permitir subito y edición",
+ "Allow editing" : "Permitir edición",
"File drop (upload only)" : "Entrega de archivos (solo subida)",
"Email link to person" : "Enviar enlace por correo electrónico a una persona",
"Send" : "Enviar",
@@ -230,6 +231,7 @@ OC.L10N.register(
"Database name" : "Nombre de la base de datos",
"Database tablespace" : "Espacio de tablas de la base de datos",
"Database host" : "Host de la base de datos",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifique el numero del puerto junto al nombre del anfitrión (p.e., localhost:5432).",
"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",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "¿Necesita ayuda?",
"See the documentation" : "Vea la documentación",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere JavaScript para operar correctamente. Por favor, {linkstart}habilite JavaScript{linkend} y recargue la página.",
- "Log out" : "Salir",
"Search" : "Buscar",
+ "Log out" : "Salir",
"This action requires you to confirm your password:" : "Esta acción requiere que confirme su contraseña:",
"Confirm your password" : "Confirme su contraseña",
"Server side authentication failed!" : "La autenticación a fallado en el servidor.",
@@ -338,9 +340,9 @@ OC.L10N.register(
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Dic.",
+ "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?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"This server has no working Internet connection. 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 no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionarán. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
- "Allow editing" : "Permitir edición",
"Hide file listing" : "Ocultar la lista de archivos.",
"Sending ..." : "Enviando...",
"Email sent" : "Correo electrónico enviado",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada se ha habilitado para tu cuenta. Por favor, autenticar utilizando un segundo factor.",
"Cancel login" : "Cancelar inicio de sesión",
"Please authenticate using the selected factor." : "Por favor, autenticar utilizando el factor seleccionado.",
- "An error occured while verifying the token" : "Ocurrió un error mientras se verificaba el \"token\".",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Su servido no esta configurada correctamente para resolver \"{url}\". Se pueden encontrar más información en nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "La memoria caché no ha sido configurada. Para mejorar su desempeño, por favor, configure la memcache si está disponible. Puede encontrar más información en nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom no es legible por PHP que no se recomienda para razones de seguridad. Se puede encontrar más información en nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Actualmente utiliza PHP {version}. Le aconsejamos que actualice su versión de PHP para beneficiarse de las <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">mejoras de desempeño y seguridad que aporta el PHP Group</a> en cuanto su distribución lo soporte.",
- "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\" href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como caché distribuida, pero el módulo erróneo de PHP \"memcache\" está instalado. \\OC\\Memcache\\Memcached solo soporta \"memached\" y no \"memcache\". Vea la <a target=\"_blank\" href=\"{wikiLink}\"> wiki de memcached sobre ambos 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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Algunos archivos no han superado la comprobación de integridad. Para más información sobre cómo resolver este inconveniente consulte nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de archivos no válidos…</a> / <a href=\"{rescanEndpoint}\">Rescanear…</a>)",
- "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}\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como se describe en <a href=\"{docUrl}\">security tips</a>.",
- "An error occured. Please try again" : "Ha ocurrido un error. Por favor inténtelo de nuevo",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Comparta con personas en otros ownClouds utilizando la sintáxis username@example.com/owncloud",
- "not assignable" : "No asignable",
- "Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a la versión {version}, esto puede tardar un rato.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información sobre cómo configurar adecuadamente el servidor, por favor revise la <a href=\"%s\" target=\"_blank\">documentación</a>.",
- "An internal error occured." : "Un error interno ha ocurrido."
+ "An error occured while verifying the token" : "Ocurrió un error mientras se verificaba el \"token\"."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/es.json b/core/l10n/es.json
index 525b0bd84a6..4be7f957aab 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -39,7 +39,7 @@
"Reset log level" : "Restablecer el nivel de registro",
"Starting code integrity check" : "Comenzando comprobación de integridad de código",
"Finished code integrity check" : "Terminando comprobación de integridad de código",
- "%s (3rdparty)" : "%s (tercer parte)",
+ "%s (3rdparty)" : "%s (tercero)",
"%s (incompatible)" : "%s (incompatible)",
"Following apps have been disabled: %s" : "Siguiendo aplicaciones ha sido deshabilitado: %s",
"Already up to date" : "Ya actualizado",
@@ -58,7 +58,7 @@
"seconds ago" : "hace segundos",
"Logging in …" : "Iniciando sesión ...",
"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." : "Se ha enviado un enlace para restablecer su contraseña a su correo electrónico. Si usted no lo recibe en un tiempo razonable, revise su carpeta de spam/chatarra/basura.<br>Si no lo encuentra, consulte a su administrador local.",
- "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?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
+ "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?" : "Sus archivos han sido cifrados. No habrá forma de recuperar sus datos tras resetear la contraseña.<br /> Si no está seguro de qué hacer, contacte con su administrador antes de continuar. ¿Está seguro de qué quiere continuar?",
"I know what I'm doing" : "Sé lo que estoy haciendo",
"Password can not be changed. Please contact your administrator." : "La contraseña no se puede cambiar. Por favor, contacte a su administrador.",
"No" : "No",
@@ -120,6 +120,7 @@
"Link" : "Enlace",
"Password protect" : "Protección con contraseña",
"Allow upload and editing" : "Permitir subito y edición",
+ "Allow editing" : "Permitir edición",
"File drop (upload only)" : "Entrega de archivos (solo subida)",
"Email link to person" : "Enviar enlace por correo electrónico a una persona",
"Send" : "Enviar",
@@ -228,6 +229,7 @@
"Database name" : "Nombre de la base de datos",
"Database tablespace" : "Espacio de tablas de la base de datos",
"Database host" : "Host de la base de datos",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifique el numero del puerto junto al nombre del anfitrión (p.e., localhost:5432).",
"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",
@@ -237,8 +239,8 @@
"Need help?" : "¿Necesita ayuda?",
"See the documentation" : "Vea la documentación",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere JavaScript para operar correctamente. Por favor, {linkstart}habilite JavaScript{linkend} y recargue la página.",
- "Log out" : "Salir",
"Search" : "Buscar",
+ "Log out" : "Salir",
"This action requires you to confirm your password:" : "Esta acción requiere que confirme su contraseña:",
"Confirm your password" : "Confirme su contraseña",
"Server side authentication failed!" : "La autenticación a fallado en el servidor.",
@@ -336,9 +338,9 @@
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Dic.",
+ "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?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"This server has no working Internet connection. 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 no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionarán. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
- "Allow editing" : "Permitir edición",
"Hide file listing" : "Ocultar la lista de archivos.",
"Sending ..." : "Enviando...",
"Email sent" : "Correo electrónico enviado",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada se ha habilitado para tu cuenta. Por favor, autenticar utilizando un segundo factor.",
"Cancel login" : "Cancelar inicio de sesión",
"Please authenticate using the selected factor." : "Por favor, autenticar utilizando el factor seleccionado.",
- "An error occured while verifying the token" : "Ocurrió un error mientras se verificaba el \"token\".",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Su servido no esta configurada correctamente para resolver \"{url}\". Se pueden encontrar más información en nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "La memoria caché no ha sido configurada. Para mejorar su desempeño, por favor, configure la memcache si está disponible. Puede encontrar más información en nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom no es legible por PHP que no se recomienda para razones de seguridad. Se puede encontrar más información en nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Actualmente utiliza PHP {version}. Le aconsejamos que actualice su versión de PHP para beneficiarse de las <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">mejoras de desempeño y seguridad que aporta el PHP Group</a> en cuanto su distribución lo soporte.",
- "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\" href=\"{docLink}\">documentation</a>." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como caché distribuida, pero el módulo erróneo de PHP \"memcache\" está instalado. \\OC\\Memcache\\Memcached solo soporta \"memached\" y no \"memcache\". Vea la <a target=\"_blank\" href=\"{wikiLink}\"> wiki de memcached sobre ambos 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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Algunos archivos no han superado la comprobación de integridad. Para más información sobre cómo resolver este inconveniente consulte nuestra <a target=\"_blank\" href=\"{docLink}\">documentación</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de archivos no válidos…</a> / <a href=\"{rescanEndpoint}\">Rescanear…</a>)",
- "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}\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como se describe en <a href=\"{docUrl}\">security tips</a>.",
- "An error occured. Please try again" : "Ha ocurrido un error. Por favor inténtelo de nuevo",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Comparta con personas en otros ownClouds utilizando la sintáxis username@example.com/owncloud",
- "not assignable" : "No asignable",
- "Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a la versión {version}, esto puede tardar un rato.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información sobre cómo configurar adecuadamente el servidor, por favor revise la <a href=\"%s\" target=\"_blank\">documentación</a>.",
- "An internal error occured." : "Un error interno ha ocurrido."
+ "An error occured while verifying the token" : "Ocurrió un error mientras se verificaba el \"token\"."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js
index 9eadb100ebd..1d0653a51a3 100644
--- a/core/l10n/fi_FI.js
+++ b/core/l10n/fi_FI.js
@@ -53,7 +53,6 @@ OC.L10N.register(
"Cancel" : "Peru",
"seconds ago" : "sekunteja sitten",
"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." : "Linkki salasanan palauttamista varten on lähetetty sähköpostitse. Jos et saa sähköpostiviestiä kohtuullisessa ajassa, tarkista roskapostikansiot.<br>Jos et saa sähköpostiviestiä, ota yhteys paikalliseen ylläpitäjään.",
- "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?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"I know what I'm doing" : "Tiedän mitä teen",
"Password can not be changed. Please contact your administrator." : "Salasanan vaihtaminen ei onnistunut. Ota yhteys ylläpitäjään.",
"No" : "Ei",
@@ -111,6 +110,7 @@ OC.L10N.register(
"Link" : "Linkki",
"Password protect" : "Suojaa salasanalla",
"Allow upload and editing" : "Salli lähetys ja muokkaus",
+ "Allow editing" : "Salli muokkaus",
"Email link to person" : "Lähetä linkki sähköpostitse",
"Send" : "Lähetä",
"Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta",
@@ -211,8 +211,8 @@ OC.L10N.register(
"Need help?" : "Tarvitsetko apua?",
"See the documentation" : "Tutustu dokumentaatioon",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tämä sovellus vaatii toimiakseen JavaScript-tuen. {linkstart}Ota JavaScript käyttöön{linkend} ja päivitä sivu.",
- "Log out" : "Kirjaudu ulos",
"Search" : "Etsi",
+ "Log out" : "Kirjaudu ulos",
"Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!",
"Please contact your administrator." : "Ota yhteys ylläpitäjään.",
"An internal error occurred." : "Tapahtui sisäinen virhe",
@@ -308,8 +308,8 @@ OC.L10N.register(
"Oct." : "Loka",
"Nov." : "Marras",
"Dec." : "Joulu",
+ "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?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"This server has no working Internet connection. 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." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ominaisuuksia.",
- "Allow editing" : "Salli muokkaus",
"Hide file listing" : "Piilota tiedostolistaus",
"Sending ..." : "Lähetetään...",
"Email sent" : "Sähköposti lähetetty",
@@ -334,17 +334,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Tililläsi on käytössä lisäturvatoimia. Tunnistaudu käyttäen kaksivaiheista vahvistusta.",
"Cancel login" : "Peru kirjautuminen",
"Please authenticate using the selected factor." : "Tunnistaudu käyttäen valittua vahvistusta.",
- "An error occured while verifying the token" : "Valtuutusta tarkistettaessa tapahtui virhe",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "HTTP-palvelinta ei ole määritelty oikein tunnistamaan osoitetta \"{url}\". Lisätietoja löytyy meidän <a target=\"_blank\" href=\"{docLink}\">ohjeissa</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\" href=\"{docLink}\">documentation</a>." : "dev/urandom ei ole PHP:n luettavissa, mitä ei voi suositella tietoturvasyistä. Lisätietoja löytyy meidän <a target=\"_blank\" href=\"{docLink}\">ohjeista</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Sinulla on käytössä PHP {version}. Suosittelemme päivittämään PHP versiosi saadaksesi <a target=\"_blank\" href=\"{phpLink}\">PHP Group:n suorituskyky ja tietoturvapäivityksiä</a> niin pian kuin jakelusi sitä tukee.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Jotkin tiedostot eivät ole läpäisseet eheystarkistusta. Lisätietoa ongelman korjaamiseksi löytyy meidän <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
- "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}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP otsake ei ole määritelty vähintään \"{seconds}\" sekuntiin. Paremman tietoturvan vuoksi suosittelemme määrittelemään HSTS:n kuten kerrottu <a href=\"{docUrl}\">tietoturvaohjeissa</a>.",
- "An error occured. Please try again" : "Tapahtui virhe, yritä uudelleen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Jaa toisia ownCloud-järjestelmiä käyttävien kesken käyttäen merkintää käyttäjätunnus@example.com/owncloud",
- "not assignable" : "ei liitettävissä",
- "Updating {productName} to version {version}, this may take a while." : "Päivittämässä sovellusta {productName} versioon {version}, tämä voi kestää hetken.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Lisätietoja palvelimen oikeaoppiseen määritykseen on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiossa</a>.",
- "An internal error occured." : "Tapahtui sisäinen virhe."
+ "An error occured while verifying the token" : "Valtuutusta tarkistettaessa tapahtui virhe"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json
index 09d5ca099bd..da11bc2635d 100644
--- a/core/l10n/fi_FI.json
+++ b/core/l10n/fi_FI.json
@@ -51,7 +51,6 @@
"Cancel" : "Peru",
"seconds ago" : "sekunteja sitten",
"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." : "Linkki salasanan palauttamista varten on lähetetty sähköpostitse. Jos et saa sähköpostiviestiä kohtuullisessa ajassa, tarkista roskapostikansiot.<br>Jos et saa sähköpostiviestiä, ota yhteys paikalliseen ylläpitäjään.",
- "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?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"I know what I'm doing" : "Tiedän mitä teen",
"Password can not be changed. Please contact your administrator." : "Salasanan vaihtaminen ei onnistunut. Ota yhteys ylläpitäjään.",
"No" : "Ei",
@@ -109,6 +108,7 @@
"Link" : "Linkki",
"Password protect" : "Suojaa salasanalla",
"Allow upload and editing" : "Salli lähetys ja muokkaus",
+ "Allow editing" : "Salli muokkaus",
"Email link to person" : "Lähetä linkki sähköpostitse",
"Send" : "Lähetä",
"Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta",
@@ -209,8 +209,8 @@
"Need help?" : "Tarvitsetko apua?",
"See the documentation" : "Tutustu dokumentaatioon",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tämä sovellus vaatii toimiakseen JavaScript-tuen. {linkstart}Ota JavaScript käyttöön{linkend} ja päivitä sivu.",
- "Log out" : "Kirjaudu ulos",
"Search" : "Etsi",
+ "Log out" : "Kirjaudu ulos",
"Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!",
"Please contact your administrator." : "Ota yhteys ylläpitäjään.",
"An internal error occurred." : "Tapahtui sisäinen virhe",
@@ -306,8 +306,8 @@
"Oct." : "Loka",
"Nov." : "Marras",
"Dec." : "Joulu",
+ "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?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"This server has no working Internet connection. 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." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ominaisuuksia.",
- "Allow editing" : "Salli muokkaus",
"Hide file listing" : "Piilota tiedostolistaus",
"Sending ..." : "Lähetetään...",
"Email sent" : "Sähköposti lähetetty",
@@ -332,17 +332,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Tililläsi on käytössä lisäturvatoimia. Tunnistaudu käyttäen kaksivaiheista vahvistusta.",
"Cancel login" : "Peru kirjautuminen",
"Please authenticate using the selected factor." : "Tunnistaudu käyttäen valittua vahvistusta.",
- "An error occured while verifying the token" : "Valtuutusta tarkistettaessa tapahtui virhe",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "HTTP-palvelinta ei ole määritelty oikein tunnistamaan osoitetta \"{url}\". Lisätietoja löytyy meidän <a target=\"_blank\" href=\"{docLink}\">ohjeissa</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\" href=\"{docLink}\">documentation</a>." : "dev/urandom ei ole PHP:n luettavissa, mitä ei voi suositella tietoturvasyistä. Lisätietoja löytyy meidän <a target=\"_blank\" href=\"{docLink}\">ohjeista</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Sinulla on käytössä PHP {version}. Suosittelemme päivittämään PHP versiosi saadaksesi <a target=\"_blank\" href=\"{phpLink}\">PHP Group:n suorituskyky ja tietoturvapäivityksiä</a> niin pian kuin jakelusi sitä tukee.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Jotkin tiedostot eivät ole läpäisseet eheystarkistusta. Lisätietoa ongelman korjaamiseksi löytyy meidän <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
- "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}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP otsake ei ole määritelty vähintään \"{seconds}\" sekuntiin. Paremman tietoturvan vuoksi suosittelemme määrittelemään HSTS:n kuten kerrottu <a href=\"{docUrl}\">tietoturvaohjeissa</a>.",
- "An error occured. Please try again" : "Tapahtui virhe, yritä uudelleen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Jaa toisia ownCloud-järjestelmiä käyttävien kesken käyttäen merkintää käyttäjätunnus@example.com/owncloud",
- "not assignable" : "ei liitettävissä",
- "Updating {productName} to version {version}, this may take a while." : "Päivittämässä sovellusta {productName} versioon {version}, tämä voi kestää hetken.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Lisätietoja palvelimen oikeaoppiseen määritykseen on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiossa</a>.",
- "An internal error occured." : "Tapahtui sisäinen virhe."
+ "An error occured while verifying the token" : "Valtuutusta tarkistettaessa tapahtui virhe"
},"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 07094688525..90e99370f2e 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "à l'instant",
"Logging in …" : "Connexion…",
"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." : "Un lien permettant de réinitialiser votre mot de passe vient de vous être envoyé par courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, contactez votre administrateur.<br>N'oubliez pas de vérifier dans votre dossier pourriel / spam!",
- "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?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
+ "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?" : "Vos fichiers sont chiffrés. Il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"I know what I'm doing" : "Je sais ce que je fais",
"Password can not be changed. Please contact your administrator." : "Le mot de passe ne peut être modifié. Veuillez contacter votre administrateur.",
"No" : "Non",
@@ -89,25 +89,25 @@ OC.L10N.register(
"Strong password" : "Mot de passe fort",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.",
"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>." : "La configuration du serveur web ne permet pas d'atteindre \"{url}\". Consultez la <a target=\"_blank\" ref=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "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." : "Ce serveur ne peut se connecter à Internet : plusieurs point finaux ne peuvent être atteins. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que l'envoie de notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
- "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>." : "Aucun cache mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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." : "Ce serveur ne peut se connecter à Internet : plusieurs point finaux ne peuvent être atteints. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que l'envoi de notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
+ "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>." : "Aucun cache mémoire n'est configuré. Si possible, configurez un \"memcache\" pour améliorer les performances. Pour plus d'informations consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "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." : "Vous utilisez actuellement PHP {version}. Nous vous encourageons à mettre à jour votre version de PHP afin de tirer avantage des amélioration liées à <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">la performance et la sécurité fournies par le PHP Group</a>, dès que votre distribution le supportera.",
+ "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." : "Vous utilisez actuellement PHP {version}. Nous vous encourageons à mettre à jour votre version de PHP afin de tirer avantage des améliorations liées à <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">la performance et la sécurité fournies par le PHP Group</a>, dès que votre distribution le supportera.",
"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>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à Nextcloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à Nextcloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant d'usurper l'adresse IP affichée à Nextcloud. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "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 configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">Consulter le wiki de memcached à propos de ces deux modules.</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>)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides…</a> / <a href=\"{rescanEndpoint}\">Relancer…</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 configuré comme cache distribué, mais le mauvais module PHP est installé. \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">Consulter le wiki de memcached à propos de ces deux modules.</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>)" : "Des fichiers n'ont pas passé la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides…</a> / <a href=\"{rescanEndpoint}\">Relancer…</a>)",
"Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur",
"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." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur 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." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\" créant potentiellement un risque relié à la sécurité et à la vie privée. Il est recommandé d'ajuster ce paramètre.",
- "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>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans notre <a href=\"{docUrl} rel=\"noreferrer\">Guide pour le renforcement et la sécurité</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>." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS, comme expliqué dans notre <a href=\"{docUrl}\">Guide pour le renforcement et la sécurité</a>.",
+ "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>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à au moins \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans nos <a href=\"{docUrl} rel=\"noreferrer\">conseils de sécurisation</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>." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS, comme expliqué dans nos <a href=\"{docUrl}\">conseils de sécurisation</a>.",
"Shared" : "Partagé",
"Shared with {recipients}" : "Partagé avec {recipients}",
"Error" : "Erreur",
"Error while sharing" : "Erreur lors de la mise en partage",
"Error while unsharing" : "Erreur lors de l'annulation du partage",
- "Error setting expiration date" : "Erreur lors de la spécification de la date d'expiration",
- "The public link will expire no later than {days} days after it is created" : "Ce lien public expirera au plus tard {days} jours après sa création.",
+ "Error setting expiration date" : "Erreur lors de la configuration de la date d'expiration",
+ "The public link will expire no later than {days} days after it is created" : "Ce lien public expirera dans {days} jours après sa création.",
"Set expiration date" : "Spécifier une date d'expiration",
"Expiration" : "Expiration",
"Expiration date" : "Date d'expiration",
@@ -122,7 +122,8 @@ OC.L10N.register(
"Link" : "Lien",
"Password protect" : "Protéger par un mot de passe",
"Allow upload and editing" : "Autoriser l'envoi et l'édition",
- "File drop (upload only)" : "Dépôt de fichier (uniquement pour le téléversement)",
+ "Allow editing" : "Permettre la modification",
+ "File drop (upload only)" : "Dépôt de fichier (téléversement uniquement)",
"Email link to person" : "Envoyer le lien par courriel",
"Send" : "Envoyer",
"Shared with you and the group {group} by {owner}" : "Partagé avec vous et le groupe {group} par {owner}",
@@ -130,7 +131,7 @@ OC.L10N.register(
"{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} a partagé via un lien",
"group" : "groupe",
"remote" : "distant",
- "email" : "Adresse e-mail",
+ "email" : "Adresse de courriel",
"Unshare" : "Ne plus partager",
"can reshare" : "peut repartager",
"can edit" : "peut modifier",
@@ -147,14 +148,14 @@ OC.L10N.register(
"{sharee} (remote)" : "{sharee} (distant)",
"{sharee} (email)" : "{sharee} (email)",
"Share" : "Partager",
- "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Partager avec des personnes sur d'autres serveurs en utilisant leur identifiant du Cloud Fédéré utilisateur@exemple.com/nextcloud",
- "Share with users or by mail..." : "Partager avec des utilisateurs ou par mail…",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Partager avec des personnes sur d'autres serveurs en utilisant leur identifiant du Cloud Fédéré (utilisateur@exemple.com/nextcloud)",
+ "Share with users or by mail..." : "Partager avec des utilisateurs ou par courriel…",
"Share with users or remote users..." : "Partager avec des utilisateurs ou des utilisateurs distants...",
- "Share with users, remote users or by mail..." : "Partager avec des utilisateurs, des utilisateurs distants ou par mail…",
+ "Share with users, remote users or by mail..." : "Partager avec des utilisateurs, des utilisateurs distants ou par courriel…",
"Share with users or groups..." : "Partager avec des utilisateurs ou des groupes...",
- "Share with users, groups or by mail..." : "Partager avec des utilisateurs, des groupes ou par mail…",
+ "Share with users, groups or by mail..." : "Partager avec des utilisateurs, des groupes ou par courriel…",
"Share with users, groups or remote users..." : "Partager avec des utilisateurs, groupes ou utilisateurs distants...",
- "Share with users, groups, remote users or by mail..." : "Partager avec des utilisateurs, des groupes, des utilisateurs distants ou par mail…",
+ "Share with users, groups, remote users or by mail..." : "Partager avec des utilisateurs, des groupes, des utilisateurs distants ou par courriel…",
"Share with users..." : "Partager avec des utilisateurs...",
"Error removing share" : "Erreur lors de l'arrêt du partage",
"Non-existing tag #{tag}" : "Étiquette #{tag} inexistante",
@@ -166,7 +167,7 @@ OC.L10N.register(
"Collaborative tags" : "Étiquettes collaboratives ",
"No tags found" : "Aucune étiquette n'a été trouvée",
"The object type is not specified." : "Le type d'objet n'est pas spécifié.",
- "Enter new" : "Saisir un nouveau",
+ "Enter new" : "Nouvelle étiquette",
"Add" : "Ajouter",
"Edit tags" : "Modifier les étiquettes",
"Error loading dialog template: {error}" : "Erreur lors du chargement du modèle de dialogue : {error}",
@@ -228,26 +229,27 @@ OC.L10N.register(
"Database user" : "Utilisateur de la base de données",
"Database password" : "Mot de passe de la base de données",
"Database name" : "Nom de la base de données",
- "Database tablespace" : "Tablespace de la base de données",
+ "Database tablespace" : "Espace de stockage de la base de données",
"Database host" : "Hôte de la base de données",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Veuillez spécifier le numéro du port avec le nom de l'hôte (ex: localhost:5432).",
"Performance warning" : "Avertissement à propos des performances",
"SQLite will be used as database." : "SQLite sera utilisé comme gestionnaire de base de données.",
"For larger installations we recommend to choose a different database backend." : "Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "En particulier si vous utilisez le client de bureau pour synchroniser vos données : l'utilisation de SQLite est alors déconseillée.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "En particulier si vous utilisez le client de bureau pour synchroniser vos données, l'utilisation de SQLite est déconseillée.",
"Finish setup" : "Terminer l'installation",
"Finishing …" : "Finalisation …",
"Need help?" : "Besoin d'aide ?",
"See the documentation" : "Lire la documentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Cette application requiert JavaScript pour fonctionner correctement. Veuillez {linkstart}activer JavaScript{linkend} et recharger la page.",
- "Log out" : "Se déconnecter",
"Search" : "Rechercher",
+ "Log out" : "Se déconnecter",
"This action requires you to confirm your password:" : "Cette action nécessite que vous confirmiez votre mot de passe :",
"Confirm your password" : "Confirmer votre mot de passe",
"Server side authentication failed!" : "L'authentification sur le serveur a échoué !",
"Please contact your administrator." : "Veuillez contacter votre administrateur.",
"An internal error occurred." : "Une erreur interne est survenue.",
"Please try again or contact your administrator." : "Veuillez réessayer ou contactez votre administrateur.",
- "Username or email" : "Nom d'utilisateur ou e-mail",
+ "Username or email" : "Nom d'utilisateur ou adresse de courriel",
"Wrong password. Reset it?" : "Mot de passe incorrect. Réinitialiser ?",
"Wrong password." : "Mot de passe incorrect.",
"Log in" : "Se connecter",
@@ -281,7 +283,7 @@ OC.L10N.register(
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Afin d'éviter les timeouts avec les installations de volume conséquent, vous pouvez exécuter la commande suivante depuis le répertoire d'installation :",
"Detailed logs" : "Journaux détaillés",
"Update needed" : "Mise à jour nécessaire",
- "Please use the command line updater because you have a big instance." : "Veuillez utiliser la mise à jour en ligne de commande, votre instance est trop volumineuse.",
+ "Please use the command line updater because you have a big instance." : "Veuillez utiliser la mise à jour en ligne de commande car votre instance est volumineuse.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Pour obtenir de l'aide, lisez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>.",
"This %s instance is currently in maintenance mode, which may take a while." : "Cette instance de %s est en cours de maintenance, cela peut prendre du temps.",
"This page will refresh itself when the %s instance is available again." : "Cette page se rafraîchira d'elle-même lorsque l'instance %s sera à nouveau disponible.",
@@ -338,9 +340,9 @@ OC.L10N.register(
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Déc.",
- "This server has no working Internet connection. 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." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
+ "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?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
+ "This server has no working Internet connection. 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." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par courriel peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "Allow editing" : "Permettre la modification",
"Hide file listing" : "Cacher la liste des fichiers",
"Sending ..." : "Envoi…",
"Email sent" : "Courriel envoyé",
@@ -357,7 +359,7 @@ OC.L10N.register(
"Share with users or remote users…" : "Partager avec des utilisateurs ou des utilisateurs distants...",
"Warning" : "Attention",
"Error while sending notification" : "Erreur lors de l'envoi de la notification",
- "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "La mise à jour est en cours, quitter la page peux interrompre le processus dans beaucoup d'environnements.",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "La mise à jour est en cours, quitter la page peux interrompre le processus dans certains d'environnements.",
"Updating to {version}" : "Mise à jour vers {version}",
"The update was successful. There were warnings." : "La mise à jour a été faite avec succès. Il y a eu des avertissements.",
"No search results in other folders" : "Aucun résultat dans d'autres dossiers",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "La sécurité renforcée a été activée pour votre compte. Veuillez vous authentifier en utilisant un second facteur.",
"Cancel login" : "Annuler la connexion",
"Please authenticate using the selected factor." : "Veuillez vous authentifier en utilisant le second facteur.",
- "An error occured while verifying the token" : "Une erreur est survenue lors de la vérification du jeton",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Votre serveur web nest pas configuré correctement pour résoudre \"{url}\". Plus d'informations peuvent être trouvées sur notre <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Pas de mémoire cache configuré. Pour améliorer les performance merci ce configurer un memcache si disponible. Plus d'informations peuvent être trouvées sur notre <a target=\"_blank\" href=\"{docLink}\">documentation</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom n'est pas lisible par PHP ce qui est hautement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées sur notre <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Vous exécutez actuellement PHP {version}. Nous vous encourageons de mettre a jour votre version de PHP pour avoir les avantages de <a target=\"_blank\" href=\"{phpLink}\">performance et sécurités donné par les mise à jours de sécurités par le gourpe PHP</a> tant que votre distribution les supportes.",
- "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\" href=\"{docLink}\">documentation</a>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à Nextcloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à Nextcloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant d'usurper l'adresse IP affichée à Nextcloud. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached est configuré comme cache distribué, mais le mauvais module PHP \"memcache\" est installé. \\OC\\Memcache\\Memcached est le seul a supporter \"memcached\" et non \"memcache\". Regardez le <a target=\"_blank\" href=\"{wikiLink}\">wiki a propos des modules memcached</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Plusieurs fichiers n'ont pas passé le test d'intégrité. Plus d'informations pour résoudre ce problème peuvent être trouvé sur notre <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides.../a> / <a href=\"{rescanEndpoint}\">Réanalyser...</a>)",
- "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}\">security tips</a>." : "L'entête HTTP \"Strict-Transport-Security\" n'est pas configuré pour les dernières \"{seconds}\" secondes. Pour améliorer votre sécurité nous recommandons d'activer HSTS comme décrit dans notre <a href=\"{docUrl}\">aide de sécurité</a>.",
- "An error occured. Please try again" : "Une erreur est survenue. Merci d'essayer à nouveau",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partagez avec des personnes sur d'autres ownClouds en utilisant la syntaxe utilisateur@exemple.com/owncloud",
- "not assignable" : "non assignable",
- "Updating {productName} to version {version}, this may take a while." : "Mise à jour de {productName} vers la version {version}, cela peut prendre du temps.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "POur des informations sur comment configurer proprement votre serveur, merci de regarder la <a href=\"%s\" target=\"_blank\">documentation</a>.",
- "An internal error occured." : "Une erreur interne est survenue."
+ "An error occured while verifying the token" : "Une erreur est survenue lors de la vérification du jeton"
},
"nplurals=2; plural=(n > 1);");
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index c563d85248d..df5e24efb1d 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -58,7 +58,7 @@
"seconds ago" : "à l'instant",
"Logging in …" : "Connexion…",
"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." : "Un lien permettant de réinitialiser votre mot de passe vient de vous être envoyé par courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, contactez votre administrateur.<br>N'oubliez pas de vérifier dans votre dossier pourriel / spam!",
- "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?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
+ "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?" : "Vos fichiers sont chiffrés. Il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"I know what I'm doing" : "Je sais ce que je fais",
"Password can not be changed. Please contact your administrator." : "Le mot de passe ne peut être modifié. Veuillez contacter votre administrateur.",
"No" : "Non",
@@ -87,25 +87,25 @@
"Strong password" : "Mot de passe fort",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.",
"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>." : "La configuration du serveur web ne permet pas d'atteindre \"{url}\". Consultez la <a target=\"_blank\" ref=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "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." : "Ce serveur ne peut se connecter à Internet : plusieurs point finaux ne peuvent être atteins. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que l'envoie de notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
- "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>." : "Aucun cache mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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." : "Ce serveur ne peut se connecter à Internet : plusieurs point finaux ne peuvent être atteints. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que l'envoi de notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
+ "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>." : "Aucun cache mémoire n'est configuré. Si possible, configurez un \"memcache\" pour améliorer les performances. Pour plus d'informations consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "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." : "Vous utilisez actuellement PHP {version}. Nous vous encourageons à mettre à jour votre version de PHP afin de tirer avantage des amélioration liées à <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">la performance et la sécurité fournies par le PHP Group</a>, dès que votre distribution le supportera.",
+ "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." : "Vous utilisez actuellement PHP {version}. Nous vous encourageons à mettre à jour votre version de PHP afin de tirer avantage des améliorations liées à <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">la performance et la sécurité fournies par le PHP Group</a>, dès que votre distribution le supportera.",
"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>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à Nextcloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à Nextcloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant d'usurper l'adresse IP affichée à Nextcloud. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "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 configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">Consulter le wiki de memcached à propos de ces deux modules.</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>)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides…</a> / <a href=\"{rescanEndpoint}\">Relancer…</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 configuré comme cache distribué, mais le mauvais module PHP est installé. \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">Consulter le wiki de memcached à propos de ces deux modules.</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>)" : "Des fichiers n'ont pas passé la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides…</a> / <a href=\"{rescanEndpoint}\">Relancer…</a>)",
"Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur",
"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." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur 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." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\" créant potentiellement un risque relié à la sécurité et à la vie privée. Il est recommandé d'ajuster ce paramètre.",
- "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>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans notre <a href=\"{docUrl} rel=\"noreferrer\">Guide pour le renforcement et la sécurité</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>." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS, comme expliqué dans notre <a href=\"{docUrl}\">Guide pour le renforcement et la sécurité</a>.",
+ "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>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à au moins \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans nos <a href=\"{docUrl} rel=\"noreferrer\">conseils de sécurisation</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>." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS, comme expliqué dans nos <a href=\"{docUrl}\">conseils de sécurisation</a>.",
"Shared" : "Partagé",
"Shared with {recipients}" : "Partagé avec {recipients}",
"Error" : "Erreur",
"Error while sharing" : "Erreur lors de la mise en partage",
"Error while unsharing" : "Erreur lors de l'annulation du partage",
- "Error setting expiration date" : "Erreur lors de la spécification de la date d'expiration",
- "The public link will expire no later than {days} days after it is created" : "Ce lien public expirera au plus tard {days} jours après sa création.",
+ "Error setting expiration date" : "Erreur lors de la configuration de la date d'expiration",
+ "The public link will expire no later than {days} days after it is created" : "Ce lien public expirera dans {days} jours après sa création.",
"Set expiration date" : "Spécifier une date d'expiration",
"Expiration" : "Expiration",
"Expiration date" : "Date d'expiration",
@@ -120,7 +120,8 @@
"Link" : "Lien",
"Password protect" : "Protéger par un mot de passe",
"Allow upload and editing" : "Autoriser l'envoi et l'édition",
- "File drop (upload only)" : "Dépôt de fichier (uniquement pour le téléversement)",
+ "Allow editing" : "Permettre la modification",
+ "File drop (upload only)" : "Dépôt de fichier (téléversement uniquement)",
"Email link to person" : "Envoyer le lien par courriel",
"Send" : "Envoyer",
"Shared with you and the group {group} by {owner}" : "Partagé avec vous et le groupe {group} par {owner}",
@@ -128,7 +129,7 @@
"{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} a partagé via un lien",
"group" : "groupe",
"remote" : "distant",
- "email" : "Adresse e-mail",
+ "email" : "Adresse de courriel",
"Unshare" : "Ne plus partager",
"can reshare" : "peut repartager",
"can edit" : "peut modifier",
@@ -145,14 +146,14 @@
"{sharee} (remote)" : "{sharee} (distant)",
"{sharee} (email)" : "{sharee} (email)",
"Share" : "Partager",
- "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Partager avec des personnes sur d'autres serveurs en utilisant leur identifiant du Cloud Fédéré utilisateur@exemple.com/nextcloud",
- "Share with users or by mail..." : "Partager avec des utilisateurs ou par mail…",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Partager avec des personnes sur d'autres serveurs en utilisant leur identifiant du Cloud Fédéré (utilisateur@exemple.com/nextcloud)",
+ "Share with users or by mail..." : "Partager avec des utilisateurs ou par courriel…",
"Share with users or remote users..." : "Partager avec des utilisateurs ou des utilisateurs distants...",
- "Share with users, remote users or by mail..." : "Partager avec des utilisateurs, des utilisateurs distants ou par mail…",
+ "Share with users, remote users or by mail..." : "Partager avec des utilisateurs, des utilisateurs distants ou par courriel…",
"Share with users or groups..." : "Partager avec des utilisateurs ou des groupes...",
- "Share with users, groups or by mail..." : "Partager avec des utilisateurs, des groupes ou par mail…",
+ "Share with users, groups or by mail..." : "Partager avec des utilisateurs, des groupes ou par courriel…",
"Share with users, groups or remote users..." : "Partager avec des utilisateurs, groupes ou utilisateurs distants...",
- "Share with users, groups, remote users or by mail..." : "Partager avec des utilisateurs, des groupes, des utilisateurs distants ou par mail…",
+ "Share with users, groups, remote users or by mail..." : "Partager avec des utilisateurs, des groupes, des utilisateurs distants ou par courriel…",
"Share with users..." : "Partager avec des utilisateurs...",
"Error removing share" : "Erreur lors de l'arrêt du partage",
"Non-existing tag #{tag}" : "Étiquette #{tag} inexistante",
@@ -164,7 +165,7 @@
"Collaborative tags" : "Étiquettes collaboratives ",
"No tags found" : "Aucune étiquette n'a été trouvée",
"The object type is not specified." : "Le type d'objet n'est pas spécifié.",
- "Enter new" : "Saisir un nouveau",
+ "Enter new" : "Nouvelle étiquette",
"Add" : "Ajouter",
"Edit tags" : "Modifier les étiquettes",
"Error loading dialog template: {error}" : "Erreur lors du chargement du modèle de dialogue : {error}",
@@ -226,26 +227,27 @@
"Database user" : "Utilisateur de la base de données",
"Database password" : "Mot de passe de la base de données",
"Database name" : "Nom de la base de données",
- "Database tablespace" : "Tablespace de la base de données",
+ "Database tablespace" : "Espace de stockage de la base de données",
"Database host" : "Hôte de la base de données",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Veuillez spécifier le numéro du port avec le nom de l'hôte (ex: localhost:5432).",
"Performance warning" : "Avertissement à propos des performances",
"SQLite will be used as database." : "SQLite sera utilisé comme gestionnaire de base de données.",
"For larger installations we recommend to choose a different database backend." : "Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "En particulier si vous utilisez le client de bureau pour synchroniser vos données : l'utilisation de SQLite est alors déconseillée.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "En particulier si vous utilisez le client de bureau pour synchroniser vos données, l'utilisation de SQLite est déconseillée.",
"Finish setup" : "Terminer l'installation",
"Finishing …" : "Finalisation …",
"Need help?" : "Besoin d'aide ?",
"See the documentation" : "Lire la documentation",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Cette application requiert JavaScript pour fonctionner correctement. Veuillez {linkstart}activer JavaScript{linkend} et recharger la page.",
- "Log out" : "Se déconnecter",
"Search" : "Rechercher",
+ "Log out" : "Se déconnecter",
"This action requires you to confirm your password:" : "Cette action nécessite que vous confirmiez votre mot de passe :",
"Confirm your password" : "Confirmer votre mot de passe",
"Server side authentication failed!" : "L'authentification sur le serveur a échoué !",
"Please contact your administrator." : "Veuillez contacter votre administrateur.",
"An internal error occurred." : "Une erreur interne est survenue.",
"Please try again or contact your administrator." : "Veuillez réessayer ou contactez votre administrateur.",
- "Username or email" : "Nom d'utilisateur ou e-mail",
+ "Username or email" : "Nom d'utilisateur ou adresse de courriel",
"Wrong password. Reset it?" : "Mot de passe incorrect. Réinitialiser ?",
"Wrong password." : "Mot de passe incorrect.",
"Log in" : "Se connecter",
@@ -279,7 +281,7 @@
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Afin d'éviter les timeouts avec les installations de volume conséquent, vous pouvez exécuter la commande suivante depuis le répertoire d'installation :",
"Detailed logs" : "Journaux détaillés",
"Update needed" : "Mise à jour nécessaire",
- "Please use the command line updater because you have a big instance." : "Veuillez utiliser la mise à jour en ligne de commande, votre instance est trop volumineuse.",
+ "Please use the command line updater because you have a big instance." : "Veuillez utiliser la mise à jour en ligne de commande car votre instance est volumineuse.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Pour obtenir de l'aide, lisez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>.",
"This %s instance is currently in maintenance mode, which may take a while." : "Cette instance de %s est en cours de maintenance, cela peut prendre du temps.",
"This page will refresh itself when the %s instance is available again." : "Cette page se rafraîchira d'elle-même lorsque l'instance %s sera à nouveau disponible.",
@@ -336,9 +338,9 @@
"Oct." : "Oct.",
"Nov." : "Nov.",
"Dec." : "Déc.",
- "This server has no working Internet connection. 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." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
+ "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?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
+ "This server has no working Internet connection. 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." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par courriel peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "Allow editing" : "Permettre la modification",
"Hide file listing" : "Cacher la liste des fichiers",
"Sending ..." : "Envoi…",
"Email sent" : "Courriel envoyé",
@@ -355,7 +357,7 @@
"Share with users or remote users…" : "Partager avec des utilisateurs ou des utilisateurs distants...",
"Warning" : "Attention",
"Error while sending notification" : "Erreur lors de l'envoi de la notification",
- "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "La mise à jour est en cours, quitter la page peux interrompre le processus dans beaucoup d'environnements.",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "La mise à jour est en cours, quitter la page peux interrompre le processus dans certains d'environnements.",
"Updating to {version}" : "Mise à jour vers {version}",
"The update was successful. There were warnings." : "La mise à jour a été faite avec succès. Il y a eu des avertissements.",
"No search results in other folders" : "Aucun résultat dans d'autres dossiers",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "La sécurité renforcée a été activée pour votre compte. Veuillez vous authentifier en utilisant un second facteur.",
"Cancel login" : "Annuler la connexion",
"Please authenticate using the selected factor." : "Veuillez vous authentifier en utilisant le second facteur.",
- "An error occured while verifying the token" : "Une erreur est survenue lors de la vérification du jeton",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Votre serveur web nest pas configuré correctement pour résoudre \"{url}\". Plus d'informations peuvent être trouvées sur notre <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Pas de mémoire cache configuré. Pour améliorer les performance merci ce configurer un memcache si disponible. Plus d'informations peuvent être trouvées sur notre <a target=\"_blank\" href=\"{docLink}\">documentation</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom n'est pas lisible par PHP ce qui est hautement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées sur notre <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Vous exécutez actuellement PHP {version}. Nous vous encourageons de mettre a jour votre version de PHP pour avoir les avantages de <a target=\"_blank\" href=\"{phpLink}\">performance et sécurités donné par les mise à jours de sécurités par le gourpe PHP</a> tant que votre distribution les supportes.",
- "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\" href=\"{docLink}\">documentation</a>." : "La configuration des entêtes du proxy inverse est incorrecte, ou vous accédez à Nextcloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à Nextcloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant d'usurper l'adresse IP affichée à Nextcloud. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.",
- "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached est configuré comme cache distribué, mais le mauvais module PHP \"memcache\" est installé. \\OC\\Memcache\\Memcached est le seul a supporter \"memcached\" et non \"memcache\". Regardez le <a target=\"_blank\" href=\"{wikiLink}\">wiki a propos des modules memcached</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Plusieurs fichiers n'ont pas passé le test d'intégrité. Plus d'informations pour résoudre ce problème peuvent être trouvé sur notre <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste des fichiers invalides.../a> / <a href=\"{rescanEndpoint}\">Réanalyser...</a>)",
- "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}\">security tips</a>." : "L'entête HTTP \"Strict-Transport-Security\" n'est pas configuré pour les dernières \"{seconds}\" secondes. Pour améliorer votre sécurité nous recommandons d'activer HSTS comme décrit dans notre <a href=\"{docUrl}\">aide de sécurité</a>.",
- "An error occured. Please try again" : "Une erreur est survenue. Merci d'essayer à nouveau",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partagez avec des personnes sur d'autres ownClouds en utilisant la syntaxe utilisateur@exemple.com/owncloud",
- "not assignable" : "non assignable",
- "Updating {productName} to version {version}, this may take a while." : "Mise à jour de {productName} vers la version {version}, cela peut prendre du temps.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "POur des informations sur comment configurer proprement votre serveur, merci de regarder la <a href=\"%s\" target=\"_blank\">documentation</a>.",
- "An internal error occured." : "Une erreur interne est survenue."
+ "An error occured while verifying the token" : "Une erreur est survenue lors de la vérification du jeton"
},"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 cd2be37a9e6..8212568973e 100644
--- a/core/l10n/he.js
+++ b/core/l10n/he.js
@@ -52,7 +52,6 @@ OC.L10N.register(
"Cancel" : "ביטול",
"seconds ago" : "שניות",
"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. 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 />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?",
"I know what I'm doing" : "אני יודע/ת מה אני עושה",
"Password can not be changed. Please contact your administrator." : "לא ניתן לשנות את הסיסמא. יש לפנות למנהל שלך.",
"No" : "לא",
@@ -104,6 +103,7 @@ OC.L10N.register(
"Share link" : "קישור לשיתוף",
"Link" : "קישור",
"Password protect" : "הגנה בססמה",
+ "Allow editing" : "אישור עריכה",
"Email link to person" : "שליחת קישור בדוא״ל למשתמש",
"Send" : "שליחה",
"Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} שבבעלות {owner}",
@@ -197,8 +197,8 @@ OC.L10N.register(
"Need help?" : "עזרה נזקקת?",
"See the documentation" : "יש לצפות במסמכי התיעוד",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "יישום זה דורש JavaScript לפעולה נכונה. יש {linkstart}לאפשר JavaScript{linkend} ולטעון את העמוד מחדש.",
- "Log out" : "התנתקות",
"Search" : "חיפוש",
+ "Log out" : "התנתקות",
"Server side authentication failed!" : "אימות לצד שרת נכשל!",
"Please contact your administrator." : "יש ליצור קשר עם המנהל.",
"An internal error occurred." : "אירעה שגיאה פנימית.",
@@ -289,8 +289,8 @@ OC.L10N.register(
"Oct." : "אוק׳",
"Nov." : "נוב׳",
"Dec." : "דצמ׳",
+ "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 />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "תצורת כותרות פרוקסי ההפוכה אינה נכונה, או שהגישה ל- ownCloud מתבצעת מ- proxy אמין. אם הגישה ל- ownCloud אינה מ- proxy אמין, מדובר בבעיית אבטחה שמאפשרת לתוקף לזייף את כתובת ה- IP כגלויה ל- ownCloud. מידע נוסף ניתן למצוא ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">מסמכי התיעוד</a> שלנו.",
- "Allow editing" : "אישור עריכה",
"Sending ..." : "מתבצעת שליחה ...",
"Email sent" : "הודעת הדוא״ל נשלחה",
"Send link via email" : "שליחת קישור באמצעות דואר אלקטרוני",
@@ -311,7 +311,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "אבטחה מורחבת הופעלה בחשבון שלך. יש לאמת באמצעות גורם שני.",
"Cancel login" : "ביטול התחברות",
"Please authenticate using the selected factor." : "יש לאמת באמצעות גורם נבחר.",
- "An error occured while verifying the token" : "שגיאה אירעה בזמן אימות המחרוזת",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "ניתן לשתף עם אנשים אחרים המשתמשים ב- ownClouds בעזרת הפורמט הבא username@example.com/owncloud"
+ "An error occured while verifying the token" : "שגיאה אירעה בזמן אימות המחרוזת"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/he.json b/core/l10n/he.json
index ef5bb2140d5..60e70973ebe 100644
--- a/core/l10n/he.json
+++ b/core/l10n/he.json
@@ -50,7 +50,6 @@
"Cancel" : "ביטול",
"seconds ago" : "שניות",
"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. 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 />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?",
"I know what I'm doing" : "אני יודע/ת מה אני עושה",
"Password can not be changed. Please contact your administrator." : "לא ניתן לשנות את הסיסמא. יש לפנות למנהל שלך.",
"No" : "לא",
@@ -102,6 +101,7 @@
"Share link" : "קישור לשיתוף",
"Link" : "קישור",
"Password protect" : "הגנה בססמה",
+ "Allow editing" : "אישור עריכה",
"Email link to person" : "שליחת קישור בדוא״ל למשתמש",
"Send" : "שליחה",
"Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} שבבעלות {owner}",
@@ -195,8 +195,8 @@
"Need help?" : "עזרה נזקקת?",
"See the documentation" : "יש לצפות במסמכי התיעוד",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "יישום זה דורש JavaScript לפעולה נכונה. יש {linkstart}לאפשר JavaScript{linkend} ולטעון את העמוד מחדש.",
- "Log out" : "התנתקות",
"Search" : "חיפוש",
+ "Log out" : "התנתקות",
"Server side authentication failed!" : "אימות לצד שרת נכשל!",
"Please contact your administrator." : "יש ליצור קשר עם המנהל.",
"An internal error occurred." : "אירעה שגיאה פנימית.",
@@ -287,8 +287,8 @@
"Oct." : "אוק׳",
"Nov." : "נוב׳",
"Dec." : "דצמ׳",
+ "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 />אם אין לך מושג מה לעשות what to do, מוטב לפנות למנהל שלך לפני ההמשך. <br />האם באמת ברצונך להמשיך?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "תצורת כותרות פרוקסי ההפוכה אינה נכונה, או שהגישה ל- ownCloud מתבצעת מ- proxy אמין. אם הגישה ל- ownCloud אינה מ- proxy אמין, מדובר בבעיית אבטחה שמאפשרת לתוקף לזייף את כתובת ה- IP כגלויה ל- ownCloud. מידע נוסף ניתן למצוא ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">מסמכי התיעוד</a> שלנו.",
- "Allow editing" : "אישור עריכה",
"Sending ..." : "מתבצעת שליחה ...",
"Email sent" : "הודעת הדוא״ל נשלחה",
"Send link via email" : "שליחת קישור באמצעות דואר אלקטרוני",
@@ -309,7 +309,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "אבטחה מורחבת הופעלה בחשבון שלך. יש לאמת באמצעות גורם שני.",
"Cancel login" : "ביטול התחברות",
"Please authenticate using the selected factor." : "יש לאמת באמצעות גורם נבחר.",
- "An error occured while verifying the token" : "שגיאה אירעה בזמן אימות המחרוזת",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "ניתן לשתף עם אנשים אחרים המשתמשים ב- ownClouds בעזרת הפורמט הבא username@example.com/owncloud"
+ "An error occured while verifying the token" : "שגיאה אירעה בזמן אימות המחרוזת"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index a0059ea4d62..5a8251eb0bb 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -60,7 +60,6 @@ OC.L10N.register(
"seconds ago" : "pár másodperce",
"Logging in …" : "Bejelentkezés ...",
"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." : "A jelszó visszaállításához a hivatkozást e-mailben elküldtük. Ha a levél elfogadható időn belül nem érkezik meg, ellenőrizze a spam/levélszemét mappát.<br>Ha nincs ott, kérdezze meg a helyi rendszergazdát.",
- "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?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?",
"I know what I'm doing" : "Tudom mit csinálok.",
"Password can not be changed. Please contact your administrator." : "A jelszót nem lehet visszaállítani. Kérjük, lépjen kapcsolatba a redszergazdával.",
"No" : "Nem",
@@ -122,6 +121,7 @@ OC.L10N.register(
"Link" : "Hivatkozás",
"Password protect" : "Jelszóval védett",
"Allow upload and editing" : "Feltöltés és szerkesztés engedélyezése",
+ "Allow editing" : "Szerkesztés engedélyezése",
"File drop (upload only)" : "Fájl ejtés (csak feltöltés)",
"Email link to person" : "Hivatkozás elküldése e-mail címre",
"Send" : "Küldés",
@@ -230,6 +230,7 @@ OC.L10N.register(
"Database name" : "Az adatbázis neve",
"Database tablespace" : "Az adatbázis táblázattér (tablespace)",
"Database host" : "Adatbázis szerver",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Kérlek add meg a port számát a kiszolgáló neve után (pl: localhost:5432).",
"Performance warning" : "Teljesítménybeli figyelmeztetés",
"SQLite will be used as database." : "SQLite lesz adatbázisként használva.",
"For larger installations we recommend to choose a different database backend." : "Nagyobb telepítésekhez ajánlott egy másik adatbázis háttérkiszolgáló használata.",
@@ -239,8 +240,8 @@ OC.L10N.register(
"Need help?" : "Segítségre van szüksége?",
"See the documentation" : "Nézze meg a dokumentációt",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Az alkalmazás megfelelő működéséhez JavaScript szükséges. Kérjük, {linkstart}engedélyezze a JavaScript-et{linkend} és frissítse a lapot.",
- "Log out" : "Kijelentkezés",
"Search" : "Keresés",
+ "Log out" : "Kijelentkezés",
"This action requires you to confirm your password:" : "A művelethez szükség van a jelszavad megerősítésére:",
"Confirm your password" : "Erősítsd meg a jelszavad:",
"Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!",
@@ -338,9 +339,9 @@ OC.L10N.register(
"Oct." : "okt.",
"Nov." : "nov.",
"Dec." : "dec.",
+ "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?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?",
"This server has no working Internet connection. 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." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálja az ownCloud-ot elérni. Ha nem megbízható proxy-ból próbálja elérni az ownCloud-ot, akkor ez egy biztonsági probléma, a támadó az ownCloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
- "Allow editing" : "Szerkesztés engedélyezése",
"Hide file listing" : "Fájl lista elrejtése",
"Sending ..." : "Küldés ...",
"Email sent" : "Az e-mailt elküldtük!",
@@ -365,20 +366,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "A fokozott biztonság engedélyezve lett a fiókod számára. Kérlek hitelesítsd egy második faktor használatával.",
"Cancel login" : "Bejelentkezés megszakítása",
"Please authenticate using the selected factor." : "Kérlek hitelesítsd a kiválasztott faktor használatával.",
- "An error occured while verifying the token" : "Hiba történt a token ellenőrzése közben",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "A webszer nincs megfelelően beállítva a következő feloldására: \"{url}\". További információkat a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
- "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\" href=\"{docLink}\">documentation</a>." : "Nincs memória gyorsítótár beállítva. A teljesítmény növelése érdekében kérlek állítd be a memcache-t, ha elérhető. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom nem olvasható a PHP számára, ami biztonsági okokból nem javasolt.. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Jelenleg {version} PHP verziót futtatsz. Javasoljuk, hogy amilyen hamar a disztribúciód támogatja, frissítsd a PHP verziót, hogy kihasználhasd a <a target=\"_blank\" href=\"{phpLink}\">teljesítménybeli és a biztonságbeli előnyöket, amiket a PHP Group kínál</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\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálod a Nextcloudot elérni. Ha nem megbízható proxy-ból próbálod elérni az Nextcloudot, akkor ez egy biztonsági probléma, a támadó az Nextcloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találhatsz.",
- "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "A memcached be van konfigurálva gyorsítótárnak, de rossz \"memcache\" PHP modul van telepítve. \\OC\\Memcache\\Memcached csak a \"memcached\"-t támogatja, és nem a \"memcache\"-t. Kérlek, nézd meg a <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki oldalt a modulokkal kapcsolatban</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Néhány fájl nem felelt meg az integritás ellenőrzésen. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találhatsz. (<a href=\"{codeIntegrityDownloadEndpoint}\">Érvénytelen fájlok listája…</a> / <a href=\"{rescanEndpoint}\">Újra ellenőrzés…</a>)",
- "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}\">security tips</a>." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezd a HSTS, ahogyan ezt részletezzük a <a href=\"{docUrl}\">biztonsági tippek</a> dokumentációban.",
- "An error occured. Please try again" : "Hiba történt. Kérjük, próbálja újra!",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Megosztás más ownCloud szerverekkel, a következő formátum használatával felhasználó@példa.hu/owncloud",
- "not assignable" : "nem hozzárendelhető",
- "Updating {productName} to version {version}, this may take a while." : "{productName} frissítése erre a verzióra: {version}, ez eltarthat egy ideig.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A szerver megfelelő beállításához kérjük olvasd el a <a href=\"%s\" target=\"_blank\">dokumentációt</a>.",
- "An internal error occured." : "Belső hiba történt."
+ "An error occured while verifying the token" : "Hiba történt a token ellenőrzése közben"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index 22cafb988d4..a3c1cab9276 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -58,7 +58,6 @@
"seconds ago" : "pár másodperce",
"Logging in …" : "Bejelentkezés ...",
"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." : "A jelszó visszaállításához a hivatkozást e-mailben elküldtük. Ha a levél elfogadható időn belül nem érkezik meg, ellenőrizze a spam/levélszemét mappát.<br>Ha nincs ott, kérdezze meg a helyi rendszergazdát.",
- "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?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?",
"I know what I'm doing" : "Tudom mit csinálok.",
"Password can not be changed. Please contact your administrator." : "A jelszót nem lehet visszaállítani. Kérjük, lépjen kapcsolatba a redszergazdával.",
"No" : "Nem",
@@ -120,6 +119,7 @@
"Link" : "Hivatkozás",
"Password protect" : "Jelszóval védett",
"Allow upload and editing" : "Feltöltés és szerkesztés engedélyezése",
+ "Allow editing" : "Szerkesztés engedélyezése",
"File drop (upload only)" : "Fájl ejtés (csak feltöltés)",
"Email link to person" : "Hivatkozás elküldése e-mail címre",
"Send" : "Küldés",
@@ -228,6 +228,7 @@
"Database name" : "Az adatbázis neve",
"Database tablespace" : "Az adatbázis táblázattér (tablespace)",
"Database host" : "Adatbázis szerver",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Kérlek add meg a port számát a kiszolgáló neve után (pl: localhost:5432).",
"Performance warning" : "Teljesítménybeli figyelmeztetés",
"SQLite will be used as database." : "SQLite lesz adatbázisként használva.",
"For larger installations we recommend to choose a different database backend." : "Nagyobb telepítésekhez ajánlott egy másik adatbázis háttérkiszolgáló használata.",
@@ -237,8 +238,8 @@
"Need help?" : "Segítségre van szüksége?",
"See the documentation" : "Nézze meg a dokumentációt",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Az alkalmazás megfelelő működéséhez JavaScript szükséges. Kérjük, {linkstart}engedélyezze a JavaScript-et{linkend} és frissítse a lapot.",
- "Log out" : "Kijelentkezés",
"Search" : "Keresés",
+ "Log out" : "Kijelentkezés",
"This action requires you to confirm your password:" : "A művelethez szükség van a jelszavad megerősítésére:",
"Confirm your password" : "Erősítsd meg a jelszavad:",
"Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!",
@@ -336,9 +337,9 @@
"Oct." : "okt.",
"Nov." : "nov.",
"Dec." : "dec.",
+ "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?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?",
"This server has no working Internet connection. 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." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálja az ownCloud-ot elérni. Ha nem megbízható proxy-ból próbálja elérni az ownCloud-ot, akkor ez egy biztonsági probléma, a támadó az ownCloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
- "Allow editing" : "Szerkesztés engedélyezése",
"Hide file listing" : "Fájl lista elrejtése",
"Sending ..." : "Küldés ...",
"Email sent" : "Az e-mailt elküldtük!",
@@ -363,20 +364,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "A fokozott biztonság engedélyezve lett a fiókod számára. Kérlek hitelesítsd egy második faktor használatával.",
"Cancel login" : "Bejelentkezés megszakítása",
"Please authenticate using the selected factor." : "Kérlek hitelesítsd a kiválasztott faktor használatával.",
- "An error occured while verifying the token" : "Hiba történt a token ellenőrzése közben",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "A webszer nincs megfelelően beállítva a következő feloldására: \"{url}\". További információkat a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
- "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\" href=\"{docLink}\">documentation</a>." : "Nincs memória gyorsítótár beállítva. A teljesítmény növelése érdekében kérlek állítd be a memcache-t, ha elérhető. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom nem olvasható a PHP számára, ami biztonsági okokból nem javasolt.. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Jelenleg {version} PHP verziót futtatsz. Javasoljuk, hogy amilyen hamar a disztribúciód támogatja, frissítsd a PHP verziót, hogy kihasználhasd a <a target=\"_blank\" href=\"{phpLink}\">teljesítménybeli és a biztonságbeli előnyöket, amiket a PHP Group kínál</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\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálod a Nextcloudot elérni. Ha nem megbízható proxy-ból próbálod elérni az Nextcloudot, akkor ez egy biztonsági probléma, a támadó az Nextcloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találhatsz.",
- "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "A memcached be van konfigurálva gyorsítótárnak, de rossz \"memcache\" PHP modul van telepítve. \\OC\\Memcache\\Memcached csak a \"memcached\"-t támogatja, és nem a \"memcache\"-t. Kérlek, nézd meg a <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki oldalt a modulokkal kapcsolatban</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Néhány fájl nem felelt meg az integritás ellenőrzésen. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találhatsz. (<a href=\"{codeIntegrityDownloadEndpoint}\">Érvénytelen fájlok listája…</a> / <a href=\"{rescanEndpoint}\">Újra ellenőrzés…</a>)",
- "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}\">security tips</a>." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezd a HSTS, ahogyan ezt részletezzük a <a href=\"{docUrl}\">biztonsági tippek</a> dokumentációban.",
- "An error occured. Please try again" : "Hiba történt. Kérjük, próbálja újra!",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Megosztás más ownCloud szerverekkel, a következő formátum használatával felhasználó@példa.hu/owncloud",
- "not assignable" : "nem hozzárendelhető",
- "Updating {productName} to version {version}, this may take a while." : "{productName} frissítése erre a verzióra: {version}, ez eltarthat egy ideig.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A szerver megfelelő beállításához kérjük olvasd el a <a href=\"%s\" target=\"_blank\">dokumentációt</a>.",
- "An internal error occured." : "Belső hiba történt."
+ "An error occured while verifying the token" : "Hiba történt a token ellenőrzése közben"
},"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 ff07a789159..2ed3768d6a4 100644
--- a/core/l10n/id.js
+++ b/core/l10n/id.js
@@ -3,6 +3,8 @@ OC.L10N.register(
{
"Please select a file." : "Pilih berkas",
"File is too big" : "Berkas terlalu besar",
+ "The selected file is not an image." : "Berkas yang dipilih bukanlah sebuah gambar.",
+ "The selected file cannot be read." : "Berkas yang dipilih tidak bisa dibaca.",
"Invalid file provided" : "Berkas yang diberikan tidak sah",
"No image or file provided" : "Tidak ada gambar atau berkas yang disediakan",
"Unknown filetype" : "Tipe berkas tidak dikenal",
@@ -45,18 +47,24 @@ OC.L10N.register(
"Already up to date" : "Sudah yang terbaru",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Ada permasalahan dengan pengecekan integrasi kode. Informasi selanjutnya…</a>",
"Settings" : "Pengaturan",
+ "Connection to server lost" : "Koneksi ke server gagal",
"Problem loading page, reloading in 5 seconds" : "Terjadi masalah dalam memuat laman, mencoba lagi dalam 5 detik",
"Saving..." : "Menyimpan...",
"Dismiss" : "Buang",
+ "This action requires you to confirm your password" : "Aksi ini membutuhkan konfirmasi kata sandi Anda",
+ "Authentication required" : "Diperlukan otentikasi",
"Password" : "Sandi",
"Cancel" : "Batal",
+ "Confirm" : "Konfirmasi",
+ "Failed to authenticate, try again" : "Gagal mengotentikasi, coba lagi",
"seconds ago" : "beberapa detik yang lalu",
+ "Logging in …" : "Log masuk...",
"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." : "Sebuah tautan untuk setel ulang sandi Anda telah dikirim ke email Anda. Jika Anda tidak menerima dalam jangka waktu yang wajar, periksa folder spam/sampah Anda.<br>Jika tidak ada, tanyakan pada administrator Anda.",
- "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?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"I know what I'm doing" : "Saya tahu apa yang saya lakukan",
"Password can not be changed. Please contact your administrator." : "Sandi tidak dapat diubah. Silakan hubungi administrator Anda",
"No" : "Tidak",
"Yes" : "Ya",
+ "No files in here" : "Tidak ada berkas disini",
"Choose" : "Pilih",
"Error loading file picker template: {error}" : "Kesalahan saat memuat templat berkas pemilih: {error}",
"Ok" : "Oke",
@@ -72,6 +80,7 @@ OC.L10N.register(
"(all selected)" : "(semua terpilih)",
"({count} selected)" : "({count} terpilih)",
"Error loading file exists template" : "Kesalahan memuat templat berkas yang sudah ada",
+ "Pending" : "Terutnda",
"Very weak password" : "Sandi sangat lemah",
"Weak password" : "Sandi lemah",
"So-so password" : "Sandi lumayan",
@@ -83,6 +92,7 @@ OC.L10N.register(
"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>." : "Tidak ada memory cache telah dikonfigurasi. Untuk meningkatkan kinerja, mohon mengkonfigurasi memcache jika tersedia. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
"/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 tidak bisa dibaca oleh PHP dan sangat tidak disarankan untuk alasan keamanan. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
"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." : "Anda sekarang menjalankan PHP {version}. Kami menyarankan Anda untuk perbarui versi PHP Anda untuk memanfaatkan <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performa dan pembaruan keamanan yang disediakan oleh PHP Group</a> saat distribusi Anda mendukungnya.",
+ "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>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses Nextcloud dari proxy terpercaya. Apabila Anda tidak mengakses Nextcloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke Nextcloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
"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 terkonfigurasi sebagai cache terdistribusi, tetapi modul PHP \"memcache\" yang salah terpasang. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" dan bukan \"memcache\". Lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki memcached tentang kedua modul</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>)" : "Beberapa berkas tidak lulus cek integritas. Informasi lebih lanjut tentang cara mengatasi masalah ini dapat ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami. (<a href=\"{codeIntegrityDownloadEndpoint}\">Daftar berkas yang tidak valid…</a> / <a href=\"{rescanEndpoint}\">Pindai ulang…</a>)",
"Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server",
@@ -102,6 +112,7 @@ OC.L10N.register(
"Expiration date" : "Tanggal kedaluwarsa",
"Choose a password for the public link" : "Tetapkan sandi untuk tautan publik",
"Copied!" : "Tersalin!",
+ "Copy" : "Salin",
"Not supported!" : "Tidak didukung!",
"Press ⌘-C to copy." : "Tekan ⌘-C untuk menyalin.",
"Press Ctrl-C to copy." : "Tekan Ctrl-C untuk menyalin.",
@@ -109,6 +120,8 @@ OC.L10N.register(
"Share link" : "Bagikan tautan",
"Link" : "Tautan",
"Password protect" : "Lindungi dengan sandi",
+ "Allow upload and editing" : "Izinkan pengunggahan dan penyuntingan",
+ "Allow editing" : "Izinkan penyuntingan",
"Email link to person" : "Emailkan tautan ini ke orang",
"Send" : "Kirim",
"Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}",
@@ -207,8 +220,8 @@ OC.L10N.register(
"Need help?" : "Butuh bantuan?",
"See the documentation" : "Lihat dokumentasi",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikasi ini memerlukan JavaScript untuk dapat beroperasi dengan benar. Mohon {linkstart}aktifkan JavaScript{linkend} dan muat ulang halaman ini.",
- "Log out" : "Keluar",
"Search" : "Cari",
+ "Log out" : "Keluar",
"Server side authentication failed!" : "Otentikasi dari sisi server gagal!",
"Please contact your administrator." : "Silahkan hubungi administrator anda.",
"An internal error occurred." : "Terjadi kesalahan internal.",
@@ -299,9 +312,9 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Des.",
+ "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?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"This server has no working Internet connection. 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." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses ownCloud dari proxy terpercaya. Apabila Anda tidak mengakses ownCloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke ownCloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
- "Allow editing" : "Izinkan penyuntingan",
"Hide file listing" : "Sembunyikan pendaftaran berkas",
"Sending ..." : "Mengirim ...",
"Email sent" : "Email terkirim",
@@ -326,20 +339,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Peningkatan keamanan delah diaktifkan untuk akun Anda. Mohon otentikasi menggunakan faktor kedua.",
"Cancel login" : "Batalkan log masuk",
"Please authenticate using the selected factor." : "Mohon lakukan otentikasi dengan faktor ke dua.",
- "An error occured while verifying the token" : "Terjadi kesalahan saat memverifikasi token",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Server web Anda tidak diatur secara baik untuk menyelesaikan \"{url}\". Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.",
- "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\" href=\"{docLink}\">documentation</a>." : "Tidak ada memory cache telah dikonfigurasi. Untuk meningkatkan kinerja, mohon mengkonfigurasi memcache jika tersedia. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom tidak bisa dibaca oleh PHP dan sangat tidak disarankan untuk alasan keamanan. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Anda sekarang menjalankan PHP {version}. Kami menyarankan Anda untuk perbarui versi PHP Anda untuk memanfaatkan <a target=\"_blank\" href=\"{phpLink}\">performa dan pembaruan keamanan yang disediakan oleh PHP Group</a> saat distribusi Anda mendukungnya.",
- "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\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses Nextcloud dari proxy terpercaya. Apabila Anda tidak mengakses Nextcloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke Nextcloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.",
- "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached terkonfigurasi sebagai cache terdistribusi, tetapi modul PHP \"memcache\" yang salah terpasang. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" dan bukan \"memcache\". Lihat <a target=\"_blank\" href=\"{wikiLink}\">wiki memcached tentang kedua modul</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Beberapa berkas tidak lulus cek integritas. Informasi lebih lanjut tentang cara mengatasi masalah ini dapat ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami. (<a href=\"{codeIntegrityDownloadEndpoint}\">Daftar berkas yang tidak valid…</a> / <a href=\"{rescanEndpoint}\">Pindai ulang…</a>)",
- "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}\">security tips</a>." : "Header \"Strict-Transport-Security\" HTTP tidak terkonfigurasi ke setidaknya \"{seconds}\" detik. Untuk meningkatkan kemanan kami merekomendasikan mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\">saran keamanan</a> kami.",
- "An error occured. Please try again" : "Terjadi kesalahan. Silakan coba lagi",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Bagikan dengan orang lain di ownCloud menggunakan sintaks username@example.com/owncloud",
- "not assignable" : "tidak dapat disematkan",
- "Updating {productName} to version {version}, this may take a while." : "Memperbarui {productName} ke versi {version}, ini dapat memakan waktu.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi bagaimana menkonfigurasi server Anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.",
- "An internal error occured." : "Terjadi kesalahan internal."
+ "An error occured while verifying the token" : "Terjadi kesalahan saat memverifikasi token"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/id.json b/core/l10n/id.json
index 5ad2ce37327..dd562e7d9b1 100644
--- a/core/l10n/id.json
+++ b/core/l10n/id.json
@@ -1,6 +1,8 @@
{ "translations": {
"Please select a file." : "Pilih berkas",
"File is too big" : "Berkas terlalu besar",
+ "The selected file is not an image." : "Berkas yang dipilih bukanlah sebuah gambar.",
+ "The selected file cannot be read." : "Berkas yang dipilih tidak bisa dibaca.",
"Invalid file provided" : "Berkas yang diberikan tidak sah",
"No image or file provided" : "Tidak ada gambar atau berkas yang disediakan",
"Unknown filetype" : "Tipe berkas tidak dikenal",
@@ -43,18 +45,24 @@
"Already up to date" : "Sudah yang terbaru",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Ada permasalahan dengan pengecekan integrasi kode. Informasi selanjutnya…</a>",
"Settings" : "Pengaturan",
+ "Connection to server lost" : "Koneksi ke server gagal",
"Problem loading page, reloading in 5 seconds" : "Terjadi masalah dalam memuat laman, mencoba lagi dalam 5 detik",
"Saving..." : "Menyimpan...",
"Dismiss" : "Buang",
+ "This action requires you to confirm your password" : "Aksi ini membutuhkan konfirmasi kata sandi Anda",
+ "Authentication required" : "Diperlukan otentikasi",
"Password" : "Sandi",
"Cancel" : "Batal",
+ "Confirm" : "Konfirmasi",
+ "Failed to authenticate, try again" : "Gagal mengotentikasi, coba lagi",
"seconds ago" : "beberapa detik yang lalu",
+ "Logging in …" : "Log masuk...",
"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." : "Sebuah tautan untuk setel ulang sandi Anda telah dikirim ke email Anda. Jika Anda tidak menerima dalam jangka waktu yang wajar, periksa folder spam/sampah Anda.<br>Jika tidak ada, tanyakan pada administrator Anda.",
- "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?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"I know what I'm doing" : "Saya tahu apa yang saya lakukan",
"Password can not be changed. Please contact your administrator." : "Sandi tidak dapat diubah. Silakan hubungi administrator Anda",
"No" : "Tidak",
"Yes" : "Ya",
+ "No files in here" : "Tidak ada berkas disini",
"Choose" : "Pilih",
"Error loading file picker template: {error}" : "Kesalahan saat memuat templat berkas pemilih: {error}",
"Ok" : "Oke",
@@ -70,6 +78,7 @@
"(all selected)" : "(semua terpilih)",
"({count} selected)" : "({count} terpilih)",
"Error loading file exists template" : "Kesalahan memuat templat berkas yang sudah ada",
+ "Pending" : "Terutnda",
"Very weak password" : "Sandi sangat lemah",
"Weak password" : "Sandi lemah",
"So-so password" : "Sandi lumayan",
@@ -81,6 +90,7 @@
"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>." : "Tidak ada memory cache telah dikonfigurasi. Untuk meningkatkan kinerja, mohon mengkonfigurasi memcache jika tersedia. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
"/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 tidak bisa dibaca oleh PHP dan sangat tidak disarankan untuk alasan keamanan. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
"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." : "Anda sekarang menjalankan PHP {version}. Kami menyarankan Anda untuk perbarui versi PHP Anda untuk memanfaatkan <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performa dan pembaruan keamanan yang disediakan oleh PHP Group</a> saat distribusi Anda mendukungnya.",
+ "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>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses Nextcloud dari proxy terpercaya. Apabila Anda tidak mengakses Nextcloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke Nextcloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
"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 terkonfigurasi sebagai cache terdistribusi, tetapi modul PHP \"memcache\" yang salah terpasang. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" dan bukan \"memcache\". Lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki memcached tentang kedua modul</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>)" : "Beberapa berkas tidak lulus cek integritas. Informasi lebih lanjut tentang cara mengatasi masalah ini dapat ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami. (<a href=\"{codeIntegrityDownloadEndpoint}\">Daftar berkas yang tidak valid…</a> / <a href=\"{rescanEndpoint}\">Pindai ulang…</a>)",
"Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server",
@@ -100,6 +110,7 @@
"Expiration date" : "Tanggal kedaluwarsa",
"Choose a password for the public link" : "Tetapkan sandi untuk tautan publik",
"Copied!" : "Tersalin!",
+ "Copy" : "Salin",
"Not supported!" : "Tidak didukung!",
"Press ⌘-C to copy." : "Tekan ⌘-C untuk menyalin.",
"Press Ctrl-C to copy." : "Tekan Ctrl-C untuk menyalin.",
@@ -107,6 +118,8 @@
"Share link" : "Bagikan tautan",
"Link" : "Tautan",
"Password protect" : "Lindungi dengan sandi",
+ "Allow upload and editing" : "Izinkan pengunggahan dan penyuntingan",
+ "Allow editing" : "Izinkan penyuntingan",
"Email link to person" : "Emailkan tautan ini ke orang",
"Send" : "Kirim",
"Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}",
@@ -205,8 +218,8 @@
"Need help?" : "Butuh bantuan?",
"See the documentation" : "Lihat dokumentasi",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikasi ini memerlukan JavaScript untuk dapat beroperasi dengan benar. Mohon {linkstart}aktifkan JavaScript{linkend} dan muat ulang halaman ini.",
- "Log out" : "Keluar",
"Search" : "Cari",
+ "Log out" : "Keluar",
"Server side authentication failed!" : "Otentikasi dari sisi server gagal!",
"Please contact your administrator." : "Silahkan hubungi administrator anda.",
"An internal error occurred." : "Terjadi kesalahan internal.",
@@ -297,9 +310,9 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Des.",
+ "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?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"This server has no working Internet connection. 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." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses ownCloud dari proxy terpercaya. Apabila Anda tidak mengakses ownCloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke ownCloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.",
- "Allow editing" : "Izinkan penyuntingan",
"Hide file listing" : "Sembunyikan pendaftaran berkas",
"Sending ..." : "Mengirim ...",
"Email sent" : "Email terkirim",
@@ -324,20 +337,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Peningkatan keamanan delah diaktifkan untuk akun Anda. Mohon otentikasi menggunakan faktor kedua.",
"Cancel login" : "Batalkan log masuk",
"Please authenticate using the selected factor." : "Mohon lakukan otentikasi dengan faktor ke dua.",
- "An error occured while verifying the token" : "Terjadi kesalahan saat memverifikasi token",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Server web Anda tidak diatur secara baik untuk menyelesaikan \"{url}\". Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.",
- "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\" href=\"{docLink}\">documentation</a>." : "Tidak ada memory cache telah dikonfigurasi. Untuk meningkatkan kinerja, mohon mengkonfigurasi memcache jika tersedia. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom tidak bisa dibaca oleh PHP dan sangat tidak disarankan untuk alasan keamanan. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Anda sekarang menjalankan PHP {version}. Kami menyarankan Anda untuk perbarui versi PHP Anda untuk memanfaatkan <a target=\"_blank\" href=\"{phpLink}\">performa dan pembaruan keamanan yang disediakan oleh PHP Group</a> saat distribusi Anda mendukungnya.",
- "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\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses Nextcloud dari proxy terpercaya. Apabila Anda tidak mengakses Nextcloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke Nextcloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.",
- "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached terkonfigurasi sebagai cache terdistribusi, tetapi modul PHP \"memcache\" yang salah terpasang. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" dan bukan \"memcache\". Lihat <a target=\"_blank\" href=\"{wikiLink}\">wiki memcached tentang kedua modul</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Beberapa berkas tidak lulus cek integritas. Informasi lebih lanjut tentang cara mengatasi masalah ini dapat ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami. (<a href=\"{codeIntegrityDownloadEndpoint}\">Daftar berkas yang tidak valid…</a> / <a href=\"{rescanEndpoint}\">Pindai ulang…</a>)",
- "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}\">security tips</a>." : "Header \"Strict-Transport-Security\" HTTP tidak terkonfigurasi ke setidaknya \"{seconds}\" detik. Untuk meningkatkan kemanan kami merekomendasikan mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\">saran keamanan</a> kami.",
- "An error occured. Please try again" : "Terjadi kesalahan. Silakan coba lagi",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Bagikan dengan orang lain di ownCloud menggunakan sintaks username@example.com/owncloud",
- "not assignable" : "tidak dapat disematkan",
- "Updating {productName} to version {version}, this may take a while." : "Memperbarui {productName} ke versi {version}, ini dapat memakan waktu.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi bagaimana menkonfigurasi server Anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.",
- "An internal error occured." : "Terjadi kesalahan internal."
+ "An error occured while verifying the token" : "Terjadi kesalahan saat memverifikasi token"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/is.js b/core/l10n/is.js
index 648a2b77e4b..ac8414d4cf8 100644
--- a/core/l10n/is.js
+++ b/core/l10n/is.js
@@ -52,7 +52,6 @@ OC.L10N.register(
"Cancel" : "Hætta við",
"seconds ago" : "sekúndum síðan",
"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." : "Tengillinn til að endurstilla lykilorðið þitt hefur verið sendur á netfangið þitt. Ef þú færð ekki póstinn innan hæfilegs tíma, athugaðu þá ruslpóstmöppuna.<br>Ef hann er ekki þar, spurðu þá kerfisstjórann þinn.",
- "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?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?",
"I know what I'm doing" : "Ég veit hvað ég er að gera",
"Password can not be changed. Please contact your administrator." : "Ekki er hægt að breyta lykilorði. Hafðu samband við kerfisstjóra.",
"No" : "Nei",
@@ -110,6 +109,7 @@ OC.L10N.register(
"Link" : "Tengill",
"Password protect" : "Verja með lykilorði",
"Allow upload and editing" : "Leyfa innsendingu og breytingar",
+ "Allow editing" : "Leyfa breytingar",
"Email link to person" : "Senda veftengil í tölvupósti til notanda",
"Send" : "Senda",
"Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}",
@@ -208,8 +208,8 @@ OC.L10N.register(
"Need help?" : "Þarftu hjálp?",
"See the documentation" : "Sjá hjálparskjölin",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Þetta forrit krefst JavaScript fyrir rétta virkni. {linkstart} virkjaðu JavaScript {linkend} og endurlestu síðan síðuna.",
- "Log out" : "Skrá út",
"Search" : "Leita",
+ "Log out" : "Skrá út",
"Server side authentication failed!" : "Auðkenning af hálfu þjóns tókst ekki!",
"Please contact your administrator." : "Hafðu samband við kerfisstjóra.",
"An internal error occurred." : "Innri villa kom upp.",
@@ -305,9 +305,9 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nóv.",
"Dec." : "Des.",
+ "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?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?",
"This server has no working Internet connection. 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." : "Þessi þjónn er ekki með virka nettengingu. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni. Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "Allow editing" : "Leyfa breytingar",
"Hide file listing" : "Fela skráalista",
"Sending ..." : "Sendi ...",
"Email sent" : "Tölvupóstur sendur",
@@ -332,20 +332,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Aukið öryggi var virkjað fyrir aðganginn þinn. Auðkenndu þig með aukaþrepi.",
"Cancel login" : "Hætta við innskráningu",
"Please authenticate using the selected factor." : "Auðkenndu þig með völdu þrepi.",
- "An error occured while verifying the token" : "Villa kom upp við að sannreyna teiknið",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Vefþjónninn þinn er ekki uppsettur þannig að hann geti leyst \"{url}\". Frekari upplýsingar er að finna í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "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\" href=\"{docLink}\">documentation</a>." : "Ekkert skyndiminni (cache) hefur verið stillt. Til að auka afköst ættirðu að setja upp skyndiminni (með memcache) ef það er tiltækt. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom er ekki lesanlegt af PHP sem er mjög óráðlegt af öryggisástæðum. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Þú ert að keyra PHP {version}. Við hvetjum þig til að uppfæra PHP útgáfuna til að njóta <a target=\"_blank\" href=\"{phpLink}\">afkastaaukningar og öryggisuppfærslna frá PHP Group</a> um leið og dreifingin þín styður þ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\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached er sett upp sem dreift skyndiminni, en hinsvegar er ranga PHP-einingin \"memcache\" uppsett. \\OC\\Memcache\\Memcached styður einungis \"memcached\" en ekki \"memcache\". Skoðaðu <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki-síðurnar um báðar einingarnar</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sumar skrár hafa ekki staðist áreiðanleikaprófun. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listi yfir ógildar skrár…</a> / <a href=\"{rescanEndpoint}\">Endurskanna…</a>)",
- "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}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP-hausinn er ekki stilltur á að minnsa kosti \"{seconds}\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningum</a>.",
- "An error occured. Please try again" : "Villa kom upp. Endilega reyndu aftur",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólki í öðrum Nextcloud-skýjum með skipuninni notandanafn@dæmi.is/nextcloud",
- "not assignable" : "ekki úthlutanlegt",
- "Updating {productName} to version {version}, this may take a while." : "Uppfæri {productName} í útgáfu {version}, þetta getur tekið smá stund.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Til að fá upplýsingar hvernig á að stilla miðlara almennilega, skaltu skoða <a href=\"%s\" target=\"_blank\">hjálparskjölin</a>.",
- "An internal error occured." : "Innri villa kom upp."
+ "An error occured while verifying the token" : "Villa kom upp við að sannreyna teiknið"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/core/l10n/is.json b/core/l10n/is.json
index 7cbd412daac..a389453cfc7 100644
--- a/core/l10n/is.json
+++ b/core/l10n/is.json
@@ -50,7 +50,6 @@
"Cancel" : "Hætta við",
"seconds ago" : "sekúndum síðan",
"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." : "Tengillinn til að endurstilla lykilorðið þitt hefur verið sendur á netfangið þitt. Ef þú færð ekki póstinn innan hæfilegs tíma, athugaðu þá ruslpóstmöppuna.<br>Ef hann er ekki þar, spurðu þá kerfisstjórann þinn.",
- "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?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?",
"I know what I'm doing" : "Ég veit hvað ég er að gera",
"Password can not be changed. Please contact your administrator." : "Ekki er hægt að breyta lykilorði. Hafðu samband við kerfisstjóra.",
"No" : "Nei",
@@ -108,6 +107,7 @@
"Link" : "Tengill",
"Password protect" : "Verja með lykilorði",
"Allow upload and editing" : "Leyfa innsendingu og breytingar",
+ "Allow editing" : "Leyfa breytingar",
"Email link to person" : "Senda veftengil í tölvupósti til notanda",
"Send" : "Senda",
"Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}",
@@ -206,8 +206,8 @@
"Need help?" : "Þarftu hjálp?",
"See the documentation" : "Sjá hjálparskjölin",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Þetta forrit krefst JavaScript fyrir rétta virkni. {linkstart} virkjaðu JavaScript {linkend} og endurlestu síðan síðuna.",
- "Log out" : "Skrá út",
"Search" : "Leita",
+ "Log out" : "Skrá út",
"Server side authentication failed!" : "Auðkenning af hálfu þjóns tókst ekki!",
"Please contact your administrator." : "Hafðu samband við kerfisstjóra.",
"An internal error occurred." : "Innri villa kom upp.",
@@ -303,9 +303,9 @@
"Oct." : "Okt.",
"Nov." : "Nóv.",
"Dec." : "Des.",
+ "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?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?",
"This server has no working Internet connection. 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." : "Þessi þjónn er ekki með virka nettengingu. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni. Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "Allow editing" : "Leyfa breytingar",
"Hide file listing" : "Fela skráalista",
"Sending ..." : "Sendi ...",
"Email sent" : "Tölvupóstur sendur",
@@ -330,20 +330,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Aukið öryggi var virkjað fyrir aðganginn þinn. Auðkenndu þig með aukaþrepi.",
"Cancel login" : "Hætta við innskráningu",
"Please authenticate using the selected factor." : "Auðkenndu þig með völdu þrepi.",
- "An error occured while verifying the token" : "Villa kom upp við að sannreyna teiknið",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Vefþjónninn þinn er ekki uppsettur þannig að hann geti leyst \"{url}\". Frekari upplýsingar er að finna í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "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\" href=\"{docLink}\">documentation</a>." : "Ekkert skyndiminni (cache) hefur verið stillt. Til að auka afköst ættirðu að setja upp skyndiminni (með memcache) ef það er tiltækt. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom er ekki lesanlegt af PHP sem er mjög óráðlegt af öryggisástæðum. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Þú ert að keyra PHP {version}. Við hvetjum þig til að uppfæra PHP útgáfuna til að njóta <a target=\"_blank\" href=\"{phpLink}\">afkastaaukningar og öryggisuppfærslna frá PHP Group</a> um leið og dreifingin þín styður þ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\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.",
- "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached er sett upp sem dreift skyndiminni, en hinsvegar er ranga PHP-einingin \"memcache\" uppsett. \\OC\\Memcache\\Memcached styður einungis \"memcached\" en ekki \"memcache\". Skoðaðu <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki-síðurnar um báðar einingarnar</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sumar skrár hafa ekki staðist áreiðanleikaprófun. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listi yfir ógildar skrár…</a> / <a href=\"{rescanEndpoint}\">Endurskanna…</a>)",
- "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}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP-hausinn er ekki stilltur á að minnsa kosti \"{seconds}\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningum</a>.",
- "An error occured. Please try again" : "Villa kom upp. Endilega reyndu aftur",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólki í öðrum Nextcloud-skýjum með skipuninni notandanafn@dæmi.is/nextcloud",
- "not assignable" : "ekki úthlutanlegt",
- "Updating {productName} to version {version}, this may take a while." : "Uppfæri {productName} í útgáfu {version}, þetta getur tekið smá stund.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Til að fá upplýsingar hvernig á að stilla miðlara almennilega, skaltu skoða <a href=\"%s\" target=\"_blank\">hjálparskjölin</a>.",
- "An internal error occured." : "Innri villa kom upp."
+ "An error occured while verifying the token" : "Villa kom upp við að sannreyna teiknið"
},"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 4c1dc68688d..b37eb695a1f 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "secondi fa",
"Logging in …" : "Accesso in corso...",
"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." : "Il collegamento per reimpostare la password è stato inviato al tuo indirizzo di posta. Se non lo ricevi in tempi ragionevoli, controlla le cartelle della posta indesiderata.<br>Se non dovesse essere nemmeno lì, contatta il tuo amministratore locale.",
- "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?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
+ "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?" : "I tuoi file sono cifrati. Non sarà più possibile recuperare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"I know what I'm doing" : "So cosa sto facendo",
"Password can not be changed. Please contact your administrator." : "La password non può essere cambiata. Contatta il tuo amministratore.",
"No" : "No",
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Collegamento",
"Password protect" : "Proteggi con password",
"Allow upload and editing" : "Consenti il caricamento e la modifica",
+ "Allow editing" : "Consenti la modifica",
"File drop (upload only)" : "Rilascia file (solo caricamento)",
"Email link to person" : "Invia collegamento via email",
"Send" : "Invia",
@@ -230,6 +231,7 @@ OC.L10N.register(
"Database name" : "Nome del database",
"Database tablespace" : "Spazio delle tabelle del database",
"Database host" : "Host del database",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Specifica il numero della porta insieme al nome host (ad es. localhost:5432).",
"Performance warning" : "Avviso di prestazioni",
"SQLite will be used as database." : "SQLite sarà utilizzato come database.",
"For larger installations we recommend to choose a different database backend." : "Per installazioni più grandi consigliamo di scegliere un motore di database diverso.",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Ti serve aiuto?",
"See the documentation" : "Leggi la documentazione",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. {linkstart}Abilita JavaScript{linkend} e ricarica la pagina.",
- "Log out" : "Esci",
"Search" : "Cerca",
+ "Log out" : "Esci",
"This action requires you to confirm your password:" : "Questa azione richiede la conferma della tua password:",
"Confirm your password" : "Conferma la tua password",
"Server side authentication failed!" : "Autenticazione lato server non riuscita!",
@@ -338,9 +340,9 @@ OC.L10N.register(
"Oct." : "Ott.",
"Nov." : "Nov.",
"Dec." : "Dic.",
+ "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?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"This server has no working Internet connection. 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." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>.",
- "Allow editing" : "Consenti la modifica",
"Hide file listing" : "Nascondi elenco dei file",
"Sending ..." : "Invio in corso...",
"Email sent" : "Messaggio inviato",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Una sicurezza più efficace è stata abilitata sul tuo account. Autenticati utilizzando un secondo fattore.",
"Cancel login" : "Annulla l'accesso",
"Please authenticate using the selected factor." : "Autentica utilizzando il fattore selezionato.",
- "An error occured while verifying the token" : "Si è verificato un errore durante la verifica del token",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Il tuo server web non è configurato correttamente per risolvere \"{url}\". Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Stai eseguendo attualmente PHP {version}. Ti esortiamo ad aggiornare la tua versione di PHP per trarre vantaggio dagli aggiornamenti in termini di <a target=\"_blank\" ref=\"{phpLink}\">prestazioni e sicurezza forniti dal PHP Group</a> non appena la tua distribuzione la supporta.",
- "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\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a Nextcloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a Nextcloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a target=\"_blank\" href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Elenco dei file non validi…</a> / <a href=\"{rescanEndpoint}\">Nuova scansione…</a>)",
- "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}\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore di almeno \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
- "An error occured. Please try again" : "Si è verificato un errore. Prova di nuovo",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Condividi con persone di altri server NextCloud utilizzando la sintassi nomeutente@esempio.com/nextcloud",
- "not assignable" : "non assegnabile",
- "Updating {productName} to version {version}, this may take a while." : "L'aggiornamento di {productName} alla versione {version}, potrebbe richiedere del tempo.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.",
- "An internal error occured." : "Si è verificato un errore interno."
+ "An error occured while verifying the token" : "Si è verificato un errore durante la verifica del token"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 0c92a505e14..877972e78f7 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -58,7 +58,7 @@
"seconds ago" : "secondi fa",
"Logging in …" : "Accesso in corso...",
"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." : "Il collegamento per reimpostare la password è stato inviato al tuo indirizzo di posta. Se non lo ricevi in tempi ragionevoli, controlla le cartelle della posta indesiderata.<br>Se non dovesse essere nemmeno lì, contatta il tuo amministratore locale.",
- "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?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
+ "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?" : "I tuoi file sono cifrati. Non sarà più possibile recuperare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"I know what I'm doing" : "So cosa sto facendo",
"Password can not be changed. Please contact your administrator." : "La password non può essere cambiata. Contatta il tuo amministratore.",
"No" : "No",
@@ -120,6 +120,7 @@
"Link" : "Collegamento",
"Password protect" : "Proteggi con password",
"Allow upload and editing" : "Consenti il caricamento e la modifica",
+ "Allow editing" : "Consenti la modifica",
"File drop (upload only)" : "Rilascia file (solo caricamento)",
"Email link to person" : "Invia collegamento via email",
"Send" : "Invia",
@@ -228,6 +229,7 @@
"Database name" : "Nome del database",
"Database tablespace" : "Spazio delle tabelle del database",
"Database host" : "Host del database",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Specifica il numero della porta insieme al nome host (ad es. localhost:5432).",
"Performance warning" : "Avviso di prestazioni",
"SQLite will be used as database." : "SQLite sarà utilizzato come database.",
"For larger installations we recommend to choose a different database backend." : "Per installazioni più grandi consigliamo di scegliere un motore di database diverso.",
@@ -237,8 +239,8 @@
"Need help?" : "Ti serve aiuto?",
"See the documentation" : "Leggi la documentazione",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. {linkstart}Abilita JavaScript{linkend} e ricarica la pagina.",
- "Log out" : "Esci",
"Search" : "Cerca",
+ "Log out" : "Esci",
"This action requires you to confirm your password:" : "Questa azione richiede la conferma della tua password:",
"Confirm your password" : "Conferma la tua password",
"Server side authentication failed!" : "Autenticazione lato server non riuscita!",
@@ -336,9 +338,9 @@
"Oct." : "Ott.",
"Nov." : "Nov.",
"Dec." : "Dic.",
+ "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?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"This server has no working Internet connection. 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." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</a>.",
- "Allow editing" : "Consenti la modifica",
"Hide file listing" : "Nascondi elenco dei file",
"Sending ..." : "Invio in corso...",
"Email sent" : "Messaggio inviato",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Una sicurezza più efficace è stata abilitata sul tuo account. Autenticati utilizzando un secondo fattore.",
"Cancel login" : "Annulla l'accesso",
"Please authenticate using the selected factor." : "Autentica utilizzando il fattore selezionato.",
- "An error occured while verifying the token" : "Si è verificato un errore durante la verifica del token",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Il tuo server web non è configurato correttamente per risolvere \"{url}\". Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Stai eseguendo attualmente PHP {version}. Ti esortiamo ad aggiornare la tua versione di PHP per trarre vantaggio dagli aggiornamenti in termini di <a target=\"_blank\" ref=\"{phpLink}\">prestazioni e sicurezza forniti dal PHP Group</a> non appena la tua distribuzione la supporta.",
- "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\" href=\"{docLink}\">documentation</a>." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a Nextcloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendolo visibile a Nextcloud. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il <a target=\"_blank\" href=\"{wikiLink}\">wiki di memcached per informazioni su entrambi i moduli</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra <a target=\"_blank\" href=\"{docLink}\">documentazione</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Elenco dei file non validi…</a> / <a href=\"{rescanEndpoint}\">Nuova scansione…</a>)",
- "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}\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore di almeno \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
- "An error occured. Please try again" : "Si è verificato un errore. Prova di nuovo",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Condividi con persone di altri server NextCloud utilizzando la sintassi nomeutente@esempio.com/nextcloud",
- "not assignable" : "non assegnabile",
- "Updating {productName} to version {version}, this may take a while." : "L'aggiornamento di {productName} alla versione {version}, potrebbe richiedere del tempo.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.",
- "An internal error occured." : "Si è verificato un errore interno."
+ "An error occured while verifying the token" : "Si è verificato un errore durante la verifica del token"
},"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 286116bbe67..8b411db8077 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"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. 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 />続けてよろしいでしょうか?",
+ "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." : "パスワードは変更できません。管理者に問い合わせてください。",
"No" : "いいえ",
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "リンク",
"Password protect" : "パスワード保護を有効化",
"Allow upload and editing" : "アップロードと編集を許可する",
+ "Allow editing" : "編集を許可",
"File drop (upload only)" : "ファイルドロップ(アップロードのみ)",
"Email link to person" : "メールリンク",
"Send" : "送信",
@@ -230,6 +231,7 @@ OC.L10N.register(
"Database name" : "データベース名",
"Database tablespace" : "データベースの表領域",
"Database host" : "データベースのホスト名",
+ "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." : "大規模な運用では別のデータベースを選択することをお勧めします。",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "ヘルプが必要ですか?",
"See the documentation" : "ドキュメントを確認してください",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "このアプリケーションの動作にはJavaScriptが必要です。\n {linkstart}JavaScriptを有効にし{linkend} 、ページを更新してください。 ",
- "Log out" : "ログアウト",
"Search" : "検索",
+ "Log out" : "ログアウト",
"This action requires you to confirm your password:" : "この操作では、パスワードを確認する必要があります:",
"Confirm your password" : "パスワードを確認",
"Server side authentication failed!" : "サーバーサイドの認証に失敗しました!",
@@ -338,9 +340,9 @@ OC.L10N.register(
"Oct." : "10月",
"Nov." : "11月",
"Dec." : "12月",
+ "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 />続けてよろしいでしょうか?",
"This server has no working Internet connection. 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." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスされているのでないなら、攻撃者の詐称されたIPアドレスから ownCloudを見ることができるように許可されていて、セキュリティに問題があります。詳細な情報は、 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>を確認してください。",
- "Allow editing" : "編集を許可",
"Hide file listing" : "ファイルリストを隠す",
"Sending ..." : "送信中...",
"Email sent" : "メールを送信しました",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "あなたのアカウントではセキュリティ拡張が有効になっています。2要素認証を使って認証してください。",
"Cancel login" : "ログインをキャンセル",
"Please authenticate using the selected factor." : "選択したデバイスを利用して認証してください。",
- "An error occured while verifying the token" : "トークンの整合性チェックでエラーが発生",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Webサーバーは適切にホスト名 \"{url}\" が引けるように設定されていません。詳細については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a>を参照してください。",
- "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\" href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。パフォーマンスを向上させるには、使用可能な場合はmemcacheを設定してください。詳細については、<a target=\"_blank\" 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\" href=\"{docLink}\">documentation</a>." : "/dev/urandomがPHPから読み込みできません。これはセキュリティの理由から非常に推奨されていません。詳細については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a>を参照してください。",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" 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\" 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\" href=\"{docLink}\">documentation</a>." : "リバースプロキシヘッダーの設定が正しくないか、信頼できるプロキシから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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached は分散キャッシュとして設定されています。しかし、PHPモジュール \"memcache\"が間違ってインストールされています。 \\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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "一部のファイルが整合性チェックに合格していません。この問題の解決方法の詳細については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a>をご覧ください。 (<a href=\"{codeIntegrityDownloadEndpoint}\">無効なファイルのリスト... </a> / <a href=\"{rescanEndpoint}\">再スキャン... </a>)",
- "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}\">security tips</a>." : "HTTP ヘッダ の \"Strict-Transport-Security\" が少なくとも \"{seconds}\" 秒に設定されていません。 セキュリティを強化するため、<a href=\"{docUrl}\" rel=\"noreferrer\">セキュリティTips</a>を参照して、HSTS を有効にすることをおすすめします。",
- "An error occured. Please try again" : "エラーが発生しました。再度試行してください。",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有",
- "not assignable" : "割り当て不可",
- "Updating {productName} to version {version}, this may take a while." : "{productName} をバージョン{version} に更新するには、しばらく時間がかかることがあります。",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "サーバーを正しく設定する方法については、<a href=\"%s\" target=\"_blank\">ドキュメント</a>をご覧ください。",
- "An internal error occured." : "内部エラーが発生しました"
+ "An error occured while verifying the token" : "トークンの整合性チェックでエラーが発生"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index f8e188506e7..03bfcd2173e 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -58,7 +58,7 @@
"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. 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 />続けてよろしいでしょうか?",
+ "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." : "パスワードは変更できません。管理者に問い合わせてください。",
"No" : "いいえ",
@@ -120,6 +120,7 @@
"Link" : "リンク",
"Password protect" : "パスワード保護を有効化",
"Allow upload and editing" : "アップロードと編集を許可する",
+ "Allow editing" : "編集を許可",
"File drop (upload only)" : "ファイルドロップ(アップロードのみ)",
"Email link to person" : "メールリンク",
"Send" : "送信",
@@ -228,6 +229,7 @@
"Database name" : "データベース名",
"Database tablespace" : "データベースの表領域",
"Database host" : "データベースのホスト名",
+ "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." : "大規模な運用では別のデータベースを選択することをお勧めします。",
@@ -237,8 +239,8 @@
"Need help?" : "ヘルプが必要ですか?",
"See the documentation" : "ドキュメントを確認してください",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "このアプリケーションの動作にはJavaScriptが必要です。\n {linkstart}JavaScriptを有効にし{linkend} 、ページを更新してください。 ",
- "Log out" : "ログアウト",
"Search" : "検索",
+ "Log out" : "ログアウト",
"This action requires you to confirm your password:" : "この操作では、パスワードを確認する必要があります:",
"Confirm your password" : "パスワードを確認",
"Server side authentication failed!" : "サーバーサイドの認証に失敗しました!",
@@ -336,9 +338,9 @@
"Oct." : "10月",
"Nov." : "11月",
"Dec." : "12月",
+ "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 />続けてよろしいでしょうか?",
"This server has no working Internet connection. 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." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスされているのでないなら、攻撃者の詐称されたIPアドレスから ownCloudを見ることができるように許可されていて、セキュリティに問題があります。詳細な情報は、 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">ドキュメント</a>を確認してください。",
- "Allow editing" : "編集を許可",
"Hide file listing" : "ファイルリストを隠す",
"Sending ..." : "送信中...",
"Email sent" : "メールを送信しました",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "あなたのアカウントではセキュリティ拡張が有効になっています。2要素認証を使って認証してください。",
"Cancel login" : "ログインをキャンセル",
"Please authenticate using the selected factor." : "選択したデバイスを利用して認証してください。",
- "An error occured while verifying the token" : "トークンの整合性チェックでエラーが発生",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Webサーバーは適切にホスト名 \"{url}\" が引けるように設定されていません。詳細については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a>を参照してください。",
- "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\" href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。パフォーマンスを向上させるには、使用可能な場合はmemcacheを設定してください。詳細については、<a target=\"_blank\" 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\" href=\"{docLink}\">documentation</a>." : "/dev/urandomがPHPから読み込みできません。これはセキュリティの理由から非常に推奨されていません。詳細については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a>を参照してください。",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" 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\" 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\" href=\"{docLink}\">documentation</a>." : "リバースプロキシヘッダーの設定が正しくないか、信頼できるプロキシから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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached は分散キャッシュとして設定されています。しかし、PHPモジュール \"memcache\"が間違ってインストールされています。 \\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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "一部のファイルが整合性チェックに合格していません。この問題の解決方法の詳細については、<a target=\"_blank\" href=\"{docLink}\">ドキュメント</a>をご覧ください。 (<a href=\"{codeIntegrityDownloadEndpoint}\">無効なファイルのリスト... </a> / <a href=\"{rescanEndpoint}\">再スキャン... </a>)",
- "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}\">security tips</a>." : "HTTP ヘッダ の \"Strict-Transport-Security\" が少なくとも \"{seconds}\" 秒に設定されていません。 セキュリティを強化するため、<a href=\"{docUrl}\" rel=\"noreferrer\">セキュリティTips</a>を参照して、HSTS を有効にすることをおすすめします。",
- "An error occured. Please try again" : "エラーが発生しました。再度試行してください。",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有",
- "not assignable" : "割り当て不可",
- "Updating {productName} to version {version}, this may take a while." : "{productName} をバージョン{version} に更新するには、しばらく時間がかかることがあります。",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "サーバーを正しく設定する方法については、<a href=\"%s\" target=\"_blank\">ドキュメント</a>をご覧ください。",
- "An internal error occured." : "内部エラーが発生しました"
+ "An error occured while verifying the token" : "トークンの整合性チェックでエラーが発生"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/ko.js b/core/l10n/ko.js
index b6655225a27..11ec45f71a9 100644
--- a/core/l10n/ko.js
+++ b/core/l10n/ko.js
@@ -51,12 +51,15 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "페이지 로딩에 문제가 있습니다. 5초 후 다시로드 하십시오.",
"Saving..." : "저장 중...",
"Dismiss" : "닫기",
+ "This action requires you to confirm your password" : "이 작업을 수행하려면 암호를 입력해야 합니다",
+ "Authentication required" : "인증 필요",
"Password" : "암호",
"Cancel" : "취소",
+ "Confirm" : "확인",
+ "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. 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 />그래도 계속 진행하시겠습니까?",
"I know what I'm doing" : "지금 하려는 것을 알고 있습니다",
"Password can not be changed. Please contact your administrator." : "암호를 변경할 수 없습니다. 관리자에게 문의하십시오.",
"No" : "아니요",
@@ -84,6 +87,12 @@ 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." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
+ "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>." : "PHP가 안전한 난수 발생기(/dev/urandom)를 사용할 수 없어 보안에 취약합니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">사용 설명서</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>." : "역방향 프록시 헤더 설정이 올바르지 않거나 Trusted Proxy를 통해 ownCloud에 접근하고 있을 수 있습니다. 만약 ownCloud를 Trusted Proxy를 통해 접근하고 있지 않다면 이는 보안 문제이며 공격자가 IP 주소를 속이고 있을 수 있습니다. 자세한 내용은 <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가 분산 캐시로 구성되어 있지만 잘못된 PHP 모듈 \"memcache\"가 설치되어 있습니다. \\OC\\Memcache\\Memcached는 \"memcache\"가 아닌 \"memcached\"만 지원합니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">이 두 모듈에 대한 memcached 위키</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>)",
"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 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.",
@@ -110,6 +119,7 @@ OC.L10N.register(
"Link" : "링크",
"Password protect" : "암호 보호",
"Allow upload and editing" : "업로드 및 편집 허용",
+ "Allow editing" : "편집 허용",
"Email link to person" : "이메일 주소",
"Send" : "전송",
"Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중",
@@ -150,10 +160,12 @@ OC.L10N.register(
"Hello {name}" : "{name} 님 안녕하세요",
"new" : "새로운 항목",
"_download %n file_::_download %n files_" : ["파일 %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." : "페이지를 새로 고치십시오.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "업데이트에 실패했습니다. 더 많은 정보를 보려면 이 문제를 다루은 <a href=\"{url}\">포럼 글</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 now." : "업데이트가 성공했습니다. 지금 Nextcloud로 리디렉션합니다.",
"Searching other places" : "다른 장소 찾는 중",
@@ -209,8 +221,10 @@ OC.L10N.register(
"Need help?" : "도움이 필요한가요?",
"See the documentation" : "문서 보기",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "이 프로그램이 올바르게 작동하려면 JavaScript가 필요합니다. {linkstart}JavaScript를 활성화{linkend}한 다음 페이지를 새로 고치십시오.",
- "Log out" : "로그아웃",
"Search" : "검색",
+ "Log out" : "로그아웃",
+ "This action requires you to confirm your password:" : "이 작업을 수행하려면 암호를 입력해야 합니다:",
+ "Confirm your password" : "암호를 입력하십시오",
"Server side authentication failed!" : "서버 인증 실패!",
"Please contact your administrator." : "관리자에게 문의하십시오.",
"An internal error occurred." : "내부 오류가 발생했습니다.",
@@ -234,6 +248,7 @@ OC.L10N.register(
"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." : "시스템 관리자에게 연락하십시오. 만약 이 인스턴스의 관리자라면 config/config.php에서 \"trusted_domains\" 설정을 편집하십시오. 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." : "설정에 따라서 관리자 권한으로 아래 단추를 눌러서 이 도메인을 신뢰하도록 설정할 수 있습니다.",
@@ -305,8 +320,9 @@ OC.L10N.register(
"Oct." : "10월",
"Nov." : "11월",
"Dec." : "12월",
+ "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 />그래도 계속 진행하시겠습니까?",
"This server has no working Internet connection. 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." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
- "Allow editing" : "편집 허용",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "역방향 프록시 헤더 설정이 올바르지 않거나 Trusted Proxy를 통해 ownCloud에 접근하고 있을 수 있습니다. 만약 ownCloud를 Trusted Proxy를 통해 접근하고 있지 않다면 이는 보안 문제이며 공격자가 IP 주소를 속이고 있을 수 있습니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">사용 설명서</a>를 참고하십시오.",
"Hide file listing" : "숨김 파일 목록",
"Sending ..." : "전송 중...",
"Email sent" : "이메일 발송됨",
@@ -323,7 +339,7 @@ OC.L10N.register(
"Share with users or remote users…" : "원격 사용자에 대한 사용자와 공유 ...",
"Warning" : "경고",
"Error while sending notification" : "알림을 보내는 중 오류 발생",
- "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "업그레이드 중입니다. 이 페이지를 열어 두면 일부 환경에서 진행 과정을 중단시킬 수 있습니다.",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "업그레이드 중입니다. 일부 환경에서 이 페이지를 닫을 경우 작업이 중단될 수 있습니다.",
"Updating to {version}" : "{version}(으)로 업데이트 중",
"The update was successful. There were warnings." : "업데이트가 성공했습니다. 일부 경고가 있습니다.",
"No search results in other folders" : "다른 폴더에 검색 결과 없음",
@@ -331,14 +347,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "강화된 보안 계정을 사용할 수 있습니다. 두 번째 인자를 사용하여 인증하시기 바랍니다.",
"Cancel login" : "로그인 취소",
"Please authenticate using the selected factor." : "선택한 요소를 사용하여 인증하시기 바랍니다.",
- "An error occured while verifying the token" : "토큰을 확인하는 중 오류 발생",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "일부 파일에 대한 무결성 검사를 통과하지 않았습니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 우리의 <a target=\"_blank\" href=\"{docLink}\">문서</a>에서 찾을 수 있습니다. (<a href=\"{codeIntegrityDownloadEndpoint}\">잘못된 파일 목록...</a> / <a href=\"{rescanEndpoint}\">재검색...</a>)",
- "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}\">security tips</a>." : "\"엄격한 - 전송 보안\" HTTP 헤더에 적어도 \"{seconds}\"초로 설정되어 있지 않습니다. <a href=\"{docUrl}\">보안 팁</a>에 언급 된 바와 같이 보안을 강화하기 위해, HSTS를 사용하는 것이 좋습니다.",
- "An error occured. Please try again" : "오류가 발생했습니다. 다시 시도하십시오.",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "username@example.com/nextcloud 형식으로 다른 nextcloud 사용자와 공유할 수 있습니다",
- "not assignable" : "할당할 수 없음",
- "Updating {productName} to version {version}, this may take a while." : "{productName} 버전 {version}(으)로 업데이트 중 입니다. 시간이 다소 걸릴 수 있습니다.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "서버를 올바르게 구성하는 방법에 대한 자세한 내용은 <a href=\"%s\" target=\"_blank\">설명서</a>를 참조하시기 바랍니다.",
- "An internal error occured." : "내부 오류가 발생했습니다."
+ "An error occured while verifying the token" : "토큰을 확인하는 중 오류 발생"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/ko.json b/core/l10n/ko.json
index 77d9df02ca3..c36e174afb3 100644
--- a/core/l10n/ko.json
+++ b/core/l10n/ko.json
@@ -49,12 +49,15 @@
"Problem loading page, reloading in 5 seconds" : "페이지 로딩에 문제가 있습니다. 5초 후 다시로드 하십시오.",
"Saving..." : "저장 중...",
"Dismiss" : "닫기",
+ "This action requires you to confirm your password" : "이 작업을 수행하려면 암호를 입력해야 합니다",
+ "Authentication required" : "인증 필요",
"Password" : "암호",
"Cancel" : "취소",
+ "Confirm" : "확인",
+ "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. 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 />그래도 계속 진행하시겠습니까?",
"I know what I'm doing" : "지금 하려는 것을 알고 있습니다",
"Password can not be changed. Please contact your administrator." : "암호를 변경할 수 없습니다. 관리자에게 문의하십시오.",
"No" : "아니요",
@@ -82,6 +85,12 @@
"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." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
+ "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>." : "PHP가 안전한 난수 발생기(/dev/urandom)를 사용할 수 없어 보안에 취약합니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">사용 설명서</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>." : "역방향 프록시 헤더 설정이 올바르지 않거나 Trusted Proxy를 통해 ownCloud에 접근하고 있을 수 있습니다. 만약 ownCloud를 Trusted Proxy를 통해 접근하고 있지 않다면 이는 보안 문제이며 공격자가 IP 주소를 속이고 있을 수 있습니다. 자세한 내용은 <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가 분산 캐시로 구성되어 있지만 잘못된 PHP 모듈 \"memcache\"가 설치되어 있습니다. \\OC\\Memcache\\Memcached는 \"memcache\"가 아닌 \"memcached\"만 지원합니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">이 두 모듈에 대한 memcached 위키</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>)",
"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 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.",
@@ -108,6 +117,7 @@
"Link" : "링크",
"Password protect" : "암호 보호",
"Allow upload and editing" : "업로드 및 편집 허용",
+ "Allow editing" : "편집 허용",
"Email link to person" : "이메일 주소",
"Send" : "전송",
"Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중",
@@ -148,10 +158,12 @@
"Hello {name}" : "{name} 님 안녕하세요",
"new" : "새로운 항목",
"_download %n file_::_download %n files_" : ["파일 %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." : "페이지를 새로 고치십시오.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "업데이트에 실패했습니다. 더 많은 정보를 보려면 이 문제를 다루은 <a href=\"{url}\">포럼 글</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 now." : "업데이트가 성공했습니다. 지금 Nextcloud로 리디렉션합니다.",
"Searching other places" : "다른 장소 찾는 중",
@@ -207,8 +219,10 @@
"Need help?" : "도움이 필요한가요?",
"See the documentation" : "문서 보기",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "이 프로그램이 올바르게 작동하려면 JavaScript가 필요합니다. {linkstart}JavaScript를 활성화{linkend}한 다음 페이지를 새로 고치십시오.",
- "Log out" : "로그아웃",
"Search" : "검색",
+ "Log out" : "로그아웃",
+ "This action requires you to confirm your password:" : "이 작업을 수행하려면 암호를 입력해야 합니다:",
+ "Confirm your password" : "암호를 입력하십시오",
"Server side authentication failed!" : "서버 인증 실패!",
"Please contact your administrator." : "관리자에게 문의하십시오.",
"An internal error occurred." : "내부 오류가 발생했습니다.",
@@ -232,6 +246,7 @@
"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." : "시스템 관리자에게 연락하십시오. 만약 이 인스턴스의 관리자라면 config/config.php에서 \"trusted_domains\" 설정을 편집하십시오. 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." : "설정에 따라서 관리자 권한으로 아래 단추를 눌러서 이 도메인을 신뢰하도록 설정할 수 있습니다.",
@@ -303,8 +318,9 @@
"Oct." : "10월",
"Nov." : "11월",
"Dec." : "12월",
+ "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 />그래도 계속 진행하시겠습니까?",
"This server has no working Internet connection. 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." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.",
- "Allow editing" : "편집 허용",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "역방향 프록시 헤더 설정이 올바르지 않거나 Trusted Proxy를 통해 ownCloud에 접근하고 있을 수 있습니다. 만약 ownCloud를 Trusted Proxy를 통해 접근하고 있지 않다면 이는 보안 문제이며 공격자가 IP 주소를 속이고 있을 수 있습니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">사용 설명서</a>를 참고하십시오.",
"Hide file listing" : "숨김 파일 목록",
"Sending ..." : "전송 중...",
"Email sent" : "이메일 발송됨",
@@ -321,7 +337,7 @@
"Share with users or remote users…" : "원격 사용자에 대한 사용자와 공유 ...",
"Warning" : "경고",
"Error while sending notification" : "알림을 보내는 중 오류 발생",
- "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "업그레이드 중입니다. 이 페이지를 열어 두면 일부 환경에서 진행 과정을 중단시킬 수 있습니다.",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "업그레이드 중입니다. 일부 환경에서 이 페이지를 닫을 경우 작업이 중단될 수 있습니다.",
"Updating to {version}" : "{version}(으)로 업데이트 중",
"The update was successful. There were warnings." : "업데이트가 성공했습니다. 일부 경고가 있습니다.",
"No search results in other folders" : "다른 폴더에 검색 결과 없음",
@@ -329,14 +345,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "강화된 보안 계정을 사용할 수 있습니다. 두 번째 인자를 사용하여 인증하시기 바랍니다.",
"Cancel login" : "로그인 취소",
"Please authenticate using the selected factor." : "선택한 요소를 사용하여 인증하시기 바랍니다.",
- "An error occured while verifying the token" : "토큰을 확인하는 중 오류 발생",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "일부 파일에 대한 무결성 검사를 통과하지 않았습니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 우리의 <a target=\"_blank\" href=\"{docLink}\">문서</a>에서 찾을 수 있습니다. (<a href=\"{codeIntegrityDownloadEndpoint}\">잘못된 파일 목록...</a> / <a href=\"{rescanEndpoint}\">재검색...</a>)",
- "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}\">security tips</a>." : "\"엄격한 - 전송 보안\" HTTP 헤더에 적어도 \"{seconds}\"초로 설정되어 있지 않습니다. <a href=\"{docUrl}\">보안 팁</a>에 언급 된 바와 같이 보안을 강화하기 위해, HSTS를 사용하는 것이 좋습니다.",
- "An error occured. Please try again" : "오류가 발생했습니다. 다시 시도하십시오.",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "username@example.com/nextcloud 형식으로 다른 nextcloud 사용자와 공유할 수 있습니다",
- "not assignable" : "할당할 수 없음",
- "Updating {productName} to version {version}, this may take a while." : "{productName} 버전 {version}(으)로 업데이트 중 입니다. 시간이 다소 걸릴 수 있습니다.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "서버를 올바르게 구성하는 방법에 대한 자세한 내용은 <a href=\"%s\" target=\"_blank\">설명서</a>를 참조하시기 바랍니다.",
- "An internal error occured." : "내부 오류가 발생했습니다."
+ "An error occured while verifying the token" : "토큰을 확인하는 중 오류 발생"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/lv.js b/core/l10n/lv.js
new file mode 100644
index 00000000000..4f8b57c08b3
--- /dev/null
+++ b/core/l10n/lv.js
@@ -0,0 +1,303 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Lūdzu izvēlies failu.",
+ "File is too big" : "Datne ir par lielu",
+ "The selected file is not an image." : "Atlasītais fails nav attēls.",
+ "The selected file cannot be read." : "Atlasīto failu nevar nolasīt.",
+ "Invalid file provided" : "Norādīta nederīga datne",
+ "No image or file provided" : "Nav norādīts attēls vai datne",
+ "Unknown filetype" : "Nezināms datnes tips",
+ "Invalid image" : "Nederīgs attēls",
+ "An error occurred. Please contact your admin." : "Notika kļūda. Lūdzu sazinies ar savu administratoru.",
+ "No temporary profile picture available, try again" : "Profila pagaidu attēls nav pieejams, mēģini vēlreiz",
+ "No crop data provided" : "Nav norādīti apgriešanas dati",
+ "No valid crop data provided" : "Nav norādīti derīgi apgriešanas dati",
+ "Crop is not square" : "Griezums nav kvadrāts",
+ "Couldn't reset password because the token is invalid" : "Nevarēja nomainīt paroli, jo pazīšanās zīme ir nederīga",
+ "Couldn't reset password because the token is expired" : "Nevarēja nomainīt paroli, jo pazīšanās zīmei beidzies derīguma termiņš",
+ "Couldn't send reset email. Please make sure your username is correct." : "Nevarēja nosūtīt paroles maiņas e-pastu. Pārliecinies, ka tavs lietotājvārds ir pareizs.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nevarēja nosūtīt paroles maiņas e-pastu, jo lietotājam nav norādīts e-pasts. Lūdzu sazinies ar savu administratoru.",
+ "%s password reset" : "%s paroles maiņa",
+ "Couldn't send reset email. Please contact your administrator." : "Nevarēja nosūtīt maiņas e-pastu. Lūdzu sazinies ar savu administratoru.",
+ "Preparing update" : "Sagatavo atjauninājumu",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair warning: " : "Labošanas brīdinājums:",
+ "Repair error: " : "Labošanas kļūda:",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Lūdzu izmanto komandrindas atjaunināšanu, jo automātiskā atjaunināšana ir atspējota konfigurācijas datnē config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Pārbauda tabulu %s",
+ "Turned on maintenance mode" : "Ieslēgts uzturēšanas režīms",
+ "Turned off maintenance mode" : "Izslēgts uzturēšanas režīms",
+ "Maintenance mode is kept active" : "Uzturēšanas režīms ir paturēts aktīvs",
+ "Updating database schema" : "Atjaunina datu bāzes shēmu",
+ "Updated database" : "Atjaunināta datu bāze",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Pārbauda vai datu bāzes shēma var būt atjaunināma (tas var prasīt laiku atkarībā no datu bāzes izmēriem)",
+ "Checked database schema update" : "Pārbaudīts datu bāzes shēmas atjauninājums",
+ "Checking updates of apps" : "Pārbauda programmu atjauninājumus",
+ "Updated \"%s\" to %s" : "Atjaunināts \"%s\" uz %s",
+ "Starting code integrity check" : "Uzsākta koda integritātes pārbaude",
+ "Finished code integrity check" : "Pabeigta koda integritātes pārbaude",
+ "%s (3rdparty)" : "%s (citu izstrādātāju)",
+ "%s (incompatible)" : "%s (nesaderīgs)",
+ "Following apps have been disabled: %s" : "Sekojošas programmas tika atslēgtas: %s",
+ "Already up to date" : "Jau ir jaunākā",
+ "Settings" : "Iestatījumi",
+ "Connection to server lost" : "Zaudēts savienojums ar serveri",
+ "Problem loading page, reloading in 5 seconds" : "Problēma ielādējot lapu, pārlādēšana pēc 5 sekundēm",
+ "Saving..." : "Saglabā...",
+ "Dismiss" : "Atmest",
+ "Authentication required" : "Nepieciešama autentifikācija",
+ "Password" : "Parole",
+ "Cancel" : "Atcelt",
+ "Confirm" : "Apstiprināt",
+ "Failed to authenticate, try again" : "Neizdevās autentificēt, mēģiniet vēlreiz",
+ "seconds ago" : "sekundes atpakaļ",
+ "Logging in …" : "Notiek pieteikšanās …",
+ "I know what I'm doing" : "Es zinu ko es daru",
+ "Password can not be changed. Please contact your administrator." : "Paroli, nevar nomainīt. Lūdzu kontaktēties ar savu administratoru.",
+ "No" : "Nē",
+ "Yes" : "Jā",
+ "No files in here" : "Šeit nav datņu",
+ "Choose" : "Izvēlieties",
+ "Error loading file picker template: {error}" : "Kļūda ielādējot izvēlēto veidni: {error}",
+ "Ok" : "Labi",
+ "Error loading message template: {error}" : "Kļūda ielādējot ziņojuma veidni: {error}",
+ "read-only" : "tikai-skatīt",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} datnes konflikts","{count} datnes konflikts","{count} datņu konflikti"],
+ "One file conflict" : "Vienas datnes konflikts",
+ "New Files" : "Jaunas datnes",
+ "Already existing files" : "Jau esošas datnes",
+ "Which files do you want to keep?" : "Kuras datnes vēlies paturēt?",
+ "Continue" : "Turpināt",
+ "(all selected)" : "(visus iezīmētos)",
+ "({count} selected)" : "({count} iezīmēti)",
+ "Very weak password" : "Ļoti vāja parole",
+ "Weak password" : "Vāja parole",
+ "So-so password" : "Normāla parole",
+ "Good password" : "Laba parole",
+ "Strong password" : "Lieliska parole",
+ "Shared" : "Koplietots",
+ "Shared with {recipients}" : "Koplietots ar {recipients}",
+ "Error" : "Kļūda",
+ "Error while sharing" : "Kļūda, daloties",
+ "Error while unsharing" : "Kļūda, beidzot dalīties",
+ "Error setting expiration date" : "Kļūda, iestatot termiņa datumu",
+ "Set expiration date" : "Iestatiet termiņa datumu",
+ "Expiration" : "Termiņš",
+ "Expiration date" : "Termiņa datums",
+ "Choose a password for the public link" : "Izvēlies paroli publiskai saitei",
+ "Copied!" : "Nokopēts!",
+ "Copy" : "Kopēt",
+ "Not supported!" : "Nav atbalstīts!",
+ "Press ⌘-C to copy." : "Spiet ⌘-C lai kopētu.",
+ "Press Ctrl-C to copy." : "Spiet Ctrl-C lai kopētu.",
+ "Resharing is not allowed" : "Atkārtota dalīšanās nav atļauta",
+ "Share link" : "Koplietot saiti",
+ "Link" : "Saite",
+ "Password protect" : "Aizsargāt ar paroli",
+ "Allow upload and editing" : "Atļaut augšupielādi un rediģēšanu",
+ "Allow editing" : "Atļaut rediģēt",
+ "Email link to person" : "Sūtīt saiti personai pa e-pastu",
+ "Send" : "Sūtīt",
+ "Shared with you and the group {group} by {owner}" : "{owner} koplietoja ar jums un grupu {group}",
+ "Shared with you by {owner}" : "{owner} koplietoja ar jums",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} koplietots ar saiti",
+ "group" : "grupa",
+ "remote" : "attālināti",
+ "email" : "e-pasts",
+ "Unshare" : "Pārtraukt koplietošanu",
+ "can edit" : "var rediģēt",
+ "can create" : "var izveidot",
+ "can change" : "var mainīt",
+ "can delete" : "var dzēst",
+ "access control" : "piekļuves vadība",
+ "Could not unshare" : "Nevarēja pārtraukt koplietošanu",
+ "Share details could not be loaded for this item." : "Šim nevarēja ielādēt koplietošanas detaļas.",
+ "No users or groups found for {search}" : "Pēc {search} netika atrasts neviens lietotājs vai grupa",
+ "No users found for {search}" : "Pēc {search} netika atrasts neviens lietotājs",
+ "An error occurred. Please try again" : "Notika kļūda. Mēģini vēlreiz.",
+ "{sharee} (group)" : "{sharee} (grupa)",
+ "{sharee} (remote)" : "{sharee} (attālināti)",
+ "{sharee} (email)" : "{sharee} (e-pasts)",
+ "Share" : "Koplietot",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Koplietot ar personām, kas atrodas citos serveros, izmantojot Federated Cloud ID username@example.com/nextcloud",
+ "Share with users or by mail..." : "Koplietot ar lietotājiem vai izmantojot e-pastu...",
+ "Share with users or groups..." : "Koplietot ar lietotājiem vai grupām...",
+ "Share with users, groups or by mail..." : "Koplietot ar lietotājiem, grupām vai izmantojot e-pastu...",
+ "Share with users..." : "Koplietots ar lietotājiem...",
+ "Error removing share" : "Kļūda, noņemot koplietošanu",
+ "restricted" : "ierobežots",
+ "invisible" : "Neredzams",
+ "({scope})" : "({scope})",
+ "Delete" : "Dzēst",
+ "Rename" : "Pārsaukt",
+ "Collaborative tags" : "Sadarbības atzīmes",
+ "No tags found" : "Netika atrasta neviena atzīme",
+ "The object type is not specified." : "Nav norādīts objekta tips.",
+ "Enter new" : "Ievadīt jaunu",
+ "Add" : "Pievienot",
+ "Edit tags" : "Rediģēt atzīmes",
+ "unknown text" : "nezināms teksts",
+ "Hello world!" : "Sveika, pasaule!",
+ "sunny" : "saulains",
+ "Hello {name}, the weather is {weather}" : "Sveiks {name}, laiks ir {weather}",
+ "Hello {name}" : "Sveiks {name}",
+ "new" : "jauns",
+ "Update to {version}" : "Atjaunināts uz {version}",
+ "An error occurred." : "Radās kļūda.",
+ "Please reload the page." : "Lūdzu, atkārtoti ielādējiet lapu.",
+ "Continue to Nextcloud" : "Turpināt ar Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Atjaunināšana ir bijusi veiksmīga. Tagad novirzīsim jūs uz Nextcloud.",
+ "Searching other places" : "Meklēt citās vietās",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} meklēšanas rezultāti citās mapēs","{count} meklēšanas rezultāti citās mapēs","{count} meklēšanas rezultāti citās mapēs"],
+ "Personal" : "Personīgi",
+ "Users" : "Lietotāji",
+ "Apps" : "Programmas",
+ "Admin" : "Administratori",
+ "Help" : "Palīdzība",
+ "Access forbidden" : "Pieeja ir liegta",
+ "File not found" : "Fails nav atrasts",
+ "The specified document has not been found on the server." : "Norādītais dokuments nav atrasts serverī.",
+ "You can click here to return to %s." : "Jūs varat noklikšķināt šeit, lai atgrieztos uz %s.",
+ "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",
+ "Cheers!" : "Priekā!",
+ "Internal Server Error" : "Iekšēja servera kļūda",
+ "The server encountered an internal error and was unable to complete your request." : "Serverī radās iekšēja kļūda, un tas nevarēja pabeigt jūsu pieprasījumu.",
+ "More details can be found in the server log." : "Sīkāka informācija atrodama servera žurnāl failā.",
+ "Technical details" : "Tehniskās detaļas",
+ "Remote Address: %s" : "Attālinātā adrese: %s",
+ "Request ID: %s" : "Pieprasījuma ID: %s",
+ "Type: %s" : "Tips: %s",
+ "Code: %s" : "Kods: %s",
+ "Message: %s" : "Ziņojums: %s",
+ "File: %s" : "Fails: %s",
+ "Line: %s" : "Līnija: %s",
+ "Trace" : "Izsekot",
+ "Security warning" : "Drošības brīdinājums",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.",
+ "Create an <strong>admin account</strong>" : "Izveidot <strong>administratora kontu</strong>",
+ "Username" : "Lietotājvārds",
+ "Storage & database" : "Krātuve & datubāze",
+ "Data folder" : "Datu mape",
+ "Configure the database" : "Konfigurēt datubāzi",
+ "Only %s is available." : "Tikai %s ir pieejams.",
+ "Database user" : "Datubāzes lietotājs",
+ "Database password" : "Datubāzes parole",
+ "Database name" : "Datubāzes nosaukums",
+ "Database tablespace" : "Datubāzes tabulas telpa",
+ "Database host" : "Datubāzes serveris",
+ "Performance warning" : "Veiktspējas brīdinājums",
+ "SQLite will be used as database." : "SQLite tiks izmantota kā datu bāze.",
+ "Finish setup" : "Pabeigt iestatīšanu",
+ "Finishing …" : "Pabeidz ...",
+ "Need help?" : "Vajadzīga palīdzība?",
+ "See the documentation" : "Skatiet dokumentāciju",
+ "Search" : "Meklēt",
+ "Log out" : "Izrakstīties",
+ "This action requires you to confirm your password:" : "Šī darbība ir nepieciešama, lai apstiprinātu jūsu paroli:",
+ "Confirm your password" : "Apstipriniet paroli",
+ "Server side authentication failed!" : "Servera autentifikācija neizdevās!",
+ "Please contact your administrator." : "Lūdzu, sazinieties ar administratoru.",
+ "An internal error occurred." : "Radās iekšēja kļūda.",
+ "Please try again or contact your administrator." : "Lūdzu, mēģiniet vēlreiz vai sazinieties ar administratoru.",
+ "Username or email" : "Lietotājvārds vai e-pasts",
+ "Wrong password. Reset it?" : "Nepareiza parole. Nodzēst to?",
+ "Wrong password." : "Nepareiza parole.",
+ "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",
+ "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>",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Sazinieties ar sistēmas administratoru, ja šis ziņojums tiek rādīts.. vai parādījās negaidīti",
+ "Thank you for your patience." : "Paldies par jūsu pacietību.",
+ "Two-factor authentication" : "Divpakāpju autentifikācija",
+ "Cancel log in" : "Atcelt pierakstīšanos",
+ "Use backup code" : "Izmantojiet dublēšanas kodu",
+ "You are accessing the server from an untrusted domain." : "Jums ir piekļuve serverim no neuzticama domēna.",
+ "Add \"%s\" as trusted domain" : "Pievienot \"%s\" kā uzticamu domēnu",
+ "App update required" : "Programmai nepieciešama atjaunināšana",
+ "%s will be updated to version %s" : "%s tiks atjaunināts uz versiju %s",
+ "These apps will be updated:" : "Šīs programmas tiks atjauninātas:",
+ "The theme %s has been disabled." : "Tēma %s ir atspējota.",
+ "Start update" : "Sākt atjaunināšanu",
+ "Detailed logs" : "Detalizētas informācijas žurnālfaili",
+ "Update needed" : "Nepieciešama atjaunināšana",
+ "Please use the command line updater because you have a big instance." : "Lūdzu, izmantojiet komandrindas atjauninātāju, jo jums ir liels datu apjoms.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Lai saņemtu palīdzību, skatiet <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentāciju</a>.",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Šis %s serveris pašlaik darbojas uzturēšanas režīmā, tas var ilgt kādu laiku.",
+ "Error tagging" : "Kļūda atzīmējot",
+ "Error untagging" : "Kļūda noņemot atzīmi",
+ "Couldn't send mail to following users: %s " : "Nevarēja nosūtīt e-pastu sekojošiem lietotājiem: %s",
+ "Sunday" : "Svētdiena",
+ "Monday" : "Pirmdiena",
+ "Tuesday" : "Otrdiena",
+ "Wednesday" : "Trešdiena",
+ "Thursday" : "Ceturtdiena",
+ "Friday" : "Piektdiena",
+ "Saturday" : "Sestdiena",
+ "Sun." : "Sv.",
+ "Mon." : "Pr.",
+ "Tue." : "Ot.",
+ "Wed." : "Tr.",
+ "Thu." : "Ce.",
+ "Fri." : "Pk.",
+ "Sat." : "Se.",
+ "Su" : "Sv",
+ "Mo" : "Pr",
+ "Tu" : "Ot",
+ "We" : "Tr",
+ "Th" : "Ce",
+ "Fr" : "Pi",
+ "Sa" : "Se",
+ "January" : "Janvāris",
+ "February" : "Februāris",
+ "March" : "Marts",
+ "April" : "Aprīlis",
+ "May" : "Maijs",
+ "June" : "Jūnijs",
+ "July" : "Jūlijs",
+ "August" : "Augusts",
+ "September" : "Septembris",
+ "October" : "Oktobris",
+ "November" : "Novembris",
+ "December" : "Decembris",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Apr.",
+ "May." : "Mai.",
+ "Jun." : "Jūn.",
+ "Jul." : "Jūl.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dec.",
+ "This server has no working Internet connection. 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." : "Šim serverim nav interneta savienojuma. Tas nozīmē, ka daži līdzekļi, piemēram, ārējo atmiņas montāžas vai trešās puses lietojumprogrammu paziņojumi par atjauninājumiem nedarbosies. Attāli piekļūt failiem un nosūtīt paziņojumu uz e-pastu, iespējams nedarbosies. Mēs ierosinām, izveidot interneta savienojumu ar šo serveri, ja vēlaties, lai visas funkcijas darbotos.",
+ "Hide file listing" : "Paslēpt datņu sarakstu",
+ "Sending ..." : "Sūta...",
+ "Email sent" : "Vēstule nosūtīta",
+ "Send link via email" : "Sūtīt saiti e-pastā",
+ "notify by email" : "ziņot e-pastā",
+ "can share" : "Var koplietot",
+ "create" : "izveidot",
+ "change" : "mainīt",
+ "delete" : "dzēst",
+ "{sharee} (at {server})" : "{sharee} ({server})",
+ "Share with users…" : "Koplietots ar lietotājiem...",
+ "Share with users or groups…" : "Koplietot ar lietotājiem vai grupām ...",
+ "Warning" : "Brīdinājums",
+ "Error while sending notification" : "Kļūda, nosūtot paziņojumu",
+ "Updating to {version}" : "Jaunināt uz {version}",
+ "The update was successful. There were warnings." : "Atjaunināšana ir bijusi veiksmīga. Bija brīdinājumi.",
+ "No search results in other folders" : "Nav nekas atrasts citā mapēs",
+ "Two-step verification" : "Divpakāpju verifikācija",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Uzlabota drošība ir iespējota jūsu kontam. Lūdzu autentificējies izmantojot otru faktoru.",
+ "Cancel login" : "Atcelt pieteikšanos",
+ "Please authenticate using the selected factor." : "Lūdzu autentifikācija, izmantojot atlasīto faktoru.",
+ "An error occured while verifying the token" : "Radusies kļūda, pārbaudot pilnvaru"
+},
+"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
new file mode 100644
index 00000000000..2e1cd5877cf
--- /dev/null
+++ b/core/l10n/lv.json
@@ -0,0 +1,301 @@
+{ "translations": {
+ "Please select a file." : "Lūdzu izvēlies failu.",
+ "File is too big" : "Datne ir par lielu",
+ "The selected file is not an image." : "Atlasītais fails nav attēls.",
+ "The selected file cannot be read." : "Atlasīto failu nevar nolasīt.",
+ "Invalid file provided" : "Norādīta nederīga datne",
+ "No image or file provided" : "Nav norādīts attēls vai datne",
+ "Unknown filetype" : "Nezināms datnes tips",
+ "Invalid image" : "Nederīgs attēls",
+ "An error occurred. Please contact your admin." : "Notika kļūda. Lūdzu sazinies ar savu administratoru.",
+ "No temporary profile picture available, try again" : "Profila pagaidu attēls nav pieejams, mēģini vēlreiz",
+ "No crop data provided" : "Nav norādīti apgriešanas dati",
+ "No valid crop data provided" : "Nav norādīti derīgi apgriešanas dati",
+ "Crop is not square" : "Griezums nav kvadrāts",
+ "Couldn't reset password because the token is invalid" : "Nevarēja nomainīt paroli, jo pazīšanās zīme ir nederīga",
+ "Couldn't reset password because the token is expired" : "Nevarēja nomainīt paroli, jo pazīšanās zīmei beidzies derīguma termiņš",
+ "Couldn't send reset email. Please make sure your username is correct." : "Nevarēja nosūtīt paroles maiņas e-pastu. Pārliecinies, ka tavs lietotājvārds ir pareizs.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nevarēja nosūtīt paroles maiņas e-pastu, jo lietotājam nav norādīts e-pasts. Lūdzu sazinies ar savu administratoru.",
+ "%s password reset" : "%s paroles maiņa",
+ "Couldn't send reset email. Please contact your administrator." : "Nevarēja nosūtīt maiņas e-pastu. Lūdzu sazinies ar savu administratoru.",
+ "Preparing update" : "Sagatavo atjauninājumu",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
+ "Repair warning: " : "Labošanas brīdinājums:",
+ "Repair error: " : "Labošanas kļūda:",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Lūdzu izmanto komandrindas atjaunināšanu, jo automātiskā atjaunināšana ir atspējota konfigurācijas datnē config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Pārbauda tabulu %s",
+ "Turned on maintenance mode" : "Ieslēgts uzturēšanas režīms",
+ "Turned off maintenance mode" : "Izslēgts uzturēšanas režīms",
+ "Maintenance mode is kept active" : "Uzturēšanas režīms ir paturēts aktīvs",
+ "Updating database schema" : "Atjaunina datu bāzes shēmu",
+ "Updated database" : "Atjaunināta datu bāze",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Pārbauda vai datu bāzes shēma var būt atjaunināma (tas var prasīt laiku atkarībā no datu bāzes izmēriem)",
+ "Checked database schema update" : "Pārbaudīts datu bāzes shēmas atjauninājums",
+ "Checking updates of apps" : "Pārbauda programmu atjauninājumus",
+ "Updated \"%s\" to %s" : "Atjaunināts \"%s\" uz %s",
+ "Starting code integrity check" : "Uzsākta koda integritātes pārbaude",
+ "Finished code integrity check" : "Pabeigta koda integritātes pārbaude",
+ "%s (3rdparty)" : "%s (citu izstrādātāju)",
+ "%s (incompatible)" : "%s (nesaderīgs)",
+ "Following apps have been disabled: %s" : "Sekojošas programmas tika atslēgtas: %s",
+ "Already up to date" : "Jau ir jaunākā",
+ "Settings" : "Iestatījumi",
+ "Connection to server lost" : "Zaudēts savienojums ar serveri",
+ "Problem loading page, reloading in 5 seconds" : "Problēma ielādējot lapu, pārlādēšana pēc 5 sekundēm",
+ "Saving..." : "Saglabā...",
+ "Dismiss" : "Atmest",
+ "Authentication required" : "Nepieciešama autentifikācija",
+ "Password" : "Parole",
+ "Cancel" : "Atcelt",
+ "Confirm" : "Apstiprināt",
+ "Failed to authenticate, try again" : "Neizdevās autentificēt, mēģiniet vēlreiz",
+ "seconds ago" : "sekundes atpakaļ",
+ "Logging in …" : "Notiek pieteikšanās …",
+ "I know what I'm doing" : "Es zinu ko es daru",
+ "Password can not be changed. Please contact your administrator." : "Paroli, nevar nomainīt. Lūdzu kontaktēties ar savu administratoru.",
+ "No" : "Nē",
+ "Yes" : "Jā",
+ "No files in here" : "Šeit nav datņu",
+ "Choose" : "Izvēlieties",
+ "Error loading file picker template: {error}" : "Kļūda ielādējot izvēlēto veidni: {error}",
+ "Ok" : "Labi",
+ "Error loading message template: {error}" : "Kļūda ielādējot ziņojuma veidni: {error}",
+ "read-only" : "tikai-skatīt",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} datnes konflikts","{count} datnes konflikts","{count} datņu konflikti"],
+ "One file conflict" : "Vienas datnes konflikts",
+ "New Files" : "Jaunas datnes",
+ "Already existing files" : "Jau esošas datnes",
+ "Which files do you want to keep?" : "Kuras datnes vēlies paturēt?",
+ "Continue" : "Turpināt",
+ "(all selected)" : "(visus iezīmētos)",
+ "({count} selected)" : "({count} iezīmēti)",
+ "Very weak password" : "Ļoti vāja parole",
+ "Weak password" : "Vāja parole",
+ "So-so password" : "Normāla parole",
+ "Good password" : "Laba parole",
+ "Strong password" : "Lieliska parole",
+ "Shared" : "Koplietots",
+ "Shared with {recipients}" : "Koplietots ar {recipients}",
+ "Error" : "Kļūda",
+ "Error while sharing" : "Kļūda, daloties",
+ "Error while unsharing" : "Kļūda, beidzot dalīties",
+ "Error setting expiration date" : "Kļūda, iestatot termiņa datumu",
+ "Set expiration date" : "Iestatiet termiņa datumu",
+ "Expiration" : "Termiņš",
+ "Expiration date" : "Termiņa datums",
+ "Choose a password for the public link" : "Izvēlies paroli publiskai saitei",
+ "Copied!" : "Nokopēts!",
+ "Copy" : "Kopēt",
+ "Not supported!" : "Nav atbalstīts!",
+ "Press ⌘-C to copy." : "Spiet ⌘-C lai kopētu.",
+ "Press Ctrl-C to copy." : "Spiet Ctrl-C lai kopētu.",
+ "Resharing is not allowed" : "Atkārtota dalīšanās nav atļauta",
+ "Share link" : "Koplietot saiti",
+ "Link" : "Saite",
+ "Password protect" : "Aizsargāt ar paroli",
+ "Allow upload and editing" : "Atļaut augšupielādi un rediģēšanu",
+ "Allow editing" : "Atļaut rediģēt",
+ "Email link to person" : "Sūtīt saiti personai pa e-pastu",
+ "Send" : "Sūtīt",
+ "Shared with you and the group {group} by {owner}" : "{owner} koplietoja ar jums un grupu {group}",
+ "Shared with you by {owner}" : "{owner} koplietoja ar jums",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} koplietots ar saiti",
+ "group" : "grupa",
+ "remote" : "attālināti",
+ "email" : "e-pasts",
+ "Unshare" : "Pārtraukt koplietošanu",
+ "can edit" : "var rediģēt",
+ "can create" : "var izveidot",
+ "can change" : "var mainīt",
+ "can delete" : "var dzēst",
+ "access control" : "piekļuves vadība",
+ "Could not unshare" : "Nevarēja pārtraukt koplietošanu",
+ "Share details could not be loaded for this item." : "Šim nevarēja ielādēt koplietošanas detaļas.",
+ "No users or groups found for {search}" : "Pēc {search} netika atrasts neviens lietotājs vai grupa",
+ "No users found for {search}" : "Pēc {search} netika atrasts neviens lietotājs",
+ "An error occurred. Please try again" : "Notika kļūda. Mēģini vēlreiz.",
+ "{sharee} (group)" : "{sharee} (grupa)",
+ "{sharee} (remote)" : "{sharee} (attālināti)",
+ "{sharee} (email)" : "{sharee} (e-pasts)",
+ "Share" : "Koplietot",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Koplietot ar personām, kas atrodas citos serveros, izmantojot Federated Cloud ID username@example.com/nextcloud",
+ "Share with users or by mail..." : "Koplietot ar lietotājiem vai izmantojot e-pastu...",
+ "Share with users or groups..." : "Koplietot ar lietotājiem vai grupām...",
+ "Share with users, groups or by mail..." : "Koplietot ar lietotājiem, grupām vai izmantojot e-pastu...",
+ "Share with users..." : "Koplietots ar lietotājiem...",
+ "Error removing share" : "Kļūda, noņemot koplietošanu",
+ "restricted" : "ierobežots",
+ "invisible" : "Neredzams",
+ "({scope})" : "({scope})",
+ "Delete" : "Dzēst",
+ "Rename" : "Pārsaukt",
+ "Collaborative tags" : "Sadarbības atzīmes",
+ "No tags found" : "Netika atrasta neviena atzīme",
+ "The object type is not specified." : "Nav norādīts objekta tips.",
+ "Enter new" : "Ievadīt jaunu",
+ "Add" : "Pievienot",
+ "Edit tags" : "Rediģēt atzīmes",
+ "unknown text" : "nezināms teksts",
+ "Hello world!" : "Sveika, pasaule!",
+ "sunny" : "saulains",
+ "Hello {name}, the weather is {weather}" : "Sveiks {name}, laiks ir {weather}",
+ "Hello {name}" : "Sveiks {name}",
+ "new" : "jauns",
+ "Update to {version}" : "Atjaunināts uz {version}",
+ "An error occurred." : "Radās kļūda.",
+ "Please reload the page." : "Lūdzu, atkārtoti ielādējiet lapu.",
+ "Continue to Nextcloud" : "Turpināt ar Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Atjaunināšana ir bijusi veiksmīga. Tagad novirzīsim jūs uz Nextcloud.",
+ "Searching other places" : "Meklēt citās vietās",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} meklēšanas rezultāti citās mapēs","{count} meklēšanas rezultāti citās mapēs","{count} meklēšanas rezultāti citās mapēs"],
+ "Personal" : "Personīgi",
+ "Users" : "Lietotāji",
+ "Apps" : "Programmas",
+ "Admin" : "Administratori",
+ "Help" : "Palīdzība",
+ "Access forbidden" : "Pieeja ir liegta",
+ "File not found" : "Fails nav atrasts",
+ "The specified document has not been found on the server." : "Norādītais dokuments nav atrasts serverī.",
+ "You can click here to return to %s." : "Jūs varat noklikšķināt šeit, lai atgrieztos uz %s.",
+ "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",
+ "Cheers!" : "Priekā!",
+ "Internal Server Error" : "Iekšēja servera kļūda",
+ "The server encountered an internal error and was unable to complete your request." : "Serverī radās iekšēja kļūda, un tas nevarēja pabeigt jūsu pieprasījumu.",
+ "More details can be found in the server log." : "Sīkāka informācija atrodama servera žurnāl failā.",
+ "Technical details" : "Tehniskās detaļas",
+ "Remote Address: %s" : "Attālinātā adrese: %s",
+ "Request ID: %s" : "Pieprasījuma ID: %s",
+ "Type: %s" : "Tips: %s",
+ "Code: %s" : "Kods: %s",
+ "Message: %s" : "Ziņojums: %s",
+ "File: %s" : "Fails: %s",
+ "Line: %s" : "Līnija: %s",
+ "Trace" : "Izsekot",
+ "Security warning" : "Drošības brīdinājums",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.",
+ "Create an <strong>admin account</strong>" : "Izveidot <strong>administratora kontu</strong>",
+ "Username" : "Lietotājvārds",
+ "Storage & database" : "Krātuve & datubāze",
+ "Data folder" : "Datu mape",
+ "Configure the database" : "Konfigurēt datubāzi",
+ "Only %s is available." : "Tikai %s ir pieejams.",
+ "Database user" : "Datubāzes lietotājs",
+ "Database password" : "Datubāzes parole",
+ "Database name" : "Datubāzes nosaukums",
+ "Database tablespace" : "Datubāzes tabulas telpa",
+ "Database host" : "Datubāzes serveris",
+ "Performance warning" : "Veiktspējas brīdinājums",
+ "SQLite will be used as database." : "SQLite tiks izmantota kā datu bāze.",
+ "Finish setup" : "Pabeigt iestatīšanu",
+ "Finishing …" : "Pabeidz ...",
+ "Need help?" : "Vajadzīga palīdzība?",
+ "See the documentation" : "Skatiet dokumentāciju",
+ "Search" : "Meklēt",
+ "Log out" : "Izrakstīties",
+ "This action requires you to confirm your password:" : "Šī darbība ir nepieciešama, lai apstiprinātu jūsu paroli:",
+ "Confirm your password" : "Apstipriniet paroli",
+ "Server side authentication failed!" : "Servera autentifikācija neizdevās!",
+ "Please contact your administrator." : "Lūdzu, sazinieties ar administratoru.",
+ "An internal error occurred." : "Radās iekšēja kļūda.",
+ "Please try again or contact your administrator." : "Lūdzu, mēģiniet vēlreiz vai sazinieties ar administratoru.",
+ "Username or email" : "Lietotājvārds vai e-pasts",
+ "Wrong password. Reset it?" : "Nepareiza parole. Nodzēst to?",
+ "Wrong password." : "Nepareiza parole.",
+ "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",
+ "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>",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Sazinieties ar sistēmas administratoru, ja šis ziņojums tiek rādīts.. vai parādījās negaidīti",
+ "Thank you for your patience." : "Paldies par jūsu pacietību.",
+ "Two-factor authentication" : "Divpakāpju autentifikācija",
+ "Cancel log in" : "Atcelt pierakstīšanos",
+ "Use backup code" : "Izmantojiet dublēšanas kodu",
+ "You are accessing the server from an untrusted domain." : "Jums ir piekļuve serverim no neuzticama domēna.",
+ "Add \"%s\" as trusted domain" : "Pievienot \"%s\" kā uzticamu domēnu",
+ "App update required" : "Programmai nepieciešama atjaunināšana",
+ "%s will be updated to version %s" : "%s tiks atjaunināts uz versiju %s",
+ "These apps will be updated:" : "Šīs programmas tiks atjauninātas:",
+ "The theme %s has been disabled." : "Tēma %s ir atspējota.",
+ "Start update" : "Sākt atjaunināšanu",
+ "Detailed logs" : "Detalizētas informācijas žurnālfaili",
+ "Update needed" : "Nepieciešama atjaunināšana",
+ "Please use the command line updater because you have a big instance." : "Lūdzu, izmantojiet komandrindas atjauninātāju, jo jums ir liels datu apjoms.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Lai saņemtu palīdzību, skatiet <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentāciju</a>.",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Šis %s serveris pašlaik darbojas uzturēšanas režīmā, tas var ilgt kādu laiku.",
+ "Error tagging" : "Kļūda atzīmējot",
+ "Error untagging" : "Kļūda noņemot atzīmi",
+ "Couldn't send mail to following users: %s " : "Nevarēja nosūtīt e-pastu sekojošiem lietotājiem: %s",
+ "Sunday" : "Svētdiena",
+ "Monday" : "Pirmdiena",
+ "Tuesday" : "Otrdiena",
+ "Wednesday" : "Trešdiena",
+ "Thursday" : "Ceturtdiena",
+ "Friday" : "Piektdiena",
+ "Saturday" : "Sestdiena",
+ "Sun." : "Sv.",
+ "Mon." : "Pr.",
+ "Tue." : "Ot.",
+ "Wed." : "Tr.",
+ "Thu." : "Ce.",
+ "Fri." : "Pk.",
+ "Sat." : "Se.",
+ "Su" : "Sv",
+ "Mo" : "Pr",
+ "Tu" : "Ot",
+ "We" : "Tr",
+ "Th" : "Ce",
+ "Fr" : "Pi",
+ "Sa" : "Se",
+ "January" : "Janvāris",
+ "February" : "Februāris",
+ "March" : "Marts",
+ "April" : "Aprīlis",
+ "May" : "Maijs",
+ "June" : "Jūnijs",
+ "July" : "Jūlijs",
+ "August" : "Augusts",
+ "September" : "Septembris",
+ "October" : "Oktobris",
+ "November" : "Novembris",
+ "December" : "Decembris",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Apr.",
+ "May." : "Mai.",
+ "Jun." : "Jūn.",
+ "Jul." : "Jūl.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dec.",
+ "This server has no working Internet connection. 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." : "Šim serverim nav interneta savienojuma. Tas nozīmē, ka daži līdzekļi, piemēram, ārējo atmiņas montāžas vai trešās puses lietojumprogrammu paziņojumi par atjauninājumiem nedarbosies. Attāli piekļūt failiem un nosūtīt paziņojumu uz e-pastu, iespējams nedarbosies. Mēs ierosinām, izveidot interneta savienojumu ar šo serveri, ja vēlaties, lai visas funkcijas darbotos.",
+ "Hide file listing" : "Paslēpt datņu sarakstu",
+ "Sending ..." : "Sūta...",
+ "Email sent" : "Vēstule nosūtīta",
+ "Send link via email" : "Sūtīt saiti e-pastā",
+ "notify by email" : "ziņot e-pastā",
+ "can share" : "Var koplietot",
+ "create" : "izveidot",
+ "change" : "mainīt",
+ "delete" : "dzēst",
+ "{sharee} (at {server})" : "{sharee} ({server})",
+ "Share with users…" : "Koplietots ar lietotājiem...",
+ "Share with users or groups…" : "Koplietot ar lietotājiem vai grupām ...",
+ "Warning" : "Brīdinājums",
+ "Error while sending notification" : "Kļūda, nosūtot paziņojumu",
+ "Updating to {version}" : "Jaunināt uz {version}",
+ "The update was successful. There were warnings." : "Atjaunināšana ir bijusi veiksmīga. Bija brīdinājumi.",
+ "No search results in other folders" : "Nav nekas atrasts citā mapēs",
+ "Two-step verification" : "Divpakāpju verifikācija",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Uzlabota drošība ir iespējota jūsu kontam. Lūdzu autentificējies izmantojot otru faktoru.",
+ "Cancel login" : "Atcelt pieteikšanos",
+ "Please authenticate using the selected factor." : "Lūdzu autentifikācija, izmantojot atlasīto faktoru.",
+ "An error occured while verifying the token" : "Radusies kļūda, pārbaudot pilnvaru"
+},"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_NO.js b/core/l10n/nb_NO.js
index f7b81bf882b..4a34917025b 100644
--- a/core/l10n/nb_NO.js
+++ b/core/l10n/nb_NO.js
@@ -51,12 +51,15 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "Det oppstod et problem ved lasting av side, laster på nytt om 5 sekunder",
"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",
"Password" : "Passord",
"Cancel" : "Avbryt",
+ "Confirm" : "Bekreft",
+ "Failed to authenticate, try again" : "Autentisering mislyktes, prøv igjen",
"seconds ago" : "for få sekunder siden",
"Logging in …" : "Logger inn...",
"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." : "Lenken for tilbakestilling av passordet ditt er sendt til din e-postadresse. Hvis du ikke mottar den innen rimelig tid, sjekk mappen for søppelpost.<br>Hvis du ikke finner den der, kontakt din lokale administrator.",
- "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?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"I know what I'm doing" : "Jeg vet hva jeg gjør",
"Password can not be changed. Please contact your administrator." : "Passordet kan ikke endres. Kontakt administratoren din.",
"No" : "Nei",
@@ -105,6 +108,7 @@ OC.L10N.register(
"Expiration date" : "Utløpsdato",
"Choose a password for the public link" : "Velg et passord for den offentlige lenken",
"Copied!" : "Kopiert!",
+ "Copy" : "Kopier",
"Not supported!" : "Ikke støttet!",
"Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
"Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere",
@@ -113,6 +117,8 @@ OC.L10N.register(
"Link" : "Lenke",
"Password protect" : "Passordbeskyttet",
"Allow upload and editing" : "Tillatt opplasting og redigering",
+ "Allow editing" : "Tillat redigering",
+ "File drop (upload only)" : "Filkasse (kun opplasting)",
"Email link to person" : "Email lenke til person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}",
@@ -137,6 +143,7 @@ OC.L10N.register(
"{sharee} (remote)" : "{sharee} (ekstern)",
"{sharee} (email)" : "{sharee} (email)",
"Share" : "Del",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Del med andre brukere på andre tjenere ved å bruke «Federated Cloud ID» brukernavn@eksempel.com/nextcloud",
"Share with users or by mail..." : "Del med brukere eller på e-post...",
"Share with users or remote users..." : "Del med brukere eller eksterne brukere...",
"Share with users, remote users or by mail..." : "Del med brukere, eksterne brukere eller på e-post...",
@@ -153,6 +160,7 @@ OC.L10N.register(
"Delete" : "Slett",
"Rename" : "Gi nytt navn",
"Collaborative tags" : "Felles merkelapper",
+ "No tags found" : "Ingen emneknagger funnet",
"The object type is not specified." : "Objekttypen er ikke spesifisert.",
"Enter new" : "Oppgi ny",
"Add" : "Legg til",
@@ -218,6 +226,7 @@ OC.L10N.register(
"Database name" : "Databasenavn",
"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.",
@@ -227,8 +236,10 @@ OC.L10N.register(
"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.",
- "Log out" : "Logg ut",
"Search" : "Søk",
+ "Log out" : "Logg ut",
+ "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.",
"An internal error occurred." : "En intern feil oppstod",
@@ -324,8 +335,8 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Des.",
+ "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?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"This server has no working Internet connection. 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.",
- "Allow editing" : "Tillat redigering",
"Hide file listing" : "Skjul filliste",
"Sending ..." : "Sender...",
"Email sent" : "E-post sendt",
@@ -350,13 +361,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Utvidet sikkerhet har blitt aktivert for din konto. Vennligst autentiser med en andre faktor.",
"Cancel login" : "Avbryt innlogging",
"Please authenticate using the selected factor." : "Vennligst autentiser ved hjelp av den valgte faktoren.",
- "An error occured while verifying the token" : "En feil oppstod under verifisering av nøkkelen",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" 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>.",
- "An error occured. Please try again" : "Det oppstod en feil. Prøv igjen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med personer på andre ownCloud-installasjoner med syntaksen brukernavn@example.com/owncloud",
- "not assignable" : "ikke overdras",
- "Updating {productName} to version {version}, this may take a while." : "Oppdaterer {productName} til versjon {version}, dette kan ta en stund.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.",
- "An internal error occured." : "En intern feil oppstod"
+ "An error occured while verifying the token" : "En feil oppstod under verifisering av nøkkelen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json
index d46d5e6c20a..a7504ffb97f 100644
--- a/core/l10n/nb_NO.json
+++ b/core/l10n/nb_NO.json
@@ -49,12 +49,15 @@
"Problem loading page, reloading in 5 seconds" : "Det oppstod et problem ved lasting av side, laster på nytt om 5 sekunder",
"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",
"Password" : "Passord",
"Cancel" : "Avbryt",
+ "Confirm" : "Bekreft",
+ "Failed to authenticate, try again" : "Autentisering mislyktes, prøv igjen",
"seconds ago" : "for få sekunder siden",
"Logging in …" : "Logger inn...",
"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." : "Lenken for tilbakestilling av passordet ditt er sendt til din e-postadresse. Hvis du ikke mottar den innen rimelig tid, sjekk mappen for søppelpost.<br>Hvis du ikke finner den der, kontakt din lokale administrator.",
- "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?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"I know what I'm doing" : "Jeg vet hva jeg gjør",
"Password can not be changed. Please contact your administrator." : "Passordet kan ikke endres. Kontakt administratoren din.",
"No" : "Nei",
@@ -103,6 +106,7 @@
"Expiration date" : "Utløpsdato",
"Choose a password for the public link" : "Velg et passord for den offentlige lenken",
"Copied!" : "Kopiert!",
+ "Copy" : "Kopier",
"Not supported!" : "Ikke støttet!",
"Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
"Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere",
@@ -111,6 +115,8 @@
"Link" : "Lenke",
"Password protect" : "Passordbeskyttet",
"Allow upload and editing" : "Tillatt opplasting og redigering",
+ "Allow editing" : "Tillat redigering",
+ "File drop (upload only)" : "Filkasse (kun opplasting)",
"Email link to person" : "Email lenke til person",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}",
@@ -135,6 +141,7 @@
"{sharee} (remote)" : "{sharee} (ekstern)",
"{sharee} (email)" : "{sharee} (email)",
"Share" : "Del",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Del med andre brukere på andre tjenere ved å bruke «Federated Cloud ID» brukernavn@eksempel.com/nextcloud",
"Share with users or by mail..." : "Del med brukere eller på e-post...",
"Share with users or remote users..." : "Del med brukere eller eksterne brukere...",
"Share with users, remote users or by mail..." : "Del med brukere, eksterne brukere eller på e-post...",
@@ -151,6 +158,7 @@
"Delete" : "Slett",
"Rename" : "Gi nytt navn",
"Collaborative tags" : "Felles merkelapper",
+ "No tags found" : "Ingen emneknagger funnet",
"The object type is not specified." : "Objekttypen er ikke spesifisert.",
"Enter new" : "Oppgi ny",
"Add" : "Legg til",
@@ -216,6 +224,7 @@
"Database name" : "Databasenavn",
"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.",
@@ -225,8 +234,10 @@
"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.",
- "Log out" : "Logg ut",
"Search" : "Søk",
+ "Log out" : "Logg ut",
+ "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.",
"An internal error occurred." : "En intern feil oppstod",
@@ -322,8 +333,8 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Des.",
+ "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?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"This server has no working Internet connection. 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.",
- "Allow editing" : "Tillat redigering",
"Hide file listing" : "Skjul filliste",
"Sending ..." : "Sender...",
"Email sent" : "E-post sendt",
@@ -348,13 +359,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Utvidet sikkerhet har blitt aktivert for din konto. Vennligst autentiser med en andre faktor.",
"Cancel login" : "Avbryt innlogging",
"Please authenticate using the selected factor." : "Vennligst autentiser ved hjelp av den valgte faktoren.",
- "An error occured while verifying the token" : "En feil oppstod under verifisering av nøkkelen",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" 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>.",
- "An error occured. Please try again" : "Det oppstod en feil. Prøv igjen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med personer på andre ownCloud-installasjoner med syntaksen brukernavn@example.com/owncloud",
- "not assignable" : "ikke overdras",
- "Updating {productName} to version {version}, this may take a while." : "Oppdaterer {productName} til versjon {version}, dette kan ta en stund.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.",
- "An internal error occured." : "En intern feil oppstod"
+ "An error occured while verifying the token" : "En feil oppstod under verifisering av nøkkelen"
},"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 e55607265a9..af191be30b1 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "seconden geleden",
"Logging in …" : "Inloggen...",
"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." : "De link om je wachtwoord te herstellen is per e-mail naar je verstuurd. Als je dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan je spammap. <br>Als het daar niet in zit, neem dan contact op met je beheerder.",
- "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?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?",
+ "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?" : "Je bestanden zijn versleuteld. Het is niet mogelijk om je gegevens terug te krijgen als je wachtwoord wordt gereset.<br />Als je niet zeker weer wat je moet doen, neem dan contact op met je beheerder voordat je verdergaat. <br />Wil je echt verder gaan?",
"I know what I'm doing" : "Ik weet wat ik doe",
"Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"No" : "Nee",
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Link",
"Password protect" : "Wachtwoord beveiligd",
"Allow upload and editing" : "Toestaan uploaden en bewerken",
+ "Allow editing" : "Toestaan bewerken",
"File drop (upload only)" : "File drop (alleen uploaden)",
"Email link to person" : "E-mail link naar persoon",
"Send" : "Versturen",
@@ -230,6 +231,7 @@ OC.L10N.register(
"Database name" : "Naam database",
"Database tablespace" : "Database tablespace",
"Database host" : "Databaseserver",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Geef het poortnummer en servernaam op (bijv. localhost:5432).",
"Performance warning" : "Prestatiewaarschuwing",
"SQLite will be used as database." : "SQLite wordt gebruikt als database.",
"For larger installations we recommend to choose a different database backend." : "Voor grotere installaties adviseren we een andere database engine te kiezen.",
@@ -239,8 +241,8 @@ OC.L10N.register(
"Need help?" : "Hulp nodig?",
"See the documentation" : "Zie de documentatie",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.",
- "Log out" : "Afmelden",
"Search" : "Zoeken",
+ "Log out" : "Afmelden",
"This action requires you to confirm your password:" : "Deze actie vereist dat je je wachtwoord bevestigt:",
"Confirm your password" : "Bevestig je wachtwoord",
"Server side authentication failed!" : "Authenticatie bij de server mislukte!",
@@ -338,9 +340,9 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
+ "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?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?",
"This server has no working Internet connection. 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." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie e-mails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.",
- "Allow editing" : "Toestaan bewerken",
"Hide file listing" : "Verberg bestandsoverzicht",
"Sending ..." : "Versturen ...",
"Email sent" : "E-mail verzonden",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Aanvullende beveiliging is ingeschakeld voor je account. Log in met een tweede factor.",
"Cancel login" : "Inlog annuleren",
"Please authenticate using the selected factor." : "Log in met de geselecteerde factor.",
- "An error occured while verifying the token" : "Er trad een fout op bij het verifiëren van het token",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Je webserver is niet goed ingesteld om \"{url}\" te vinden. Meer informatie is te vinden in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kun je de memcache configureren als die beschikbaar is. Meer informatie vind je in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Je draait momenteel PHP {version}. We adviseren je om, zo gauw je distributie dat biedt, je PHP versie bij te werken voor betere <a target=\"_blank\" href=\"{phpLink}\">prestaties en beveiliging geleverd door de PHP Group</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\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dat een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze<a target=\"_blank\" href=\"{docLink}\">documentatie</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki over beide modules</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lijst met ongeldige bestanden…</a> / <a href=\"{rescanEndpoint}\">Opnieuw scannen…</a>)",
- "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}\">security tips</a>." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd met minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.",
- "An error occured. Please try again" : "Er trad een fout op. Probeer het opnieuw",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Delen met mensen op andere ownClouds via de syntax gebruikersnaam@voorbeeld.org/owncloud",
- "not assignable" : "niet-toewijsbaar",
- "Updating {productName} to version {version}, this may take a while." : "Updaten {productName} naar versie {version}, dit kan even duren.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van je server.",
- "An internal error occured." : "Er heeft zich een interne fout voorgedaan."
+ "An error occured while verifying the token" : "Er trad een fout op bij het verifiëren van het token"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index b365758f196..c53918ff27a 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -58,7 +58,7 @@
"seconds ago" : "seconden geleden",
"Logging in …" : "Inloggen...",
"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." : "De link om je wachtwoord te herstellen is per e-mail naar je verstuurd. Als je dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan je spammap. <br>Als het daar niet in zit, neem dan contact op met je beheerder.",
- "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?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?",
+ "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?" : "Je bestanden zijn versleuteld. Het is niet mogelijk om je gegevens terug te krijgen als je wachtwoord wordt gereset.<br />Als je niet zeker weer wat je moet doen, neem dan contact op met je beheerder voordat je verdergaat. <br />Wil je echt verder gaan?",
"I know what I'm doing" : "Ik weet wat ik doe",
"Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"No" : "Nee",
@@ -120,6 +120,7 @@
"Link" : "Link",
"Password protect" : "Wachtwoord beveiligd",
"Allow upload and editing" : "Toestaan uploaden en bewerken",
+ "Allow editing" : "Toestaan bewerken",
"File drop (upload only)" : "File drop (alleen uploaden)",
"Email link to person" : "E-mail link naar persoon",
"Send" : "Versturen",
@@ -228,6 +229,7 @@
"Database name" : "Naam database",
"Database tablespace" : "Database tablespace",
"Database host" : "Databaseserver",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Geef het poortnummer en servernaam op (bijv. localhost:5432).",
"Performance warning" : "Prestatiewaarschuwing",
"SQLite will be used as database." : "SQLite wordt gebruikt als database.",
"For larger installations we recommend to choose a different database backend." : "Voor grotere installaties adviseren we een andere database engine te kiezen.",
@@ -237,8 +239,8 @@
"Need help?" : "Hulp nodig?",
"See the documentation" : "Zie de documentatie",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.",
- "Log out" : "Afmelden",
"Search" : "Zoeken",
+ "Log out" : "Afmelden",
"This action requires you to confirm your password:" : "Deze actie vereist dat je je wachtwoord bevestigt:",
"Confirm your password" : "Bevestig je wachtwoord",
"Server side authentication failed!" : "Authenticatie bij de server mislukte!",
@@ -336,9 +338,9 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
+ "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?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?",
"This server has no working Internet connection. 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." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie e-mails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.",
- "Allow editing" : "Toestaan bewerken",
"Hide file listing" : "Verberg bestandsoverzicht",
"Sending ..." : "Versturen ...",
"Email sent" : "E-mail verzonden",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Aanvullende beveiliging is ingeschakeld voor je account. Log in met een tweede factor.",
"Cancel login" : "Inlog annuleren",
"Please authenticate using the selected factor." : "Log in met de geselecteerde factor.",
- "An error occured while verifying the token" : "Er trad een fout op bij het verifiëren van het token",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Je webserver is niet goed ingesteld om \"{url}\" te vinden. Meer informatie is te vinden in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kun je de memcache configureren als die beschikbaar is. Meer informatie vind je in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Je draait momenteel PHP {version}. We adviseren je om, zo gauw je distributie dat biedt, je PHP versie bij te werken voor betere <a target=\"_blank\" href=\"{phpLink}\">prestaties en beveiliging geleverd door de PHP Group</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\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dat een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze<a target=\"_blank\" href=\"{docLink}\">documentatie</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki over beide modules</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze <a target=\"_blank\" href=\"{docLink}\">documentatie</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lijst met ongeldige bestanden…</a> / <a href=\"{rescanEndpoint}\">Opnieuw scannen…</a>)",
- "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}\">security tips</a>." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd met minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.",
- "An error occured. Please try again" : "Er trad een fout op. Probeer het opnieuw",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Delen met mensen op andere ownClouds via de syntax gebruikersnaam@voorbeeld.org/owncloud",
- "not assignable" : "niet-toewijsbaar",
- "Updating {productName} to version {version}, this may take a while." : "Updaten {productName} naar versie {version}, dit kan even duren.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van je server.",
- "An internal error occured." : "Er heeft zich een interne fout voorgedaan."
+ "An error occured while verifying the token" : "Er trad een fout op bij het verifiëren van het token"
},"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 40cdd2b3fc0..44bb7d06d17 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -45,18 +45,21 @@ OC.L10N.register(
"%s (incompatible)" : "%s (niekompatybilne)",
"Following apps have been disabled: %s" : "Poniższe aplikacje zostały wyłączone: %s",
"Already up to date" : "Już zaktualizowano",
- "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Sprawdzenie spójności kodu nie wykazało problemów. Więcej informacji…</a>",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Wystąpiły problemy przy sprawdzaniu integralności kodu Więcej informacji…</a>",
"Settings" : "Ustawienia",
"Connection to server lost" : "Utracone połączenie z serwerem",
"Problem loading page, reloading in 5 seconds" : "Błąd podczas ładowania strony, odświeżanie w ciągu 5 sekund.",
"Saving..." : "Zapisywanie...",
"Dismiss" : "Anuluj",
+ "This action requires you to confirm your password" : "Ta akcja wymaga potwierdzenia hasłem",
+ "Authentication required" : "Wymagana autoryzacja",
"Password" : "Hasło",
"Cancel" : "Anuluj",
+ "Confirm" : "Potwierdź",
+ "Failed to authenticate, try again" : "Nie udało się uwierzytelnić, spróbuj ponownie.",
"seconds ago" : "sekund temu",
"Logging in …" : "Logowanie …",
"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." : "Link do zresetowanego hasła, został wysłany na twój adres e-mail. Jeśli nie dostałeś wiadomości w rozsądnym czasie, sprawdź folder ze spamem.<br> Jeśli nie ma wiadomości w tym folderze, skontaktuj się ze swoim administratorem.",
- "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?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"I know what I'm doing" : "Wiem co robię",
"Password can not be changed. Please contact your administrator." : "Hasło nie może zostać zmienione. Skontaktuj się z administratorem.",
"No" : "Nie",
@@ -67,7 +70,7 @@ OC.L10N.register(
"Ok" : "OK",
"Error loading message template: {error}" : "Błąd podczas ładowania szablonu wiadomości: {error}",
"read-only" : "tylko odczyt",
- "_{count} file conflict_::_{count} file conflicts_" : ["{count} konfliktów plików","{count} konfliktów plików","{count} konfliktów plików"],
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konfliktów plików","{count} konfliktów plików","{count} konfliktów plików","{count} konfliktów plików"],
"One file conflict" : "Konflikt pliku",
"New Files" : "Nowe pliki",
"Already existing files" : "Już istniejące pliki",
@@ -82,15 +85,16 @@ OC.L10N.register(
"Weak password" : "Słabe hasło",
"So-so password" : "Mało skomplikowane hasło",
"Good password" : "Dobre hasło",
- "Strong password" : "Mocne hasło",
+ "Strong password" : "Silne hasło",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Serwer WWW nie jest jeszcze na tyle poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.",
"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>." : "Serwer WWW nie jest poprawnie skonfigurowany, aby wyświetlić \"{url}\". Więcej informacji można znaleźć w naszej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentacji</a>.",
"Error occurred while checking server setup" : "Pojawił się błąd podczas sprawdzania ustawień serwera",
+ "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>." : "Dostęp do tej strony jest za pośrednictwem protokołu HTTP. Zalecamy skonfigurowanie dostępu do serwera za pomocą protokołu HTTPS zamiast HTTP, jak to opisano w naszych <a href=\"{docUrl}\">wskazówkach bezpieczeństwa</a>.",
"Shared" : "Udostępniono",
"Shared with {recipients}" : "Współdzielony z {recipients}",
"Error" : "Błąd",
- "Error while sharing" : "Błąd podczas współdzielenia",
- "Error while unsharing" : "Błąd podczas zatrzymywania współdzielenia",
+ "Error while sharing" : "Błąd podczas udostępniania",
+ "Error while unsharing" : "Błąd podczas zatrzymywania udostepniania",
"Error setting expiration date" : "Błąd podczas ustawiania daty wygaśnięcia",
"The public link will expire no later than {days} days after it is created" : "Link publiczny wygaśnie nie później niż po {days} dniach od utworzenia",
"Set expiration date" : "Ustaw datę wygaśnięcia",
@@ -98,6 +102,7 @@ OC.L10N.register(
"Expiration date" : "Data wygaśnięcia",
"Choose a password for the public link" : "Wybierz hasło dla linku publicznego",
"Copied!" : "Skopiowano!",
+ "Copy" : "Skopiuj",
"Not supported!" : "Brak wsparcia!",
"Press ⌘-C to copy." : "Wciśnij ⌘-C by skopiować.",
"Press Ctrl-C to copy." : "Wciśnij Ctrl-C by skopiować,",
@@ -106,6 +111,7 @@ OC.L10N.register(
"Link" : "Odnośnik",
"Password protect" : "Zabezpiecz hasłem",
"Allow upload and editing" : "Pozwól na przesyłanie i edycję",
+ "Allow editing" : "Pozwól na edycję",
"Email link to person" : "Wyślij osobie odnośnik poprzez e-mail",
"Send" : "Wyślij",
"Shared with you and the group {group} by {owner}" : "Udostępnione tobie i grupie {group} przez {owner}",
@@ -117,6 +123,9 @@ OC.L10N.register(
"Unshare" : "Zatrzymaj współdzielenie",
"can reshare" : "mogą udostępniać",
"can edit" : "może edytować",
+ "can create" : "może utworzyć",
+ "can change" : "może zmienić",
+ "can delete" : "może usunąć",
"access control" : "kontrola dostępu",
"Could not unshare" : "Nie udało się usunąć udostępnienia",
"Share details could not be loaded for this item." : "Szczegóły udziału nie mogły zostać wczytane dla tego obiektu.",
@@ -125,7 +134,16 @@ OC.L10N.register(
"An error occurred. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.",
"{sharee} (group)" : "{sharee} (grupa)",
"{sharee} (remote)" : "{sharee} (zdalny)",
+ "{sharee} (email)" : "{sharee} (email)",
"Share" : "Udostępnij",
+ "Share with users or by mail..." : "Współdziel z użytkownikami lub poprzez mail...",
+ "Share with users or remote users..." : "Współdziel z użytkownikami lub zdalnymi użytkownikami...",
+ "Share with users, remote users or by mail..." : "Współdziel z użytkownikami, zdalnymi użytkownikami lub poprzez mail...",
+ "Share with users or groups..." : "Współdziel z użytkownikami lub grupami",
+ "Share with users, groups or by mail..." : "Współdziel z użytkownikami, grupami lub poprzez mail...",
+ "Share with users, groups or remote users..." : "Współdziel z użytkownikami, grupami lub zdalnymi użytkownikami...",
+ "Share with users, groups, remote users or by mail..." : "Współdziel z użytkownikami, grupami, zdalnymi użytkownikami lub poprzez mail...",
+ "Share with users..." : "Współdziel z użytkownikami...",
"Error removing share" : "Błąd podczas usuwania współdzielenia",
"Non-existing tag #{tag}" : "Znacznik #{tag} nie istnieje",
"restricted" : "ograniczone",
@@ -134,6 +152,7 @@ OC.L10N.register(
"Delete" : "Usuń",
"Rename" : "Zmień nazwę",
"Collaborative tags" : "Wspólne tagi",
+ "No tags found" : "Nie znaleziono etykiet",
"The object type is not specified." : "Nie określono typu obiektu.",
"Enter new" : "Wpisz nowy",
"Add" : "Dodaj",
@@ -146,7 +165,7 @@ OC.L10N.register(
"Hello {name}, the weather is {weather}" : "Cześć {name}, dzisiejsza pogoda jest {weather}",
"Hello {name}" : "Witaj {name}",
"new" : "nowy",
- "_download %n file_::_download %n files_" : ["pobrano %n plik","pobrano %n plików","pobrano %n plików"],
+ "_download %n file_::_download %n files_" : ["pobrano %n plik","pobrano %n plików","pobrano %n plików","pobrano %n plików"],
"The update is in progress, leaving this page might interrupt the process in some environments." : "Trwa aktualizacja. W niektórych przypadkach, opuszczenie tej strony może przerwać ten proces.",
"Update to {version}" : "Uaktualnij do {version}",
"An error occurred." : "Wystąpił błąd",
@@ -157,7 +176,7 @@ OC.L10N.register(
"The update was successful. Redirecting you to Nextcloud now." : "Aktualizacja przebiegła pomyślnie. Trwa przekierowywanie do Nextcloud.",
"Searching other places" : "Przeszukaj inne miejsca",
"No search results in other folders for '{tag}{filter}{endtag}'" : "Brak wyników wyszukiwania w innych folderach '{tag}{filter}{endtag}'",
- "_{count} search result in another folder_::_{count} search results in other folders_" : ["Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} "],
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} "],
"Personal" : "Osobiste",
"Users" : "Użytkownicy",
"Apps" : "Aplikacje",
@@ -170,7 +189,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!",
- "Internal Server Error" : "Internal Server Error",
+ "Internal Server Error" : "Błąd wewnętrzny serwera",
"The server encountered an internal error and was unable to complete your request." : "Serwer napotkał błąd wewnętrzny i nie był w stanie ukończyć Twojego żądania.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Proszę skontaktować się z administratorem jeśli ten błąd będzie się pojawiał wielokrotnie, proszę do zgłoszenia dołączyć szczegóły techniczne opisane poniżej.",
"More details can be found in the server log." : "Więcej szczegółów można znaleźć w logu serwera.",
@@ -199,6 +218,7 @@ OC.L10N.register(
"Database name" : "Nazwa bazy danych",
"Database tablespace" : "Obszar tabel bazy danych",
"Database host" : "Komputer bazy danych",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Wskaż proszę numer portu wraz z adresem (np. localhost:5432).",
"Performance warning" : "Ostrzeżenie o wydajności",
"SQLite will be used as database." : "SQLite będzie używane jako baza danych.",
"For larger installations we recommend to choose a different database backend." : "Dla większych instalacji zalecamy użycie innej bazy danych.",
@@ -208,8 +228,10 @@ OC.L10N.register(
"Need help?" : "Potrzebujesz pomocy?",
"See the documentation" : "Zapoznaj się z dokumentacją",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę {linkstart}włączyć JavaScript{linkend} i przeładować stronę.",
- "Log out" : "Wyloguj",
"Search" : "Wyszukaj",
+ "Log out" : "Wyloguj",
+ "This action requires you to confirm your password:" : "Ta akcja wymaga potwierdzenia hasłem:",
+ "Confirm your password" : "Potwierdź hasło",
"Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!",
"Please contact your administrator." : "Skontaktuj się z administratorem",
"An internal error occurred." : "Wystąpił wewnętrzny błąd.",
@@ -305,7 +327,7 @@ OC.L10N.register(
"Oct." : "Paź.",
"Nov." : "Lis.",
"Dec." : "Gru.",
- "Allow editing" : "Pozwól na edycję",
+ "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?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"Hide file listing" : "Schowaj listę plików",
"Sending ..." : "Wysyłanie...",
"Email sent" : "E-mail wysłany",
@@ -330,13 +352,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Dla Twojego konta uruchomiono wzmocnioną ochronę. Uwierzytelnij przy pomocy drugiego składnika.",
"Cancel login" : "Anuluj logowanie",
"Please authenticate using the selected factor." : "Uwierzytelnij przy pomocy wybranego składnika",
- "An error occured while verifying the token" : "Wystąpił błąd podczas weryfikacji tokena",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Serwer WWW nie jest poprawnie skonfigurowany, aby wyświetlić \"{url}\". Więcej informacji można znaleźć w naszej <a target=\"_blank\" href=\"{docLink}\">dokumentacji</a>.",
- "An error occured. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Współdziel z użytkownikami innych chmur ownCloud używając wzorca uzytkownik@example.com/owncloud",
- "not assignable" : "nie przypisane",
- "Updating {productName} to version {version}, this may take a while." : "AKtualizowanie {productName} do wersji {version}, może to trochę potrwać.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Aby uzyskać informację jak poprawnie skonfigurować Twój serwer, zajrzyj do <a href=\"%s\" target=\"_blank\">dokumentacji</a>.",
- "An internal error occured." : "Wystąpił wewnętrzny błąd."
+ "An error occured while verifying the token" : "Wystąpił błąd podczas weryfikacji tokena"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index 13d1382ee4c..a7ccd87a34c 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -43,18 +43,21 @@
"%s (incompatible)" : "%s (niekompatybilne)",
"Following apps have been disabled: %s" : "Poniższe aplikacje zostały wyłączone: %s",
"Already up to date" : "Już zaktualizowano",
- "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Sprawdzenie spójności kodu nie wykazało problemów. Więcej informacji…</a>",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Wystąpiły problemy przy sprawdzaniu integralności kodu Więcej informacji…</a>",
"Settings" : "Ustawienia",
"Connection to server lost" : "Utracone połączenie z serwerem",
"Problem loading page, reloading in 5 seconds" : "Błąd podczas ładowania strony, odświeżanie w ciągu 5 sekund.",
"Saving..." : "Zapisywanie...",
"Dismiss" : "Anuluj",
+ "This action requires you to confirm your password" : "Ta akcja wymaga potwierdzenia hasłem",
+ "Authentication required" : "Wymagana autoryzacja",
"Password" : "Hasło",
"Cancel" : "Anuluj",
+ "Confirm" : "Potwierdź",
+ "Failed to authenticate, try again" : "Nie udało się uwierzytelnić, spróbuj ponownie.",
"seconds ago" : "sekund temu",
"Logging in …" : "Logowanie …",
"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." : "Link do zresetowanego hasła, został wysłany na twój adres e-mail. Jeśli nie dostałeś wiadomości w rozsądnym czasie, sprawdź folder ze spamem.<br> Jeśli nie ma wiadomości w tym folderze, skontaktuj się ze swoim administratorem.",
- "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?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"I know what I'm doing" : "Wiem co robię",
"Password can not be changed. Please contact your administrator." : "Hasło nie może zostać zmienione. Skontaktuj się z administratorem.",
"No" : "Nie",
@@ -65,7 +68,7 @@
"Ok" : "OK",
"Error loading message template: {error}" : "Błąd podczas ładowania szablonu wiadomości: {error}",
"read-only" : "tylko odczyt",
- "_{count} file conflict_::_{count} file conflicts_" : ["{count} konfliktów plików","{count} konfliktów plików","{count} konfliktów plików"],
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konfliktów plików","{count} konfliktów plików","{count} konfliktów plików","{count} konfliktów plików"],
"One file conflict" : "Konflikt pliku",
"New Files" : "Nowe pliki",
"Already existing files" : "Już istniejące pliki",
@@ -80,15 +83,16 @@
"Weak password" : "Słabe hasło",
"So-so password" : "Mało skomplikowane hasło",
"Good password" : "Dobre hasło",
- "Strong password" : "Mocne hasło",
+ "Strong password" : "Silne hasło",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Serwer WWW nie jest jeszcze na tyle poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.",
"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>." : "Serwer WWW nie jest poprawnie skonfigurowany, aby wyświetlić \"{url}\". Więcej informacji można znaleźć w naszej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentacji</a>.",
"Error occurred while checking server setup" : "Pojawił się błąd podczas sprawdzania ustawień serwera",
+ "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>." : "Dostęp do tej strony jest za pośrednictwem protokołu HTTP. Zalecamy skonfigurowanie dostępu do serwera za pomocą protokołu HTTPS zamiast HTTP, jak to opisano w naszych <a href=\"{docUrl}\">wskazówkach bezpieczeństwa</a>.",
"Shared" : "Udostępniono",
"Shared with {recipients}" : "Współdzielony z {recipients}",
"Error" : "Błąd",
- "Error while sharing" : "Błąd podczas współdzielenia",
- "Error while unsharing" : "Błąd podczas zatrzymywania współdzielenia",
+ "Error while sharing" : "Błąd podczas udostępniania",
+ "Error while unsharing" : "Błąd podczas zatrzymywania udostepniania",
"Error setting expiration date" : "Błąd podczas ustawiania daty wygaśnięcia",
"The public link will expire no later than {days} days after it is created" : "Link publiczny wygaśnie nie później niż po {days} dniach od utworzenia",
"Set expiration date" : "Ustaw datę wygaśnięcia",
@@ -96,6 +100,7 @@
"Expiration date" : "Data wygaśnięcia",
"Choose a password for the public link" : "Wybierz hasło dla linku publicznego",
"Copied!" : "Skopiowano!",
+ "Copy" : "Skopiuj",
"Not supported!" : "Brak wsparcia!",
"Press ⌘-C to copy." : "Wciśnij ⌘-C by skopiować.",
"Press Ctrl-C to copy." : "Wciśnij Ctrl-C by skopiować,",
@@ -104,6 +109,7 @@
"Link" : "Odnośnik",
"Password protect" : "Zabezpiecz hasłem",
"Allow upload and editing" : "Pozwól na przesyłanie i edycję",
+ "Allow editing" : "Pozwól na edycję",
"Email link to person" : "Wyślij osobie odnośnik poprzez e-mail",
"Send" : "Wyślij",
"Shared with you and the group {group} by {owner}" : "Udostępnione tobie i grupie {group} przez {owner}",
@@ -115,6 +121,9 @@
"Unshare" : "Zatrzymaj współdzielenie",
"can reshare" : "mogą udostępniać",
"can edit" : "może edytować",
+ "can create" : "może utworzyć",
+ "can change" : "może zmienić",
+ "can delete" : "może usunąć",
"access control" : "kontrola dostępu",
"Could not unshare" : "Nie udało się usunąć udostępnienia",
"Share details could not be loaded for this item." : "Szczegóły udziału nie mogły zostać wczytane dla tego obiektu.",
@@ -123,7 +132,16 @@
"An error occurred. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.",
"{sharee} (group)" : "{sharee} (grupa)",
"{sharee} (remote)" : "{sharee} (zdalny)",
+ "{sharee} (email)" : "{sharee} (email)",
"Share" : "Udostępnij",
+ "Share with users or by mail..." : "Współdziel z użytkownikami lub poprzez mail...",
+ "Share with users or remote users..." : "Współdziel z użytkownikami lub zdalnymi użytkownikami...",
+ "Share with users, remote users or by mail..." : "Współdziel z użytkownikami, zdalnymi użytkownikami lub poprzez mail...",
+ "Share with users or groups..." : "Współdziel z użytkownikami lub grupami",
+ "Share with users, groups or by mail..." : "Współdziel z użytkownikami, grupami lub poprzez mail...",
+ "Share with users, groups or remote users..." : "Współdziel z użytkownikami, grupami lub zdalnymi użytkownikami...",
+ "Share with users, groups, remote users or by mail..." : "Współdziel z użytkownikami, grupami, zdalnymi użytkownikami lub poprzez mail...",
+ "Share with users..." : "Współdziel z użytkownikami...",
"Error removing share" : "Błąd podczas usuwania współdzielenia",
"Non-existing tag #{tag}" : "Znacznik #{tag} nie istnieje",
"restricted" : "ograniczone",
@@ -132,6 +150,7 @@
"Delete" : "Usuń",
"Rename" : "Zmień nazwę",
"Collaborative tags" : "Wspólne tagi",
+ "No tags found" : "Nie znaleziono etykiet",
"The object type is not specified." : "Nie określono typu obiektu.",
"Enter new" : "Wpisz nowy",
"Add" : "Dodaj",
@@ -144,7 +163,7 @@
"Hello {name}, the weather is {weather}" : "Cześć {name}, dzisiejsza pogoda jest {weather}",
"Hello {name}" : "Witaj {name}",
"new" : "nowy",
- "_download %n file_::_download %n files_" : ["pobrano %n plik","pobrano %n plików","pobrano %n plików"],
+ "_download %n file_::_download %n files_" : ["pobrano %n plik","pobrano %n plików","pobrano %n plików","pobrano %n plików"],
"The update is in progress, leaving this page might interrupt the process in some environments." : "Trwa aktualizacja. W niektórych przypadkach, opuszczenie tej strony może przerwać ten proces.",
"Update to {version}" : "Uaktualnij do {version}",
"An error occurred." : "Wystąpił błąd",
@@ -155,7 +174,7 @@
"The update was successful. Redirecting you to Nextcloud now." : "Aktualizacja przebiegła pomyślnie. Trwa przekierowywanie do Nextcloud.",
"Searching other places" : "Przeszukaj inne miejsca",
"No search results in other folders for '{tag}{filter}{endtag}'" : "Brak wyników wyszukiwania w innych folderach '{tag}{filter}{endtag}'",
- "_{count} search result in another folder_::_{count} search results in other folders_" : ["Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} "],
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} ","Liczba wyników wyszukiwania w innych folderach - {count} "],
"Personal" : "Osobiste",
"Users" : "Użytkownicy",
"Apps" : "Aplikacje",
@@ -168,7 +187,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!",
- "Internal Server Error" : "Internal Server Error",
+ "Internal Server Error" : "Błąd wewnętrzny serwera",
"The server encountered an internal error and was unable to complete your request." : "Serwer napotkał błąd wewnętrzny i nie był w stanie ukończyć Twojego żądania.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Proszę skontaktować się z administratorem jeśli ten błąd będzie się pojawiał wielokrotnie, proszę do zgłoszenia dołączyć szczegóły techniczne opisane poniżej.",
"More details can be found in the server log." : "Więcej szczegółów można znaleźć w logu serwera.",
@@ -197,6 +216,7 @@
"Database name" : "Nazwa bazy danych",
"Database tablespace" : "Obszar tabel bazy danych",
"Database host" : "Komputer bazy danych",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Wskaż proszę numer portu wraz z adresem (np. localhost:5432).",
"Performance warning" : "Ostrzeżenie o wydajności",
"SQLite will be used as database." : "SQLite będzie używane jako baza danych.",
"For larger installations we recommend to choose a different database backend." : "Dla większych instalacji zalecamy użycie innej bazy danych.",
@@ -206,8 +226,10 @@
"Need help?" : "Potrzebujesz pomocy?",
"See the documentation" : "Zapoznaj się z dokumentacją",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ta aplikacja wymaga JavaScript do poprawnego działania. Proszę {linkstart}włączyć JavaScript{linkend} i przeładować stronę.",
- "Log out" : "Wyloguj",
"Search" : "Wyszukaj",
+ "Log out" : "Wyloguj",
+ "This action requires you to confirm your password:" : "Ta akcja wymaga potwierdzenia hasłem:",
+ "Confirm your password" : "Potwierdź hasło",
"Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!",
"Please contact your administrator." : "Skontaktuj się z administratorem",
"An internal error occurred." : "Wystąpił wewnętrzny błąd.",
@@ -303,7 +325,7 @@
"Oct." : "Paź.",
"Nov." : "Lis.",
"Dec." : "Gru.",
- "Allow editing" : "Pozwól na edycję",
+ "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?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"Hide file listing" : "Schowaj listę plików",
"Sending ..." : "Wysyłanie...",
"Email sent" : "E-mail wysłany",
@@ -328,13 +350,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Dla Twojego konta uruchomiono wzmocnioną ochronę. Uwierzytelnij przy pomocy drugiego składnika.",
"Cancel login" : "Anuluj logowanie",
"Please authenticate using the selected factor." : "Uwierzytelnij przy pomocy wybranego składnika",
- "An error occured while verifying the token" : "Wystąpił błąd podczas weryfikacji tokena",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Serwer WWW nie jest poprawnie skonfigurowany, aby wyświetlić \"{url}\". Więcej informacji można znaleźć w naszej <a target=\"_blank\" href=\"{docLink}\">dokumentacji</a>.",
- "An error occured. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Współdziel z użytkownikami innych chmur ownCloud używając wzorca uzytkownik@example.com/owncloud",
- "not assignable" : "nie przypisane",
- "Updating {productName} to version {version}, this may take a while." : "AKtualizowanie {productName} do wersji {version}, może to trochę potrwać.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Aby uzyskać informację jak poprawnie skonfigurować Twój serwer, zajrzyj do <a href=\"%s\" target=\"_blank\">dokumentacji</a>.",
- "An internal error occured." : "Wystąpił wewnętrzny błąd."
+ "An error occured while verifying the token" : "Wystąpił błąd podczas weryfikacji tokena"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 13c091dea2b..7f5bea95d53 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "segundos atrás",
"Logging in …" : "Logando ...",
"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 do local.",
- "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. 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",
@@ -100,7 +100,7 @@ OC.L10N.register(
"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 estão, provavelmente, acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Nós sugerimos que você configure o servidor web de uma forma 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 \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.",
"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>." : "O \"Strict-Transport-Security\" cabeçalho HTTP não está configurado para pelo menos \"{segundos}\" segundos. Para maior segurança recomendamos a ativação HSTS como descrito em nossas <a href=\"{docUrl}\" rel=\"noreferrer\">dicas de segurança</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>." : "Você está acessando este site via HTTP. Nós fortemente sugerimos que você ao invéz, configure o servidor para exigir o uso de HTTPS como descrito em nossas <a href=\"{docUrl}\">dicas de segurança</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>." : "Você está acessando este site via HTTP. Nós sugerimos fortemente que você configure o servidor para exigir o uso de HTTPS como descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
"Shared" : "Compartilhado",
"Shared with {recipients}" : "Compartilhado com {recipients}",
"Error" : "Erro",
@@ -122,6 +122,7 @@ OC.L10N.register(
"Link" : "Link",
"Password protect" : "Proteger com senha",
"Allow upload and editing" : "Permitir envio e edição",
+ "Allow editing" : "Permitir edição",
"File drop (upload only)" : "Zona de arquivos (somente upload)",
"Email link to person" : "Enviar link por e-mail",
"Send" : "Enviar",
@@ -230,6 +231,7 @@ OC.L10N.register(
"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 número de porta e o nome do host (e.g., localhost:5432).",
"Performance warning" : "Performance de alerta",
"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.",
@@ -239,8 +241,8 @@ 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 JavaScript{linkend} e recerregue a página.",
- "Log out" : "Sair",
"Search" : "Perquisar",
+ "Log out" : "Sair",
"This action requires you to confirm your password:" : "Essa ação requer confirmação da sua senha:",
"Confirm your password" : "Confirme sua senha",
"Server side authentication failed!" : "Autenticação do servidor falhou!",
@@ -281,7 +283,7 @@ OC.L10N.register(
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar tempos de espera com instalações maiores, você pode em vez disso executar o seguinte comando a partir do diretório de instalação:",
"Detailed logs" : "Logs detalhados",
"Update needed" : "Atualização necessária",
- "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem um grande exemplo.",
+ "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem muitos dados em sua instância.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para obter ajuda, consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação</a>.",
"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 esta instância %s estiver disponível novamente.",
@@ -338,9 +340,9 @@ OC.L10N.register(
"Oct." : "Out.",
"Nov." : "Nov.",
"Dec." : "Dez.",
+ "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?",
"This server has no working Internet connection. 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. Isso significa que alguns dos recursos como montar armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não estiver acessando ownCloud de um proxy de confiança, esta é uma questão de segurança e pode permitir a um invasor falsificar o endereço IP como visíveis para ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "Allow editing" : "Permitir edição",
"Hide file listing" : "Listar arquivo oculto",
"Sending ..." : "Enviando ...",
"Email sent" : "E-mail enviado",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Segurança reforçada foi ativada para sua conta. Por favor autenticar usando um segundo fator.",
"Cancel login" : "Cancelar o login",
"Please authenticate using the selected factor." : "Por favor autenticar usando o fator selecionado.",
- "An error occured while verifying the token" : "Ocorreu um erro ao verificar o token",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Seu servidor web não está configurado corretamente para abrir a URL \"{url}\". Mais informações podem ser encontradas em nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um cache de memória, se disponível. Mais informações podem ser encontradas em nossa <a target=\"_blank\" 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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom não é legível pelo PHP que é altamente desencorajado por razões de segurança. Mais informação pode ser encontrada na nossa <a target=\"_blank\" 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\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Você está rodando o PHP {version}. Nós o incentivamos a atualizar sua versão do PHP para aproveitar <a target=\"_blank\" href=\"{phpLink}\"> atualizações de desempenho e de segurança fornecidos pelo Grupo PHP </a>, logo que a sua distribuição for compatível.",
- "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\" href=\"{docLink}\">documentation</a>." : "A configuração cabeçalhos do proxy reverso está incorreta, ou você está acessando Nextcloud de um proxy confiável. Se você não estiver acessando Nextcloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar o endereço IP como visíveis para Nextcloud. Mais informações podem ser encontradas em nossa <a target=\"_blank\" 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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached é 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 target=\"_blank\" href=\"{wikiLink}\">memcached wiki 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\" 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\" href=\"{docLink}\">documentação</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de arquivos inválidos…</a> / <a href=\"{rescanEndpoint}\">Reescanear…</a>)",
- "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}\">security tips</a>." : "O cabeçalho HTTP \"Strict-Transport-Security\" não está configurado para pelo menos \"{seconds}\" segundos. Para maior segurança recomendamos a ativação HSTS como descrito em nosso <a href=\"{docUrl}\">dicas de segurança</a>.",
- "An error occured. Please try again" : "Ocorreu um erro. Tente novamente",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartilhar com usuários em outros ownClouds usando a sintaxe username@example.com/owncloud",
- "not assignable" : "não atribuível",
- "Updating {productName} to version {version}, this may take a while." : "Atualizando o {productName} para a versão {version}. Isso pode levar algum tempo.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, leia a <a href=\"%s\" target=\"_blank\">documentação</a>.",
- "An internal error occured." : "Ocorreu um erro interno."
+ "An error occured while verifying the token" : "Ocorreu um erro ao verificar o token"
},
"nplurals=2; plural=(n > 1);");
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 9d57784168f..caa468c1de4 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -58,7 +58,7 @@
"seconds ago" : "segundos atrás",
"Logging in …" : "Logando ...",
"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 do local.",
- "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. 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",
@@ -98,7 +98,7 @@
"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 estão, provavelmente, acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Nós sugerimos que você configure o servidor web de uma forma 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 \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.",
"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>." : "O \"Strict-Transport-Security\" cabeçalho HTTP não está configurado para pelo menos \"{segundos}\" segundos. Para maior segurança recomendamos a ativação HSTS como descrito em nossas <a href=\"{docUrl}\" rel=\"noreferrer\">dicas de segurança</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>." : "Você está acessando este site via HTTP. Nós fortemente sugerimos que você ao invéz, configure o servidor para exigir o uso de HTTPS como descrito em nossas <a href=\"{docUrl}\">dicas de segurança</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>." : "Você está acessando este site via HTTP. Nós sugerimos fortemente que você configure o servidor para exigir o uso de HTTPS como descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
"Shared" : "Compartilhado",
"Shared with {recipients}" : "Compartilhado com {recipients}",
"Error" : "Erro",
@@ -120,6 +120,7 @@
"Link" : "Link",
"Password protect" : "Proteger com senha",
"Allow upload and editing" : "Permitir envio e edição",
+ "Allow editing" : "Permitir edição",
"File drop (upload only)" : "Zona de arquivos (somente upload)",
"Email link to person" : "Enviar link por e-mail",
"Send" : "Enviar",
@@ -228,6 +229,7 @@
"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 número de porta e o nome do host (e.g., localhost:5432).",
"Performance warning" : "Performance de alerta",
"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.",
@@ -237,8 +239,8 @@
"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 JavaScript{linkend} e recerregue a página.",
- "Log out" : "Sair",
"Search" : "Perquisar",
+ "Log out" : "Sair",
"This action requires you to confirm your password:" : "Essa ação requer confirmação da sua senha:",
"Confirm your password" : "Confirme sua senha",
"Server side authentication failed!" : "Autenticação do servidor falhou!",
@@ -279,7 +281,7 @@
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar tempos de espera com instalações maiores, você pode em vez disso executar o seguinte comando a partir do diretório de instalação:",
"Detailed logs" : "Logs detalhados",
"Update needed" : "Atualização necessária",
- "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem um grande exemplo.",
+ "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem muitos dados em sua instância.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para obter ajuda, consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação</a>.",
"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 esta instância %s estiver disponível novamente.",
@@ -336,9 +338,9 @@
"Oct." : "Out.",
"Nov." : "Nov.",
"Dec." : "Dez.",
+ "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?",
"This server has no working Internet connection. 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. Isso significa que alguns dos recursos como montar armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não estiver acessando ownCloud de um proxy de confiança, esta é uma questão de segurança e pode permitir a um invasor falsificar o endereço IP como visíveis para ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "Allow editing" : "Permitir edição",
"Hide file listing" : "Listar arquivo oculto",
"Sending ..." : "Enviando ...",
"Email sent" : "E-mail enviado",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Segurança reforçada foi ativada para sua conta. Por favor autenticar usando um segundo fator.",
"Cancel login" : "Cancelar o login",
"Please authenticate using the selected factor." : "Por favor autenticar usando o fator selecionado.",
- "An error occured while verifying the token" : "Ocorreu um erro ao verificar o token",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Seu servidor web não está configurado corretamente para abrir a URL \"{url}\". Mais informações podem ser encontradas em nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um cache de memória, se disponível. Mais informações podem ser encontradas em nossa <a target=\"_blank\" 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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom não é legível pelo PHP que é altamente desencorajado por razões de segurança. Mais informação pode ser encontrada na nossa <a target=\"_blank\" 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\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Você está rodando o PHP {version}. Nós o incentivamos a atualizar sua versão do PHP para aproveitar <a target=\"_blank\" href=\"{phpLink}\"> atualizações de desempenho e de segurança fornecidos pelo Grupo PHP </a>, logo que a sua distribuição for compatível.",
- "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\" href=\"{docLink}\">documentation</a>." : "A configuração cabeçalhos do proxy reverso está incorreta, ou você está acessando Nextcloud de um proxy confiável. Se você não estiver acessando Nextcloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar o endereço IP como visíveis para Nextcloud. Mais informações podem ser encontradas em nossa <a target=\"_blank\" 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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached é 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 target=\"_blank\" href=\"{wikiLink}\">memcached wiki 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\" 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\" href=\"{docLink}\">documentação</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de arquivos inválidos…</a> / <a href=\"{rescanEndpoint}\">Reescanear…</a>)",
- "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}\">security tips</a>." : "O cabeçalho HTTP \"Strict-Transport-Security\" não está configurado para pelo menos \"{seconds}\" segundos. Para maior segurança recomendamos a ativação HSTS como descrito em nosso <a href=\"{docUrl}\">dicas de segurança</a>.",
- "An error occured. Please try again" : "Ocorreu um erro. Tente novamente",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartilhar com usuários em outros ownClouds usando a sintaxe username@example.com/owncloud",
- "not assignable" : "não atribuível",
- "Updating {productName} to version {version}, this may take a while." : "Atualizando o {productName} para a versão {version}. Isso pode levar algum tempo.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, leia a <a href=\"%s\" target=\"_blank\">documentação</a>.",
- "An internal error occured." : "Ocorreu um erro interno."
+ "An error occured while verifying the token" : "Ocorreu um erro ao verificar o token"
},"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 9c01bbfecfd..28fc45b20e2 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -52,7 +52,6 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"seconds ago" : "segundos atrás",
"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." : "A hiperligação para reiniciar a sua senha foi enviada para o seu correio eletrónico. Se não a receber dentro de um tempo aceitável, verifique as suas pastas de span/lixo.<br> Se não a encontrar, pergunte ao seu administrador local.",
- "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?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?",
"I know what I'm doing" : "Eu sei o que eu estou a fazer",
"Password can not be changed. Please contact your administrator." : "A palavra-passe não pode ser alterada. Por favor, contacte o seu administrador.",
"No" : "Não",
@@ -104,6 +103,7 @@ OC.L10N.register(
"Share link" : "Compartilhar hiperligação",
"Link" : "Hiperligação",
"Password protect" : "Proteger com palavra-passe",
+ "Allow editing" : "Permitir edição",
"Email link to person" : "Enviar hiperligação por mensagem para a pessoa",
"Send" : "Enviar",
"Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}",
@@ -197,8 +197,8 @@ OC.L10N.register(
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Consulte a documentação",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer o JavaScript para funcionar corretamente. Por favor, {linkstart}ative o JavaScript{linkend} e recarregue a página.",
- "Log out" : "Terminar sessão",
"Search" : "Procurar",
+ "Log out" : "Terminar sessão",
"Server side authentication failed!" : "Autenticação do lado do servidor falhou!",
"Please contact your administrator." : "Por favor, contacte o seu administrador.",
"An internal error occurred." : "Ocorreu um erro interno.",
@@ -289,8 +289,8 @@ OC.L10N.register(
"Oct." : "Out.",
"Nov." : "Nov.",
"Dec." : "Dez.",
+ "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?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração dos headers do proxy reverso está incorreta, ou então está a aceder ao ownCloud através de um proxy de confiança. Se não está a aceder ao ownCloud através de um proxy de confiança, isto é um problema de segurança e poderá permitir a um invasor falsificar um endereço IP como visível para o ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "Allow editing" : "Permitir edição",
"Sending ..." : "A enviar...",
"Email sent" : "Mensagem enviada",
"Send link via email" : "Enviar hiperligação por mensagem",
@@ -310,7 +310,6 @@ OC.L10N.register(
"Two-step verification" : "Verificação de dois passos:",
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "A segurança reforçada foi ativada para a sua conta. Por favor, autentique utilizando um segundo fator.",
"Please authenticate using the selected factor." : "Por favor, autentique utilizando um segundo fator.",
- "An error occured while verifying the token" : "Ocorreu um erro durante a verificação da senha",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartilhe com as pessoas nas outras ownClouds utilizando a sintaxe username@example.com/owncloud"
+ "An error occured while verifying the token" : "Ocorreu um erro durante a verificação da senha"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index 164455cac9a..fd0d06d47a4 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -50,7 +50,6 @@
"Cancel" : "Cancelar",
"seconds ago" : "segundos atrás",
"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." : "A hiperligação para reiniciar a sua senha foi enviada para o seu correio eletrónico. Se não a receber dentro de um tempo aceitável, verifique as suas pastas de span/lixo.<br> Se não a encontrar, pergunte ao seu administrador local.",
- "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?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?",
"I know what I'm doing" : "Eu sei o que eu estou a fazer",
"Password can not be changed. Please contact your administrator." : "A palavra-passe não pode ser alterada. Por favor, contacte o seu administrador.",
"No" : "Não",
@@ -102,6 +101,7 @@
"Share link" : "Compartilhar hiperligação",
"Link" : "Hiperligação",
"Password protect" : "Proteger com palavra-passe",
+ "Allow editing" : "Permitir edição",
"Email link to person" : "Enviar hiperligação por mensagem para a pessoa",
"Send" : "Enviar",
"Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}",
@@ -195,8 +195,8 @@
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Consulte a documentação",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer o JavaScript para funcionar corretamente. Por favor, {linkstart}ative o JavaScript{linkend} e recarregue a página.",
- "Log out" : "Terminar sessão",
"Search" : "Procurar",
+ "Log out" : "Terminar sessão",
"Server side authentication failed!" : "Autenticação do lado do servidor falhou!",
"Please contact your administrator." : "Por favor, contacte o seu administrador.",
"An internal error occurred." : "Ocorreu um erro interno.",
@@ -287,8 +287,8 @@
"Oct." : "Out.",
"Nov." : "Nov.",
"Dec." : "Dez.",
+ "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?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A configuração dos headers do proxy reverso está incorreta, ou então está a aceder ao ownCloud através de um proxy de confiança. Se não está a aceder ao ownCloud através de um proxy de confiança, isto é um problema de segurança e poderá permitir a um invasor falsificar um endereço IP como visível para o ownCloud. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "Allow editing" : "Permitir edição",
"Sending ..." : "A enviar...",
"Email sent" : "Mensagem enviada",
"Send link via email" : "Enviar hiperligação por mensagem",
@@ -308,7 +308,6 @@
"Two-step verification" : "Verificação de dois passos:",
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "A segurança reforçada foi ativada para a sua conta. Por favor, autentique utilizando um segundo fator.",
"Please authenticate using the selected factor." : "Por favor, autentique utilizando um segundo fator.",
- "An error occured while verifying the token" : "Ocorreu um erro durante a verificação da senha",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartilhe com as pessoas nas outras ownClouds utilizando a sintaxe username@example.com/owncloud"
+ "An error occured while verifying the token" : "Ocorreu um erro durante a verificação da senha"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 6b277875762..9487a79c578 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -26,8 +26,8 @@ OC.L10N.register(
"Repair error: " : "Ошибка восстановления:",
"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" : "Режим обслуживания отключён",
+ "Turned on maintenance mode" : "Включён режим обслуживания ",
+ "Turned off maintenance mode" : "Отключён режим обслуживания",
"Maintenance mode is kept active" : "Режим обслуживания оставлен включенным",
"Updating database schema" : "Обновление схемы базы данных",
"Updated database" : "База данных обновлена",
@@ -37,12 +37,12 @@ OC.L10N.register(
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Проверка возможности обновления схемы базы данных для %s (это может занять длительное время в зависимости от размера базы данных)",
"Checked database schema update for apps" : "Проверено обновление схемы БД приложений",
"Updated \"%s\" to %s" : "Обновлено \"%s\" до %s",
- "Set log level to debug" : "Установить журнал в режим отладки",
- "Reset log level" : "Сбросить уровень журнала",
+ "Set log level to debug" : "Установлен отладочный уровень протоколирования",
+ "Reset log level" : "Сброс уровня протоколирования",
"Starting code integrity check" : "Начинается проверка целостности кода",
"Finished code integrity check" : "Проверка целостности кода завершина",
"%s (3rdparty)" : "%s (стороннее)",
- "%s (incompatible)" : "%s (несовместим)",
+ "%s (incompatible)" : "%s (несовместимое)",
"Following apps have been disabled: %s" : "Были отключены следующие приложения: %s",
"Already up to date" : "Не нуждается в обновлении",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\"> Были обнаружены проблемы с проверкой целостности кода. Подробнее ...",
@@ -51,14 +51,16 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "Возникла проблема при загрузке страницы, повторная попытка через 5 секунд",
"Saving..." : "Сохранение...",
"Dismiss" : "Закрыть",
+ "This action requires you to confirm your password" : "Это действие требует подтверждения вашего пароля",
"Authentication required" : "Требуется аутентификация ",
"Password" : "Пароль",
"Cancel" : "Отмена",
+ "Confirm" : "Подтвердить",
"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." : "Ссылка для сброса пароля была отправлена на ваш email. Если вы не получили письмо в течении разумного промежутка времени, проверьте папку со спамом.<br>Если письма там нет, то обратитесь к вашему администратору.",
- "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 />Вы действительно хотите продолжить?",
+ "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." : "Пароль не может быть изменён. Пожалуйста, свяжитесь с вашим администратором.",
"No" : "Нет",
@@ -69,12 +71,12 @@ OC.L10N.register(
"Ok" : "Ок",
"Error loading message template: {error}" : "Ошибка загрузки шаблона сообщений: {error}",
"read-only" : "только для чтения",
- "_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах","{count} конфликтов в файлах"],
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах","{count} конфликтов файлов"],
"One file conflict" : "Один конфликт в файлах",
"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})",
@@ -105,11 +107,11 @@ OC.L10N.register(
"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} дней после её создания",
+ "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" : "Укажите пароль для общедоступной ссылки",
"Copied!" : "Скопировано!",
"Copy" : "Копировать",
"Not supported!" : "Не поддерживается!",
@@ -120,6 +122,8 @@ OC.L10N.register(
"Link" : "Ссылка",
"Password protect" : "Защитить паролем",
"Allow upload and editing" : "Разрешить загрузку и редактирование",
+ "Allow editing" : "Разрешить редактирование",
+ "File drop (upload only)" : "Хранилище (только для приема файлов)",
"Email link to person" : "Отправить ссылку по электронной почте",
"Send" : "Отправить",
"Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ",
@@ -127,9 +131,10 @@ OC.L10N.register(
"{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} поделился через ссылку",
"group" : "группа",
"remote" : "удаленный",
+ "email" : "email",
"Unshare" : "Закрыть доступ",
"can reshare" : "можно опубликовать",
- "can edit" : "может редактировать",
+ "can edit" : "можно редактировать",
"can create" : "можно создавать",
"can change" : "можно изменять",
"can delete" : "можно удалять",
@@ -141,11 +146,16 @@ OC.L10N.register(
"An error occurred. Please try again" : "Произошла ошибка. Попробуйте ещё раз",
"{sharee} (group)" : "{sharee} (группа)",
"{sharee} (remote)" : "{sharee} (удалённо)",
+ "{sharee} (email)" : "{sharee} (email)",
"Share" : "Поделиться",
"Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Поделиться с людьми на других серверах используя Federated Cloud ID username@example.com/nextcloud",
+ "Share with users or by mail..." : "Поделиться с пользователями или по почте...",
"Share with users or remote users..." : "Общий доступ с пользователями или удаленными пользователями",
+ "Share with users, remote users or by mail..." : "Поделиться с пользователями, удалеными пользователями или по почте...",
"Share with users or groups..." : "Общий доступ с пользователями или группами",
+ "Share with users, groups or by mail..." : "Поделиться с пользователями, группами или по почте...",
"Share with users, groups or remote users..." : "Поделиться с пользователями, группами или удаленными пользователями...",
+ "Share with users, groups, remote users or by mail..." : "Поделиться с пользователями, группами, удалёнными пользователями или по почте...",
"Share with users..." : "Поделиться с пользователями...",
"Error removing share" : "Ошибка удаления общего доступа",
"Non-existing tag #{tag}" : "Несуществующий тег #{tag}",
@@ -203,7 +213,7 @@ OC.L10N.register(
"Code: %s" : "Код: %s",
"Message: %s" : "Сообщение: %s",
"File: %s" : "Файл: %s",
- "Line: %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." : "Правила файла .htaccess не выполняются. Возможно, каталог данных и файлы свободно доступны из интернета.",
@@ -221,6 +231,7 @@ OC.L10N.register(
"Database name" : "Название базы данных",
"Database tablespace" : "Табличое пространство базы данных",
"Database host" : "Хост базы данных",
+ "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." : "Для крупных проектов мы советуем выбрать другой тип базы данных.",
@@ -230,8 +241,10 @@ OC.L10N.register(
"Need help?" : "Нужна помощь?",
"See the documentation" : "Посмотреть документацию",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Для корректной работы приложения требуется JavaScript. Пожалуйста, {linkstart}включите JavaScript{linkend} и обновите страницу.",
- "Log out" : "Выйти",
"Search" : "Найти",
+ "Log out" : "Выйти",
+ "This action requires you to confirm your password:" : "Это действие требует подтверждения вашего пароля:",
+ "Confirm your password" : "Подтвердите свой пароль",
"Server side authentication failed!" : "Ошибка аутентификации на стороне сервера!",
"Please contact your administrator." : "Пожалуйста, обратитесь к администратору.",
"An internal error occurred." : "Произошла внутренняя ошибка.",
@@ -268,7 +281,7 @@ OC.L10N.register(
"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:" : "Чтобы избежать тайм-аутов в крупных установках, вместо этого можно выполнить следующую команду в каталоге установки:",
- "Detailed logs" : "Подбробные логи",
+ "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>.",
@@ -327,14 +340,14 @@ OC.L10N.register(
"Oct." : "Окт.",
"Nov." : "Ноя.",
"Dec." : "Дек.",
+ "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 />Вы действительно хотите продолжить?",
"This server has no working Internet connection. 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." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установка сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Рекомендуется разрешить данному серверу доступ в Интернет если хотите, чтобы все функции работали.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Конфигурация заголовков обратного прокси не верна, либо доступ к nextCloud осуществлён через доверенный прокси. Если nextCloud открыт не через доверенный прокси то это проблема безопасности, которая может позволить атакующему подделать IP адрес, который видит nextCloud. Дополнительная информация доступна в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>.",
- "Allow editing" : "Разрешить редактирование",
"Hide file listing" : "Скрыть список файлов",
"Sending ..." : "Отправляется ...",
"Email sent" : "Письмо отправлено",
"Send link via email" : "Отправить ссылку по электронной почте",
- "notify by email" : "уведомить по почте",
+ "notify by email" : "уведомить по эл. почте",
"can share" : "может делиться с другими",
"create" : "создать",
"change" : "изменить",
@@ -349,25 +362,11 @@ OC.L10N.register(
"The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Идет процесс обновления. Не покидайте эту страницу во избежание поломок.",
"Updating to {version}" : "Обновление до версии {version}",
"The update was successful. There were warnings." : "Обновление прошло успешно. Есть предупреждения.",
- "No search results in other folders" : "В других папках ничего не найдено",
+ "No search results in other folders" : "В других каталогах ничего не найдено",
"Two-step verification" : "Двухшаговая проверка",
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Для вашей учётной записи включена повышенная безопасность. Пожалуйста, аутентифицируйтесь через второй фактор.",
"Cancel login" : "Отменить вход",
"Please authenticate using the selected factor." : "Пожалуйста, аутентифицируйтесь выбранным фактором.",
- "An error occured while verifying the token" : "При проверке токена возникла ошибка.",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Ваш веб-сервер настроен некорректно для разрешения \"{url}\". Для получения дополнительной информации смотрите нашу <a target=\"_blank\" href=\"{docLink}\">документацию</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Не настроена система кеширования. Для увеличения производительности сервера настройте memcache. Для получения дополнительной информации смотрите нашу <a target=\"_blank\" 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\" href=\"{docLink}\">documentation</a>." : "PHP не имеет прав на чтение /dev/urandom, что негативно влияет на безопасность. Для получения дополнительной информации смотрите нашу <a target=\"_blank\" href=\"{docLink}\">документацию</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" 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\" href=\"{phpLink}\">улучшениями производительности и безопасности, внедрёнными PHP Group</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\" href=\"{docLink}\">documentation</a>." : "Заголовки обратного прокси настроены неправильно, либо вы пытаетесь получить доступ к NextCloud через доверенный прокси. Если NextCloud открыт не через доверенный прокси, это проблема безопасности, которая может позволить атакующему подделать IP-адрес, который видит NextCloud. Для получения дополнительной информации смотрите нашу <a target=\"_blank\" 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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\", но не \"memcache\". Смотрите <a target=\"_blank\" href=\"{wikiLink}\">wiki-страницу memcached</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Некоторые файлы не прошли проверку целостности. Для получения дополнительной информации о том, как устранить данную проблему, смотрите нашу <a target=\"_blank\" href=\"{docLink}\">документацию</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Список проблемных файлов…</a> / <a href=\"{rescanEndpoint}\">Сканировать ещё раз…</a>)",
- "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}\">security tips</a>." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен как минимум на \"{seconds}\" секунд. Для увеличения безопасности рекомендуется включить HSTS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.",
- "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах nextCloud используя формат username@example.com/nextcloud",
- "not assignable" : "Невозможно присвоить",
- "Updating {productName} to version {version}, this may take a while." : "Обновляем {productName} до версии {version}. Это может занять некоторое время.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Чтобы узнать, как правильно настроить ваш сервер, смотрите <a href=\"%s\" target=\"_blank\">документацию</a>.",
- "An internal error occured." : "Произошла ошибка сервера."
+ "An error occured while verifying the token" : "При проверке токена возникла ошибка."
},
"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 0c8d22fabaa..0644b0af787 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -24,8 +24,8 @@
"Repair error: " : "Ошибка восстановления:",
"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" : "Режим обслуживания отключён",
+ "Turned on maintenance mode" : "Включён режим обслуживания ",
+ "Turned off maintenance mode" : "Отключён режим обслуживания",
"Maintenance mode is kept active" : "Режим обслуживания оставлен включенным",
"Updating database schema" : "Обновление схемы базы данных",
"Updated database" : "База данных обновлена",
@@ -35,12 +35,12 @@
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Проверка возможности обновления схемы базы данных для %s (это может занять длительное время в зависимости от размера базы данных)",
"Checked database schema update for apps" : "Проверено обновление схемы БД приложений",
"Updated \"%s\" to %s" : "Обновлено \"%s\" до %s",
- "Set log level to debug" : "Установить журнал в режим отладки",
- "Reset log level" : "Сбросить уровень журнала",
+ "Set log level to debug" : "Установлен отладочный уровень протоколирования",
+ "Reset log level" : "Сброс уровня протоколирования",
"Starting code integrity check" : "Начинается проверка целостности кода",
"Finished code integrity check" : "Проверка целостности кода завершина",
"%s (3rdparty)" : "%s (стороннее)",
- "%s (incompatible)" : "%s (несовместим)",
+ "%s (incompatible)" : "%s (несовместимое)",
"Following apps have been disabled: %s" : "Были отключены следующие приложения: %s",
"Already up to date" : "Не нуждается в обновлении",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\"> Были обнаружены проблемы с проверкой целостности кода. Подробнее ...",
@@ -49,14 +49,16 @@
"Problem loading page, reloading in 5 seconds" : "Возникла проблема при загрузке страницы, повторная попытка через 5 секунд",
"Saving..." : "Сохранение...",
"Dismiss" : "Закрыть",
+ "This action requires you to confirm your password" : "Это действие требует подтверждения вашего пароля",
"Authentication required" : "Требуется аутентификация ",
"Password" : "Пароль",
"Cancel" : "Отмена",
+ "Confirm" : "Подтвердить",
"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." : "Ссылка для сброса пароля была отправлена на ваш email. Если вы не получили письмо в течении разумного промежутка времени, проверьте папку со спамом.<br>Если письма там нет, то обратитесь к вашему администратору.",
- "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 />Вы действительно хотите продолжить?",
+ "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." : "Пароль не может быть изменён. Пожалуйста, свяжитесь с вашим администратором.",
"No" : "Нет",
@@ -67,12 +69,12 @@
"Ok" : "Ок",
"Error loading message template: {error}" : "Ошибка загрузки шаблона сообщений: {error}",
"read-only" : "только для чтения",
- "_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах","{count} конфликтов в файлах"],
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах","{count} конфликтов файлов"],
"One file conflict" : "Один конфликт в файлах",
"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})",
@@ -103,11 +105,11 @@
"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} дней после её создания",
+ "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" : "Укажите пароль для общедоступной ссылки",
"Copied!" : "Скопировано!",
"Copy" : "Копировать",
"Not supported!" : "Не поддерживается!",
@@ -118,6 +120,8 @@
"Link" : "Ссылка",
"Password protect" : "Защитить паролем",
"Allow upload and editing" : "Разрешить загрузку и редактирование",
+ "Allow editing" : "Разрешить редактирование",
+ "File drop (upload only)" : "Хранилище (только для приема файлов)",
"Email link to person" : "Отправить ссылку по электронной почте",
"Send" : "Отправить",
"Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ",
@@ -125,9 +129,10 @@
"{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} поделился через ссылку",
"group" : "группа",
"remote" : "удаленный",
+ "email" : "email",
"Unshare" : "Закрыть доступ",
"can reshare" : "можно опубликовать",
- "can edit" : "может редактировать",
+ "can edit" : "можно редактировать",
"can create" : "можно создавать",
"can change" : "можно изменять",
"can delete" : "можно удалять",
@@ -139,11 +144,16 @@
"An error occurred. Please try again" : "Произошла ошибка. Попробуйте ещё раз",
"{sharee} (group)" : "{sharee} (группа)",
"{sharee} (remote)" : "{sharee} (удалённо)",
+ "{sharee} (email)" : "{sharee} (email)",
"Share" : "Поделиться",
"Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Поделиться с людьми на других серверах используя Federated Cloud ID username@example.com/nextcloud",
+ "Share with users or by mail..." : "Поделиться с пользователями или по почте...",
"Share with users or remote users..." : "Общий доступ с пользователями или удаленными пользователями",
+ "Share with users, remote users or by mail..." : "Поделиться с пользователями, удалеными пользователями или по почте...",
"Share with users or groups..." : "Общий доступ с пользователями или группами",
+ "Share with users, groups or by mail..." : "Поделиться с пользователями, группами или по почте...",
"Share with users, groups or remote users..." : "Поделиться с пользователями, группами или удаленными пользователями...",
+ "Share with users, groups, remote users or by mail..." : "Поделиться с пользователями, группами, удалёнными пользователями или по почте...",
"Share with users..." : "Поделиться с пользователями...",
"Error removing share" : "Ошибка удаления общего доступа",
"Non-existing tag #{tag}" : "Несуществующий тег #{tag}",
@@ -201,7 +211,7 @@
"Code: %s" : "Код: %s",
"Message: %s" : "Сообщение: %s",
"File: %s" : "Файл: %s",
- "Line: %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." : "Правила файла .htaccess не выполняются. Возможно, каталог данных и файлы свободно доступны из интернета.",
@@ -219,6 +229,7 @@
"Database name" : "Название базы данных",
"Database tablespace" : "Табличое пространство базы данных",
"Database host" : "Хост базы данных",
+ "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." : "Для крупных проектов мы советуем выбрать другой тип базы данных.",
@@ -228,8 +239,10 @@
"Need help?" : "Нужна помощь?",
"See the documentation" : "Посмотреть документацию",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Для корректной работы приложения требуется JavaScript. Пожалуйста, {linkstart}включите JavaScript{linkend} и обновите страницу.",
- "Log out" : "Выйти",
"Search" : "Найти",
+ "Log out" : "Выйти",
+ "This action requires you to confirm your password:" : "Это действие требует подтверждения вашего пароля:",
+ "Confirm your password" : "Подтвердите свой пароль",
"Server side authentication failed!" : "Ошибка аутентификации на стороне сервера!",
"Please contact your administrator." : "Пожалуйста, обратитесь к администратору.",
"An internal error occurred." : "Произошла внутренняя ошибка.",
@@ -266,7 +279,7 @@
"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:" : "Чтобы избежать тайм-аутов в крупных установках, вместо этого можно выполнить следующую команду в каталоге установки:",
- "Detailed logs" : "Подбробные логи",
+ "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>.",
@@ -325,14 +338,14 @@
"Oct." : "Окт.",
"Nov." : "Ноя.",
"Dec." : "Дек.",
+ "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 />Вы действительно хотите продолжить?",
"This server has no working Internet connection. 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." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установка сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Рекомендуется разрешить данному серверу доступ в Интернет если хотите, чтобы все функции работали.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Конфигурация заголовков обратного прокси не верна, либо доступ к nextCloud осуществлён через доверенный прокси. Если nextCloud открыт не через доверенный прокси то это проблема безопасности, которая может позволить атакующему подделать IP адрес, который видит nextCloud. Дополнительная информация доступна в нашей <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документации</a>.",
- "Allow editing" : "Разрешить редактирование",
"Hide file listing" : "Скрыть список файлов",
"Sending ..." : "Отправляется ...",
"Email sent" : "Письмо отправлено",
"Send link via email" : "Отправить ссылку по электронной почте",
- "notify by email" : "уведомить по почте",
+ "notify by email" : "уведомить по эл. почте",
"can share" : "может делиться с другими",
"create" : "создать",
"change" : "изменить",
@@ -347,25 +360,11 @@
"The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Идет процесс обновления. Не покидайте эту страницу во избежание поломок.",
"Updating to {version}" : "Обновление до версии {version}",
"The update was successful. There were warnings." : "Обновление прошло успешно. Есть предупреждения.",
- "No search results in other folders" : "В других папках ничего не найдено",
+ "No search results in other folders" : "В других каталогах ничего не найдено",
"Two-step verification" : "Двухшаговая проверка",
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Для вашей учётной записи включена повышенная безопасность. Пожалуйста, аутентифицируйтесь через второй фактор.",
"Cancel login" : "Отменить вход",
"Please authenticate using the selected factor." : "Пожалуйста, аутентифицируйтесь выбранным фактором.",
- "An error occured while verifying the token" : "При проверке токена возникла ошибка.",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Ваш веб-сервер настроен некорректно для разрешения \"{url}\". Для получения дополнительной информации смотрите нашу <a target=\"_blank\" href=\"{docLink}\">документацию</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Не настроена система кеширования. Для увеличения производительности сервера настройте memcache. Для получения дополнительной информации смотрите нашу <a target=\"_blank\" 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\" href=\"{docLink}\">documentation</a>." : "PHP не имеет прав на чтение /dev/urandom, что негативно влияет на безопасность. Для получения дополнительной информации смотрите нашу <a target=\"_blank\" href=\"{docLink}\">документацию</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" 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\" href=\"{phpLink}\">улучшениями производительности и безопасности, внедрёнными PHP Group</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\" href=\"{docLink}\">documentation</a>." : "Заголовки обратного прокси настроены неправильно, либо вы пытаетесь получить доступ к NextCloud через доверенный прокси. Если NextCloud открыт не через доверенный прокси, это проблема безопасности, которая может позволить атакующему подделать IP-адрес, который видит NextCloud. Для получения дополнительной информации смотрите нашу <a target=\"_blank\" 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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\", но не \"memcache\". Смотрите <a target=\"_blank\" href=\"{wikiLink}\">wiki-страницу memcached</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Некоторые файлы не прошли проверку целостности. Для получения дополнительной информации о том, как устранить данную проблему, смотрите нашу <a target=\"_blank\" href=\"{docLink}\">документацию</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Список проблемных файлов…</a> / <a href=\"{rescanEndpoint}\">Сканировать ещё раз…</a>)",
- "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}\">security tips</a>." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен как минимум на \"{seconds}\" секунд. Для увеличения безопасности рекомендуется включить HSTS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.",
- "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах nextCloud используя формат username@example.com/nextcloud",
- "not assignable" : "Невозможно присвоить",
- "Updating {productName} to version {version}, this may take a while." : "Обновляем {productName} до версии {version}. Это может занять некоторое время.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Чтобы узнать, как правильно настроить ваш сервер, смотрите <a href=\"%s\" target=\"_blank\">документацию</a>.",
- "An internal error occured." : "Произошла ошибка сервера."
+ "An error occured while verifying the token" : "При проверке токена возникла ошибка."
},"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_SK.js b/core/l10n/sk_SK.js
new file mode 100644
index 00000000000..0b1e2d05f07
--- /dev/null
+++ b/core/l10n/sk_SK.js
@@ -0,0 +1,321 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Prosím, vyberte súbor.",
+ "File is too big" : "Súbor je príliš veľký",
+ "The selected file is not an image." : "Vybraný súbor nie je obrázok.",
+ "The selected file cannot be read." : "Vybraný súbor nie je možné čítať.",
+ "Invalid file provided" : "Zadaný neplatný súbor",
+ "No image or file provided" : "Obrázok alebo súbor nebol zadaný",
+ "Unknown filetype" : "Neznámy typ súboru",
+ "Invalid image" : "Chybný obrázok",
+ "An error occurred. Please contact your admin." : "Vyskytla sa chyba.\nProsím, kontaktujte svojho správcu.\n\t",
+ "No temporary profile picture available, try again" : "Dočasný profilový obrázok nie je k dispozícii, skúste to znovu",
+ "No crop data provided" : "Dáta pre orezanie neboli zadané",
+ "No valid crop data provided" : "Neplatné dáta pre orezanie neboli zadané",
+ "Crop is not square" : "Orezanie nie je štvorcové",
+ "Couldn't reset password because the token is invalid" : "Nemožno zmeniť heslo pre neplatnosť tokenu.",
+ "Couldn't reset password because the token is expired" : "Nepodarilo sa obnoviť heslo, pretože platnosť tokenu uplynula.",
+ "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.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nemožno poslať email pre obnovu, lebo pre zadaného používateľa neexistuje emailová adresa. Kontaktujte prosím vášho administrátora.",
+ "%s password reset" : "reset hesla %s",
+ "Couldn't send reset email. Please contact your administrator." : "Nemožno poslať email pre obnovu. Kontaktujte prosím vášho administrátora.",
+ "Preparing update" : "Pripravuje sa aktualizácia",
+ "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.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Kontrola tabuľky %s",
+ "Turned on maintenance mode" : "Mód údržby je zapnutý",
+ "Turned off maintenance mode" : "Mód údržby je vypnutý",
+ "Maintenance mode is kept active" : "Režim údržby je stále aktívny",
+ "Updating database schema" : "Aktualizuje sa schéma databázy",
+ "Updated database" : "Databáza je aktualizovaná",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Kontroluje sa, či je možné aktualizovať schému databázy (to môže trvať dlhší čas v závislosti na veľkosti databázy)",
+ "Checked database schema update" : "Skontrolovať aktualizáciu schémy databázy",
+ "Checking updates of apps" : "Kontrolujú sa aktualizácie aplikácií",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Kontroluje sa, či je možné aktualizovať schému databázy pre %s (to môže trvať dlhší čas v závislosti na veľkosti databázy)",
+ "Checked database schema update for apps" : "Aktualizácia schémy databázy aplikácií bola overená",
+ "Updated \"%s\" to %s" : "Aktualizované \"%s\" na %s",
+ "Set log level to debug" : "Nastaviť úroveň záznamu na ladenie",
+ "Reset log level" : "Obnoviť úroveň záznamu",
+ "Starting code integrity check" : "Začína kontrola integrity kódu",
+ "Finished code integrity check" : "Kontrola integrity kódu ukončená",
+ "%s (3rdparty)" : "%s (od tretej strany)",
+ "%s (incompatible)" : "%s (nekompatibilná)",
+ "Following apps have been disabled: %s" : "Nasledovné aplikácie boli zakázané: %s",
+ "Already up to date" : "Už aktuálne",
+ "<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 5 seconds" : "Nastal problém pri načítaní stránky, pokus sa zopakuje o 5 sekúnd",
+ "Saving..." : "Ukladám...",
+ "Dismiss" : "Odmietnuť",
+ "This action requires you to confirm your password" : "Táto akcia vyžaduje potvrdenie vášho hesla",
+ "Authentication required" : "Vyžaduje sa overenie",
+ "Password" : "Heslo",
+ "Cancel" : "Zrušiť",
+ "Confirm" : "Potvrdiť",
+ "Failed to authenticate, try again" : "Nastal problém pri overení, skúste znova",
+ "seconds ago" : "pred sekundami",
+ "Logging in …" : "Prihlasujem ...",
+ "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." : "Odkaz na obnovu hesla bol odoslaný na váš email. Pokiaľ ho neobdržíte v primeranom čase, skontrolujte spam / priečinok nevyžiadanej pošty. <br> Ak tam nie je, kontaktujte svojho administrátora.",
+ "I know what I'm doing" : "Viem, čo robím",
+ "Password can not be changed. Please contact your administrator." : "Heslo nemožno zmeniť. Kontaktujte prosím vášho administrátora.",
+ "No" : "Nie",
+ "Yes" : "Áno",
+ "No files in here" : "Nie sú tu žiadne súbory",
+ "Choose" : "Vybrať",
+ "Error loading file picker template: {error}" : "Chyba pri nahrávaní šablóny výberu súborov: {error}",
+ "Ok" : "Ok",
+ "Error loading message template: {error}" : "Chyba pri nahrávaní šablóny správy: {error}",
+ "read-only" : "iba na čítanie",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt súboru","{count} konflikty súboru","{count} konfliktov súboru"],
+ "One file conflict" : "Jeden konflikt súboru",
+ "New Files" : "Nové súbory",
+ "Already existing files" : "Už existujúce súbory",
+ "Which files do you want to keep?" : "Ktoré súbory chcete ponechať?",
+ "If you select both versions, the copied file will have a number added to its name." : "Ak zvolíte obe verzie, názov nakopírovaného súboru bude doplnený o číslo.",
+ "Continue" : "Pokračovať",
+ "(all selected)" : "(všetko vybrané)",
+ "({count} selected)" : "({count} vybraných)",
+ "Error loading file exists template" : "Chyba pri nahrávaní šablóny existencie súboru",
+ "Pending" : "Čaká",
+ "Very weak password" : "Veľmi slabé heslo",
+ "Weak password" : "Slabé heslo",
+ "So-so password" : "Priemerné heslo",
+ "Good password" : "Dobré heslo",
+ "Strong password" : "Silné heslo",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server nie je zatiaľ správne nastavený, aby umožnil synchronizáciu súborov, pretože rozhranie WebDAV sa zdá byť nefunkčné.",
+ "/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 nie je prístupný na čítanie procesom PHP, čo z bezpečnostných dôvodov nie je vôbec odporúčané. Viac informácií nájdete v našej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentácii</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 je nakonfigurovaný ako distribuovaná vyrovnávacia pamäť, ale v PHP je nainštalovaný nesprávny modul - \"memcache\". \\OC\\Memcache\\Memcached podporuje len modul \"memcached\", \"memcache\" nie je podporovaný. Viac informácií nájdete na <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki stránke o oboch moduloch</a>.",
+ "Error occurred while checking server setup" : "Počas kontroly nastavenia serveru sa stala chyba",
+ "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." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Dôrazne odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný alebo presunúť priečinok s dátami mimo priestoru, ktorý webový server sprístupňuje.",
+ "Shared" : "Sprístupnené",
+ "Shared with {recipients}" : "Sprístupnené {recipients}",
+ "Error" : "Chyba",
+ "Error while sharing" : "Chyba počas sprístupňovania",
+ "Error while unsharing" : "Chyba počas odobratia sprístupnenia",
+ "Error setting expiration date" : "Chyba pri nastavení dátumu expirácie",
+ "The public link will expire no later than {days} days after it is created" : "Verejný odkaz nevyprší skôr než za {days} dní po vytvorení",
+ "Set expiration date" : "Nastaviť dátum expirácie",
+ "Expiration" : "Koniec platnosti",
+ "Expiration date" : "Dátum expirácie",
+ "Choose a password for the public link" : "Zadajte heslo pre tento verejný odkaz",
+ "Copied!" : "Skopírované!",
+ "Copy" : "Kopírovať",
+ "Not supported!" : "Nie je podporované!",
+ "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 link" : "Sprístupniť odkaz",
+ "Link" : "Odkaz",
+ "Password protect" : "Chrániť heslom",
+ "Allow upload and editing" : "Povoliť nahratie a úpravy",
+ "Allow editing" : "Povoliť úpravy",
+ "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}",
+ "group" : "skupina",
+ "remote" : "vzdialený",
+ "Unshare" : "Zneprístupniť",
+ "can edit" : "môže upraviť",
+ "can create" : "môže vytvoriť",
+ "can change" : "môže zmeniť",
+ "can delete" : "môže odstrániť",
+ "access control" : "prístupové práva",
+ "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.",
+ "An error occurred. Please try again" : "Nastala chyba. Skúste to prosím znovu",
+ "Share" : "Sprístupniť",
+ "Share with users or remote users..." : "Sprístupniť používateľom alebo vzdialeným používateľom...",
+ "Share with users or groups..." : "Sprístupniť používateľom alebo skupinám",
+ "Share with users, groups or remote users..." : "Sprístupniť používateľom, skupinám alebo vzdialeným používateľom...",
+ "Share with users..." : "Sprístupniť používateľom...",
+ "Error removing share" : "Chyba pri rušení sprístupnenia",
+ "restricted" : "obmedzený",
+ "invisible" : "neviditeľný",
+ "Delete" : "Zmazať",
+ "Rename" : "Premenovať",
+ "No tags found" : "Štítky sa nenašli",
+ "The object type is not specified." : "Nešpecifikovaný typ objektu.",
+ "Enter new" : "Zadať nový",
+ "Add" : "Pridať",
+ "Edit tags" : "Upraviť štítky",
+ "Error loading dialog template: {error}" : "Chyba pri načítaní šablóny dialógu: {error}",
+ "No tags selected for deletion." : "Nie sú vybraté štítky na zmazanie.",
+ "unknown text" : "neznámy text",
+ "Hello world!" : "Ahoj svet!",
+ "sunny" : "slnečno",
+ "Hello {name}, the weather is {weather}" : "Dobrý deň {name}, počasie je {weather}",
+ "Hello {name}" : "Vitaj {name}",
+ "new" : "nový",
+ "_download %n file_::_download %n files_" : ["stiahnuť %n súbor","stiahnuť %n súbory","stiahnuť %n súborov"],
+ "Update to {version}" : "Aktualizuj na {version}",
+ "An error occurred." : "Vyskytla sa chyba.",
+ "Please reload the page." : "Obnovte prosím stránku.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizácia neprebehla úspešne. Pre viac informácií <a href=\"{url}\">navštívte príspevok na našom fóre</a>, ktorý pokrýva tento problém.",
+ "Continue to Nextcloud" : "Pokračovať na Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Aktualizácia bola úspešná. Presmerovávam na Nextcloud.",
+ "Searching other places" : "Prehľadanie ostatných umiestnení",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} výsledok vyhľadávania v ostatných priečinkoch","{count} výsledky vyhľadávania v ostatných priečinkoch","{count} výsledkov vyhľadávania v ostatných priečinkoch"],
+ "Personal" : "Osobné",
+ "Users" : "Používatelia",
+ "Apps" : "Aplikácie",
+ "Admin" : "Administrácia",
+ "Help" : "Pomoc",
+ "Access forbidden" : "Prístup odmietnutý",
+ "File not found" : "Súbor nenájdený",
+ "The specified document has not been found on the server." : "Zadaný dokument nebol nájdený na serveri.",
+ "You can click here to return to %s." : "Kliknite tu pre návrat do %s.",
+ "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ň!",
+ "Internal Server Error" : "Vnútorná chyba servera",
+ "The server encountered an internal error and was unable to complete your request." : "Na serveri došlo k vnútornej chybe a nebol schopný dokončiť vašu požiadavku.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Obráťte sa na správcu servera, ak sa táto chyba objaví znovu viackrát, uveďte nižšie zobrazené technické údaje vo svojej správe.",
+ "More details can be found in the server log." : "Viac nájdete v logu servera.",
+ "Technical details" : "Technické podrobnosti",
+ "Remote Address: %s" : "Vzdialená adresa: %s",
+ "Request ID: %s" : "ID požiadavky: %s",
+ "Type: %s" : "Typ: %s",
+ "Code: %s" : "Kód: %s",
+ "Message: %s" : "Správa: %s",
+ "File: %s" : "Súbor: %s",
+ "Line: %s" : "Riadok: %s",
+ "Trace" : "Trasa",
+ "Security warning" : "Bezpečnostné varovanie",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.",
+ "Create an <strong>admin account</strong>" : "Vytvoriť <strong>administrátorský účet</strong>",
+ "Username" : "Meno používateľa",
+ "Storage & database" : "Úložislo & databáza",
+ "Data folder" : "Priečinok dát",
+ "Configure the database" : "Nastaviť databázu",
+ "Only %s is available." : "Len %s je dostupný.",
+ "Install and activate additional PHP modules to choose other database types." : "Pri výbere iného typu databázy bude potrebné nainštalovať a aktivovať ďalšie PHP moduly.",
+ "For more details check out the documentation." : "Viac informácií nájdete v dokumentácii.",
+ "Database user" : "Používateľ databázy",
+ "Database password" : "Heslo databázy",
+ "Database name" : "Meno databázy",
+ "Database tablespace" : "Tabuľkový priestor databázy",
+ "Database host" : "Server databázy",
+ "Performance warning" : "Varovanie o výkone",
+ "SQLite will be used as database." : "Bude použitá SQLite databáza.",
+ "For larger installations we recommend to choose a different database backend." : "Pre veľké inštalácie odporúčame vybrať si iné databázové riešenie.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Najmä pri používaní klientských aplikácií na synchronizáciu s desktopom neodporúčame používať SQLite.",
+ "Finish setup" : "Dokončiť inštaláciu",
+ "Finishing …" : "Dokončujem...",
+ "Need help?" : "Potrebujete pomoc?",
+ "See the documentation" : "Pozri dokumentáciu",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku",
+ "Search" : "Hľadať",
+ "Log out" : "Odhlásiť",
+ "Server side authentication failed!" : "Autentifikácia na serveri zlyhala!",
+ "Please contact your administrator." : "Kontaktujte prosím vášho administrátora.",
+ "An internal error occurred." : "Došlo k vnútornej chybe.",
+ "Please try again or contact your administrator." : "Skúste to znovu, alebo sa obráťte na vášho administrátora.",
+ "Wrong password. Reset it?" : "Chybné heslo. Chcete ho obnoviť?",
+ "Wrong password." : "Nesprávne heslo.",
+ "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",
+ "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>",
+ "This Nextcloud instance is currently in single user mode." : "Táto inštancia Nextcloudu je teraz v jednopoužívateľskom móde.",
+ "This means only administrators can use the instance." : "Len správca systému môže používať túto inštanciu.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte prosím správcu systému, ak sa táto správa objavuje opakovane alebo neočakávane.",
+ "Thank you for your patience." : "Ďakujeme za Vašu trpezlivosť.",
+ "You are accessing the server from an untrusted domain." : "Pristupujete na server v nedôveryhodnej doméne.",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na konfigurácii, vám môže byť ako správcovi umožnené použitie tlačidla nižšie pre označenie tejto domény ako dôveryhodnej.",
+ "Add \"%s\" as trusted domain" : "Pridať \"%s\" ako dôveryhodnú doménu",
+ "App update required" : "Je nutná aktualizácia aplikácie",
+ "%s will be updated to version %s" : "%s bude zaktualizovaný na verziu %s.",
+ "These apps will be updated:" : "Tieto aplikácie budú aktualizované:",
+ "These incompatible apps will be disabled:" : "Tieto nekompatibilné aplikácie budú vypnuté:",
+ "The theme %s has been disabled." : "Téma %s bola zakázaná.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Pred vykonaním ďalšieho kroku sa presvedčte, že databáza, konfiguračný a dátový priečinok sú zazálohované.",
+ "Start update" : "Spustiť aktualizáciu",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Aby nedošlo k vypršaniu časového limitu vo väčších inštaláciách, môžete namiesto toho použiť nasledujúci príkaz z inštalačného priečinka:",
+ "Detailed logs" : "Podrobné záznamy",
+ "Update needed" : "Aktualizácia je potrebná",
+ "Please use the command line updater because you have a big instance." : "Vaša inštancia je veľká, použite prosím aktualizáciu cez príkazový riadok.",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Táto %s inštancia je v súčasnej dobe v režime údržby. Počkajte prosím.",
+ "This page will refresh itself when the %s instance is available again." : "Táto stránka sa obnoví sama hneď ako bude %s inštancia znovu dostupná.",
+ "Error loading tags" : "Chyba pri načítaní štítkov",
+ "Tag already exists" : "Štítok už existuje",
+ "Error deleting tag(s)" : "Chyba pri mazaní štítka(ov)",
+ "Error tagging" : "Chyba pri pridaní štítka",
+ "Error untagging" : "Chyba pri odobratí štítka",
+ "Error favoriting" : "Chyba pri pridaní do obľúbených",
+ "Error unfavoriting" : "Chyba pri odobratí z obľúbených",
+ "Couldn't send mail to following users: %s " : "Nebolo možné odoslať email týmto používateľom: %s ",
+ "Sunday" : "Nedeľa",
+ "Monday" : "Pondelok",
+ "Tuesday" : "Utorok",
+ "Wednesday" : "Streda",
+ "Thursday" : "Štvrtok",
+ "Friday" : "Piatok",
+ "Saturday" : "Sobota",
+ "Sun." : "Ned.",
+ "Mon." : "Pon.",
+ "Tue." : "Uto.",
+ "Wed." : "Str.",
+ "Thu." : "Štv.",
+ "Fri." : "Pia.",
+ "Sat." : "Sob.",
+ "Su" : "Ne",
+ "Mo" : "Po",
+ "Tu" : "Ut",
+ "We" : "St",
+ "Th" : "Št",
+ "Fr" : "Pi",
+ "Sa" : "So",
+ "January" : "Január",
+ "February" : "Február",
+ "March" : "Marec",
+ "April" : "Apríl",
+ "May" : "Máj",
+ "June" : "Jún",
+ "July" : "Júl",
+ "August" : "August",
+ "September" : "September",
+ "October" : "Október",
+ "November" : "November",
+ "December" : "December",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Apr.",
+ "May." : "Máj.",
+ "Jun." : "Jún.",
+ "Jul." : "Júl.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dec.",
+ "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?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurácia hlavičiek reverse proxy nie je správna alebo pristupujete k ownCloud z dôveryhodného proxy servera. Ak k ownCloud nepristupujete z dôveryhodného proxy servera, vzniká bezpečnostné riziko - IP adresa potenciálneho útočníka, ktorú vidí ownCloud, môže byť falošná. Viac informácií nájdete v našej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentácii</a>.",
+ "Sending ..." : "Odosielam ...",
+ "Email sent" : "Email odoslaný",
+ "notify by email" : "informovať emailom",
+ "can share" : "môže sprístupniť",
+ "create" : "vytvoriť",
+ "change" : "zmeniť",
+ "delete" : "vymazať",
+ "{sharee} (at {server})" : "{sharee} (na {server})",
+ "Share with users…" : "Sprístupniť používateľom...",
+ "Share with users, groups or remote users…" : "Sprístupniť používateľom, skupinám alebo vzdialeným používateľom...",
+ "Share with users or groups…" : "Sprístupniť používateľom alebo skupinám...",
+ "Share with users or remote users…" : "Sprístupniť používateľom alebo vzdialeným používateľom...",
+ "Warning" : "Varovanie",
+ "Error while sending notification" : "Chyba pri posielaní oznámenia",
+ "Updating to {version}" : "Aktualizuje sa na {version}",
+ "The update was successful. There were warnings." : "Aktualizácia bola úspešná. Vyskytli sa upozornenia.",
+ "No search results in other folders" : "Žiadne výsledky vyhľadávania v ostatných priečinkoch",
+ "Cancel login" : "Zruš prihlasovanie"
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json
new file mode 100644
index 00000000000..ae464c73869
--- /dev/null
+++ b/core/l10n/sk_SK.json
@@ -0,0 +1,319 @@
+{ "translations": {
+ "Please select a file." : "Prosím, vyberte súbor.",
+ "File is too big" : "Súbor je príliš veľký",
+ "The selected file is not an image." : "Vybraný súbor nie je obrázok.",
+ "The selected file cannot be read." : "Vybraný súbor nie je možné čítať.",
+ "Invalid file provided" : "Zadaný neplatný súbor",
+ "No image or file provided" : "Obrázok alebo súbor nebol zadaný",
+ "Unknown filetype" : "Neznámy typ súboru",
+ "Invalid image" : "Chybný obrázok",
+ "An error occurred. Please contact your admin." : "Vyskytla sa chyba.\nProsím, kontaktujte svojho správcu.\n\t",
+ "No temporary profile picture available, try again" : "Dočasný profilový obrázok nie je k dispozícii, skúste to znovu",
+ "No crop data provided" : "Dáta pre orezanie neboli zadané",
+ "No valid crop data provided" : "Neplatné dáta pre orezanie neboli zadané",
+ "Crop is not square" : "Orezanie nie je štvorcové",
+ "Couldn't reset password because the token is invalid" : "Nemožno zmeniť heslo pre neplatnosť tokenu.",
+ "Couldn't reset password because the token is expired" : "Nepodarilo sa obnoviť heslo, pretože platnosť tokenu uplynula.",
+ "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.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nemožno poslať email pre obnovu, lebo pre zadaného používateľa neexistuje emailová adresa. Kontaktujte prosím vášho administrátora.",
+ "%s password reset" : "reset hesla %s",
+ "Couldn't send reset email. Please contact your administrator." : "Nemožno poslať email pre obnovu. Kontaktujte prosím vášho administrátora.",
+ "Preparing update" : "Pripravuje sa aktualizácia",
+ "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.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Kontrola tabuľky %s",
+ "Turned on maintenance mode" : "Mód údržby je zapnutý",
+ "Turned off maintenance mode" : "Mód údržby je vypnutý",
+ "Maintenance mode is kept active" : "Režim údržby je stále aktívny",
+ "Updating database schema" : "Aktualizuje sa schéma databázy",
+ "Updated database" : "Databáza je aktualizovaná",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Kontroluje sa, či je možné aktualizovať schému databázy (to môže trvať dlhší čas v závislosti na veľkosti databázy)",
+ "Checked database schema update" : "Skontrolovať aktualizáciu schémy databázy",
+ "Checking updates of apps" : "Kontrolujú sa aktualizácie aplikácií",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Kontroluje sa, či je možné aktualizovať schému databázy pre %s (to môže trvať dlhší čas v závislosti na veľkosti databázy)",
+ "Checked database schema update for apps" : "Aktualizácia schémy databázy aplikácií bola overená",
+ "Updated \"%s\" to %s" : "Aktualizované \"%s\" na %s",
+ "Set log level to debug" : "Nastaviť úroveň záznamu na ladenie",
+ "Reset log level" : "Obnoviť úroveň záznamu",
+ "Starting code integrity check" : "Začína kontrola integrity kódu",
+ "Finished code integrity check" : "Kontrola integrity kódu ukončená",
+ "%s (3rdparty)" : "%s (od tretej strany)",
+ "%s (incompatible)" : "%s (nekompatibilná)",
+ "Following apps have been disabled: %s" : "Nasledovné aplikácie boli zakázané: %s",
+ "Already up to date" : "Už aktuálne",
+ "<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 5 seconds" : "Nastal problém pri načítaní stránky, pokus sa zopakuje o 5 sekúnd",
+ "Saving..." : "Ukladám...",
+ "Dismiss" : "Odmietnuť",
+ "This action requires you to confirm your password" : "Táto akcia vyžaduje potvrdenie vášho hesla",
+ "Authentication required" : "Vyžaduje sa overenie",
+ "Password" : "Heslo",
+ "Cancel" : "Zrušiť",
+ "Confirm" : "Potvrdiť",
+ "Failed to authenticate, try again" : "Nastal problém pri overení, skúste znova",
+ "seconds ago" : "pred sekundami",
+ "Logging in …" : "Prihlasujem ...",
+ "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." : "Odkaz na obnovu hesla bol odoslaný na váš email. Pokiaľ ho neobdržíte v primeranom čase, skontrolujte spam / priečinok nevyžiadanej pošty. <br> Ak tam nie je, kontaktujte svojho administrátora.",
+ "I know what I'm doing" : "Viem, čo robím",
+ "Password can not be changed. Please contact your administrator." : "Heslo nemožno zmeniť. Kontaktujte prosím vášho administrátora.",
+ "No" : "Nie",
+ "Yes" : "Áno",
+ "No files in here" : "Nie sú tu žiadne súbory",
+ "Choose" : "Vybrať",
+ "Error loading file picker template: {error}" : "Chyba pri nahrávaní šablóny výberu súborov: {error}",
+ "Ok" : "Ok",
+ "Error loading message template: {error}" : "Chyba pri nahrávaní šablóny správy: {error}",
+ "read-only" : "iba na čítanie",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt súboru","{count} konflikty súboru","{count} konfliktov súboru"],
+ "One file conflict" : "Jeden konflikt súboru",
+ "New Files" : "Nové súbory",
+ "Already existing files" : "Už existujúce súbory",
+ "Which files do you want to keep?" : "Ktoré súbory chcete ponechať?",
+ "If you select both versions, the copied file will have a number added to its name." : "Ak zvolíte obe verzie, názov nakopírovaného súboru bude doplnený o číslo.",
+ "Continue" : "Pokračovať",
+ "(all selected)" : "(všetko vybrané)",
+ "({count} selected)" : "({count} vybraných)",
+ "Error loading file exists template" : "Chyba pri nahrávaní šablóny existencie súboru",
+ "Pending" : "Čaká",
+ "Very weak password" : "Veľmi slabé heslo",
+ "Weak password" : "Slabé heslo",
+ "So-so password" : "Priemerné heslo",
+ "Good password" : "Dobré heslo",
+ "Strong password" : "Silné heslo",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server nie je zatiaľ správne nastavený, aby umožnil synchronizáciu súborov, pretože rozhranie WebDAV sa zdá byť nefunkčné.",
+ "/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 nie je prístupný na čítanie procesom PHP, čo z bezpečnostných dôvodov nie je vôbec odporúčané. Viac informácií nájdete v našej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentácii</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 je nakonfigurovaný ako distribuovaná vyrovnávacia pamäť, ale v PHP je nainštalovaný nesprávny modul - \"memcache\". \\OC\\Memcache\\Memcached podporuje len modul \"memcached\", \"memcache\" nie je podporovaný. Viac informácií nájdete na <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki stránke o oboch moduloch</a>.",
+ "Error occurred while checking server setup" : "Počas kontroly nastavenia serveru sa stala chyba",
+ "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." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Dôrazne odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný alebo presunúť priečinok s dátami mimo priestoru, ktorý webový server sprístupňuje.",
+ "Shared" : "Sprístupnené",
+ "Shared with {recipients}" : "Sprístupnené {recipients}",
+ "Error" : "Chyba",
+ "Error while sharing" : "Chyba počas sprístupňovania",
+ "Error while unsharing" : "Chyba počas odobratia sprístupnenia",
+ "Error setting expiration date" : "Chyba pri nastavení dátumu expirácie",
+ "The public link will expire no later than {days} days after it is created" : "Verejný odkaz nevyprší skôr než za {days} dní po vytvorení",
+ "Set expiration date" : "Nastaviť dátum expirácie",
+ "Expiration" : "Koniec platnosti",
+ "Expiration date" : "Dátum expirácie",
+ "Choose a password for the public link" : "Zadajte heslo pre tento verejný odkaz",
+ "Copied!" : "Skopírované!",
+ "Copy" : "Kopírovať",
+ "Not supported!" : "Nie je podporované!",
+ "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 link" : "Sprístupniť odkaz",
+ "Link" : "Odkaz",
+ "Password protect" : "Chrániť heslom",
+ "Allow upload and editing" : "Povoliť nahratie a úpravy",
+ "Allow editing" : "Povoliť úpravy",
+ "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}",
+ "group" : "skupina",
+ "remote" : "vzdialený",
+ "Unshare" : "Zneprístupniť",
+ "can edit" : "môže upraviť",
+ "can create" : "môže vytvoriť",
+ "can change" : "môže zmeniť",
+ "can delete" : "môže odstrániť",
+ "access control" : "prístupové práva",
+ "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.",
+ "An error occurred. Please try again" : "Nastala chyba. Skúste to prosím znovu",
+ "Share" : "Sprístupniť",
+ "Share with users or remote users..." : "Sprístupniť používateľom alebo vzdialeným používateľom...",
+ "Share with users or groups..." : "Sprístupniť používateľom alebo skupinám",
+ "Share with users, groups or remote users..." : "Sprístupniť používateľom, skupinám alebo vzdialeným používateľom...",
+ "Share with users..." : "Sprístupniť používateľom...",
+ "Error removing share" : "Chyba pri rušení sprístupnenia",
+ "restricted" : "obmedzený",
+ "invisible" : "neviditeľný",
+ "Delete" : "Zmazať",
+ "Rename" : "Premenovať",
+ "No tags found" : "Štítky sa nenašli",
+ "The object type is not specified." : "Nešpecifikovaný typ objektu.",
+ "Enter new" : "Zadať nový",
+ "Add" : "Pridať",
+ "Edit tags" : "Upraviť štítky",
+ "Error loading dialog template: {error}" : "Chyba pri načítaní šablóny dialógu: {error}",
+ "No tags selected for deletion." : "Nie sú vybraté štítky na zmazanie.",
+ "unknown text" : "neznámy text",
+ "Hello world!" : "Ahoj svet!",
+ "sunny" : "slnečno",
+ "Hello {name}, the weather is {weather}" : "Dobrý deň {name}, počasie je {weather}",
+ "Hello {name}" : "Vitaj {name}",
+ "new" : "nový",
+ "_download %n file_::_download %n files_" : ["stiahnuť %n súbor","stiahnuť %n súbory","stiahnuť %n súborov"],
+ "Update to {version}" : "Aktualizuj na {version}",
+ "An error occurred." : "Vyskytla sa chyba.",
+ "Please reload the page." : "Obnovte prosím stránku.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizácia neprebehla úspešne. Pre viac informácií <a href=\"{url}\">navštívte príspevok na našom fóre</a>, ktorý pokrýva tento problém.",
+ "Continue to Nextcloud" : "Pokračovať na Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Aktualizácia bola úspešná. Presmerovávam na Nextcloud.",
+ "Searching other places" : "Prehľadanie ostatných umiestnení",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} výsledok vyhľadávania v ostatných priečinkoch","{count} výsledky vyhľadávania v ostatných priečinkoch","{count} výsledkov vyhľadávania v ostatných priečinkoch"],
+ "Personal" : "Osobné",
+ "Users" : "Používatelia",
+ "Apps" : "Aplikácie",
+ "Admin" : "Administrácia",
+ "Help" : "Pomoc",
+ "Access forbidden" : "Prístup odmietnutý",
+ "File not found" : "Súbor nenájdený",
+ "The specified document has not been found on the server." : "Zadaný dokument nebol nájdený na serveri.",
+ "You can click here to return to %s." : "Kliknite tu pre návrat do %s.",
+ "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ň!",
+ "Internal Server Error" : "Vnútorná chyba servera",
+ "The server encountered an internal error and was unable to complete your request." : "Na serveri došlo k vnútornej chybe a nebol schopný dokončiť vašu požiadavku.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Obráťte sa na správcu servera, ak sa táto chyba objaví znovu viackrát, uveďte nižšie zobrazené technické údaje vo svojej správe.",
+ "More details can be found in the server log." : "Viac nájdete v logu servera.",
+ "Technical details" : "Technické podrobnosti",
+ "Remote Address: %s" : "Vzdialená adresa: %s",
+ "Request ID: %s" : "ID požiadavky: %s",
+ "Type: %s" : "Typ: %s",
+ "Code: %s" : "Kód: %s",
+ "Message: %s" : "Správa: %s",
+ "File: %s" : "Súbor: %s",
+ "Line: %s" : "Riadok: %s",
+ "Trace" : "Trasa",
+ "Security warning" : "Bezpečnostné varovanie",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.",
+ "Create an <strong>admin account</strong>" : "Vytvoriť <strong>administrátorský účet</strong>",
+ "Username" : "Meno používateľa",
+ "Storage & database" : "Úložislo & databáza",
+ "Data folder" : "Priečinok dát",
+ "Configure the database" : "Nastaviť databázu",
+ "Only %s is available." : "Len %s je dostupný.",
+ "Install and activate additional PHP modules to choose other database types." : "Pri výbere iného typu databázy bude potrebné nainštalovať a aktivovať ďalšie PHP moduly.",
+ "For more details check out the documentation." : "Viac informácií nájdete v dokumentácii.",
+ "Database user" : "Používateľ databázy",
+ "Database password" : "Heslo databázy",
+ "Database name" : "Meno databázy",
+ "Database tablespace" : "Tabuľkový priestor databázy",
+ "Database host" : "Server databázy",
+ "Performance warning" : "Varovanie o výkone",
+ "SQLite will be used as database." : "Bude použitá SQLite databáza.",
+ "For larger installations we recommend to choose a different database backend." : "Pre veľké inštalácie odporúčame vybrať si iné databázové riešenie.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Najmä pri používaní klientských aplikácií na synchronizáciu s desktopom neodporúčame používať SQLite.",
+ "Finish setup" : "Dokončiť inštaláciu",
+ "Finishing …" : "Dokončujem...",
+ "Need help?" : "Potrebujete pomoc?",
+ "See the documentation" : "Pozri dokumentáciu",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku",
+ "Search" : "Hľadať",
+ "Log out" : "Odhlásiť",
+ "Server side authentication failed!" : "Autentifikácia na serveri zlyhala!",
+ "Please contact your administrator." : "Kontaktujte prosím vášho administrátora.",
+ "An internal error occurred." : "Došlo k vnútornej chybe.",
+ "Please try again or contact your administrator." : "Skúste to znovu, alebo sa obráťte na vášho administrátora.",
+ "Wrong password. Reset it?" : "Chybné heslo. Chcete ho obnoviť?",
+ "Wrong password." : "Nesprávne heslo.",
+ "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",
+ "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>",
+ "This Nextcloud instance is currently in single user mode." : "Táto inštancia Nextcloudu je teraz v jednopoužívateľskom móde.",
+ "This means only administrators can use the instance." : "Len správca systému môže používať túto inštanciu.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte prosím správcu systému, ak sa táto správa objavuje opakovane alebo neočakávane.",
+ "Thank you for your patience." : "Ďakujeme za Vašu trpezlivosť.",
+ "You are accessing the server from an untrusted domain." : "Pristupujete na server v nedôveryhodnej doméne.",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na konfigurácii, vám môže byť ako správcovi umožnené použitie tlačidla nižšie pre označenie tejto domény ako dôveryhodnej.",
+ "Add \"%s\" as trusted domain" : "Pridať \"%s\" ako dôveryhodnú doménu",
+ "App update required" : "Je nutná aktualizácia aplikácie",
+ "%s will be updated to version %s" : "%s bude zaktualizovaný na verziu %s.",
+ "These apps will be updated:" : "Tieto aplikácie budú aktualizované:",
+ "These incompatible apps will be disabled:" : "Tieto nekompatibilné aplikácie budú vypnuté:",
+ "The theme %s has been disabled." : "Téma %s bola zakázaná.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Pred vykonaním ďalšieho kroku sa presvedčte, že databáza, konfiguračný a dátový priečinok sú zazálohované.",
+ "Start update" : "Spustiť aktualizáciu",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Aby nedošlo k vypršaniu časového limitu vo väčších inštaláciách, môžete namiesto toho použiť nasledujúci príkaz z inštalačného priečinka:",
+ "Detailed logs" : "Podrobné záznamy",
+ "Update needed" : "Aktualizácia je potrebná",
+ "Please use the command line updater because you have a big instance." : "Vaša inštancia je veľká, použite prosím aktualizáciu cez príkazový riadok.",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Táto %s inštancia je v súčasnej dobe v režime údržby. Počkajte prosím.",
+ "This page will refresh itself when the %s instance is available again." : "Táto stránka sa obnoví sama hneď ako bude %s inštancia znovu dostupná.",
+ "Error loading tags" : "Chyba pri načítaní štítkov",
+ "Tag already exists" : "Štítok už existuje",
+ "Error deleting tag(s)" : "Chyba pri mazaní štítka(ov)",
+ "Error tagging" : "Chyba pri pridaní štítka",
+ "Error untagging" : "Chyba pri odobratí štítka",
+ "Error favoriting" : "Chyba pri pridaní do obľúbených",
+ "Error unfavoriting" : "Chyba pri odobratí z obľúbených",
+ "Couldn't send mail to following users: %s " : "Nebolo možné odoslať email týmto používateľom: %s ",
+ "Sunday" : "Nedeľa",
+ "Monday" : "Pondelok",
+ "Tuesday" : "Utorok",
+ "Wednesday" : "Streda",
+ "Thursday" : "Štvrtok",
+ "Friday" : "Piatok",
+ "Saturday" : "Sobota",
+ "Sun." : "Ned.",
+ "Mon." : "Pon.",
+ "Tue." : "Uto.",
+ "Wed." : "Str.",
+ "Thu." : "Štv.",
+ "Fri." : "Pia.",
+ "Sat." : "Sob.",
+ "Su" : "Ne",
+ "Mo" : "Po",
+ "Tu" : "Ut",
+ "We" : "St",
+ "Th" : "Št",
+ "Fr" : "Pi",
+ "Sa" : "So",
+ "January" : "Január",
+ "February" : "Február",
+ "March" : "Marec",
+ "April" : "Apríl",
+ "May" : "Máj",
+ "June" : "Jún",
+ "July" : "Júl",
+ "August" : "August",
+ "September" : "September",
+ "October" : "Október",
+ "November" : "November",
+ "December" : "December",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Apr.",
+ "May." : "Máj.",
+ "Jun." : "Jún.",
+ "Jul." : "Júl.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dec.",
+ "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?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurácia hlavičiek reverse proxy nie je správna alebo pristupujete k ownCloud z dôveryhodného proxy servera. Ak k ownCloud nepristupujete z dôveryhodného proxy servera, vzniká bezpečnostné riziko - IP adresa potenciálneho útočníka, ktorú vidí ownCloud, môže byť falošná. Viac informácií nájdete v našej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentácii</a>.",
+ "Sending ..." : "Odosielam ...",
+ "Email sent" : "Email odoslaný",
+ "notify by email" : "informovať emailom",
+ "can share" : "môže sprístupniť",
+ "create" : "vytvoriť",
+ "change" : "zmeniť",
+ "delete" : "vymazať",
+ "{sharee} (at {server})" : "{sharee} (na {server})",
+ "Share with users…" : "Sprístupniť používateľom...",
+ "Share with users, groups or remote users…" : "Sprístupniť používateľom, skupinám alebo vzdialeným používateľom...",
+ "Share with users or groups…" : "Sprístupniť používateľom alebo skupinám...",
+ "Share with users or remote users…" : "Sprístupniť používateľom alebo vzdialeným používateľom...",
+ "Warning" : "Varovanie",
+ "Error while sending notification" : "Chyba pri posielaní oznámenia",
+ "Updating to {version}" : "Aktualizuje sa na {version}",
+ "The update was successful. There were warnings." : "Aktualizácia bola úspešná. Vyskytli sa upozornenia.",
+ "No search results in other folders" : "Žiadne výsledky vyhľadávania v ostatných priečinkoch",
+ "Cancel login" : "Zruš prihlasovanie"
+},"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 48d3dcfa743..bd85912c08d 100644
--- a/core/l10n/sl.js
+++ b/core/l10n/sl.js
@@ -3,6 +3,8 @@ OC.L10N.register(
{
"Please select a file." : "Izberite datoteko",
"File is too big" : "Datoteka je prevelika",
+ "The selected file is not an image." : "Izbrana datoteka ni slika.",
+ "The selected file cannot be read." : "Izbrane datoteke ni mogoče prebrati.",
"Invalid file provided" : "Predložena je neveljavna datoteka",
"No image or file provided" : "Ni podane datoteke ali slike",
"Unknown filetype" : "Neznana vrsta datoteke",
@@ -52,7 +54,6 @@ OC.L10N.register(
"Cancel" : "Prekliči",
"seconds ago" : "pred nekaj sekundami",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne dobite v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.",
- "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?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"I know what I'm doing" : "Vem, kaj delam!",
"Password can not be changed. Please contact your administrator." : "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.",
"No" : "Ne",
@@ -108,6 +109,7 @@ OC.L10N.register(
"Link" : "Povezava",
"Password protect" : "Zaščiti z geslom",
"Allow upload and editing" : "Dovoli nalaganje in urejanje",
+ "Allow editing" : "Dovoli urejanje",
"Email link to person" : "Posreduj povezavo po elektronski pošti",
"Send" : "Pošlji",
"Shared with you and the group {group} by {owner}" : "V souporabi z vami in skupino {group}. Lastnik je {owner}.",
@@ -206,8 +208,8 @@ OC.L10N.register(
"Need help?" : "Ali potrebujete pomoč?",
"See the documentation" : "Preverite dokumentacijo",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Program zahteva podporo JavaScript za pravilno delovanje. Med nastavitvami omogočite {linkstart}JavaScript{linkend} in osvežite spletno stran.",
- "Log out" : "Odjava",
"Search" : "Poišči",
+ "Log out" : "Odjava",
"Server side authentication failed!" : "Overitev s strežnika je spodletela!",
"Please contact your administrator." : "Stopite v stik s skrbnikom sistema.",
"An internal error occurred." : "Prišlo je do notranje napake.",
@@ -302,7 +304,7 @@ OC.L10N.register(
"Oct." : "okt",
"Nov." : "nov",
"Dec." : "dec",
- "Allow editing" : "Dovoli urejanje",
+ "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?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"Hide file listing" : "Skrij spisek datotek",
"Sending ..." : "Pošiljanje ...",
"Email sent" : "Elektronska pošta je poslana",
@@ -327,11 +329,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Za vaš račun je določena napredna varnost. Prosim, prijavite se z drugo metodo.",
"Cancel login" : "Prekliči prijavo",
"Please authenticate using the selected factor." : "Prijavite se z izbrano metodo.",
- "An error occured while verifying the token" : "Napaka se je zgodila med preverjanjem ključa",
- "An error occured. Please try again" : "Zgodila se je napaka. Poskusi ponovno",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Souporaba z uporabniki, ki so na drugih oblakih ownCloud s povezavo uporabnik@domena.si/owncloud",
- "not assignable" : "ni nastavljivo",
- "Updating {productName} to version {version}, this may take a while." : "Posodabljanje {productName} na različico {version}, lahko traja nekaj časa.",
- "An internal error occured." : "Zgodila se je interna napaka."
+ "An error occured while verifying the token" : "Napaka se je zgodila med preverjanjem ključa"
},
"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 b14b014be3f..53149b06fb9 100644
--- a/core/l10n/sl.json
+++ b/core/l10n/sl.json
@@ -1,6 +1,8 @@
{ "translations": {
"Please select a file." : "Izberite datoteko",
"File is too big" : "Datoteka je prevelika",
+ "The selected file is not an image." : "Izbrana datoteka ni slika.",
+ "The selected file cannot be read." : "Izbrane datoteke ni mogoče prebrati.",
"Invalid file provided" : "Predložena je neveljavna datoteka",
"No image or file provided" : "Ni podane datoteke ali slike",
"Unknown filetype" : "Neznana vrsta datoteke",
@@ -50,7 +52,6 @@
"Cancel" : "Prekliči",
"seconds ago" : "pred nekaj sekundami",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne dobite v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.",
- "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?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"I know what I'm doing" : "Vem, kaj delam!",
"Password can not be changed. Please contact your administrator." : "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.",
"No" : "Ne",
@@ -106,6 +107,7 @@
"Link" : "Povezava",
"Password protect" : "Zaščiti z geslom",
"Allow upload and editing" : "Dovoli nalaganje in urejanje",
+ "Allow editing" : "Dovoli urejanje",
"Email link to person" : "Posreduj povezavo po elektronski pošti",
"Send" : "Pošlji",
"Shared with you and the group {group} by {owner}" : "V souporabi z vami in skupino {group}. Lastnik je {owner}.",
@@ -204,8 +206,8 @@
"Need help?" : "Ali potrebujete pomoč?",
"See the documentation" : "Preverite dokumentacijo",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Program zahteva podporo JavaScript za pravilno delovanje. Med nastavitvami omogočite {linkstart}JavaScript{linkend} in osvežite spletno stran.",
- "Log out" : "Odjava",
"Search" : "Poišči",
+ "Log out" : "Odjava",
"Server side authentication failed!" : "Overitev s strežnika je spodletela!",
"Please contact your administrator." : "Stopite v stik s skrbnikom sistema.",
"An internal error occurred." : "Prišlo je do notranje napake.",
@@ -300,7 +302,7 @@
"Oct." : "okt",
"Nov." : "nov",
"Dec." : "dec",
- "Allow editing" : "Dovoli urejanje",
+ "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?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"Hide file listing" : "Skrij spisek datotek",
"Sending ..." : "Pošiljanje ...",
"Email sent" : "Elektronska pošta je poslana",
@@ -325,11 +327,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Za vaš račun je določena napredna varnost. Prosim, prijavite se z drugo metodo.",
"Cancel login" : "Prekliči prijavo",
"Please authenticate using the selected factor." : "Prijavite se z izbrano metodo.",
- "An error occured while verifying the token" : "Napaka se je zgodila med preverjanjem ključa",
- "An error occured. Please try again" : "Zgodila se je napaka. Poskusi ponovno",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Souporaba z uporabniki, ki so na drugih oblakih ownCloud s povezavo uporabnik@domena.si/owncloud",
- "not assignable" : "ni nastavljivo",
- "Updating {productName} to version {version}, this may take a while." : "Posodabljanje {productName} na različico {version}, lahko traja nekaj časa.",
- "An internal error occured." : "Zgodila se je interna napaka."
+ "An error occured while verifying the token" : "Napaka se je zgodila med preverjanjem ključa"
},"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 8c1caab3a5c..29a0ee5ff97 100644
--- a/core/l10n/sq.js
+++ b/core/l10n/sq.js
@@ -3,6 +3,8 @@ OC.L10N.register(
{
"Please select a file." : "Ju lutemi, përzgjidhni një kartelë.",
"File is too big" : "Kartela është shumë e madhe",
+ "The selected file is not an image." : "Skedari i zgjedhur nuk është një imazh",
+ "The selected file cannot be read." : "Skedari i zgjedhur nuk mund të lexohet",
"Invalid file provided" : "U dha kartelë e pavlefshme",
"No image or file provided" : "S’u dha figurë apo kartelë",
"Unknown filetype" : "Lloj i panjohur kartele",
@@ -45,18 +47,25 @@ OC.L10N.register(
"Already up to date" : "Tashmë e përditësuar",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Pati probleme me kontrollin e integritetit të kodit. Më tepër të dhëna…</a>",
"Settings" : "Rregullime",
+ "Connection to server lost" : "Lidhja me serverin u shkëput",
"Problem loading page, reloading in 5 seconds" : "Gabim në ngarkimin e faqes, do të ringarkohet pas 5 sekondash",
"Saving..." : "Po ruhet …",
"Dismiss" : "Mos e merr parasysh",
+ "This action requires you to confirm your password" : "Ky veprim kërkon që të konfirmoni fjalëkalimin tuaj.",
+ "Authentication required" : "Verifikim i kërkuar",
"Password" : "Fjalëkalim",
"Cancel" : "Anuloje",
+ "Confirm" : "Konfirmo",
+ "Failed to authenticate, try again" : "Dështoi në verifikim, provo përsëri",
"seconds ago" : "sekonda më parë",
+ "Logging in …" : "Duke u loguar ...",
"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." : "Lidhja për ricaktimin e fjalëkalimi tuaj u dërgua tek email-i juaj. Nëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme/postës së pavlerë.<br>Nëse s’është as aty, pyetni përgjegjësin tuaj lokal.",
- "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?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?",
+ "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?" : "Skedarët tuaj janë të enkriptuar. Nuk do ketë asnjë mënyrë për ti rimarrë të dhënat pasi fjalëkalimi juaj të rivendoset. <br>Nëse nuk jeni të sigurt se çfarë duhet të bëni, ju lutemi flisni me administratorin tuaj para se të vazhdoni. <br /> Doni vërtet të vazhdoni?",
"I know what I'm doing" : "E di se ç’bëj",
"Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutemi, lidhuni me përgjegjësin tuaj.",
"No" : "Jo",
"Yes" : "Po",
+ "No files in here" : "Jo skedar këtu",
"Choose" : "Zgjidhni",
"Error loading file picker template: {error}" : "Gabim në ngarkimin e gjedhes së marrësit të kartelave: {error}",
"Ok" : "Në rregull",
@@ -72,6 +81,7 @@ OC.L10N.register(
"(all selected)" : "(krejt të përzgjedhurat)",
"({count} selected)" : "({count} të përzgjedhura)",
"Error loading file exists template" : "Gabim në ngarkimin e gjedhes kartela ekziston",
+ "Pending" : "Në pritje",
"Very weak password" : "Fjalëkalim shumë i dobët",
"Weak password" : "Fjalëkalim i dobët",
"So-so password" : "Fjalëkalim çka",
@@ -79,9 +89,11 @@ OC.L10N.register(
"Strong password" : "Fjalëkalim i fortë",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Shërbyesi juaj web ende s’është rregulluar për të lejuar njëkohësim kartelash, ngaqë ndërfaqja WebDAV duket se është e dëmtuar.",
"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>." : "Shërbyesi juaj s’është rregulluar si duhet për të kuptuar \"{url}\". Të dhëna të mëtejshme mund të gjenden te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
+ "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." : "Ky shërbyes nuk ka lidhje Internet funksionale. Kjo do të thotë që disa nga karakteristikat e lidhjes së ngarkesës së jashtme, njoftimet rreth përditësimit ose instalimit të aplikacioneve të palës së tretë nuk do të punojnë. Duke aksesuar skedarët në distancë dhe duke dërguar njoftimin me postë elektronike mund të mos punojë. Ne sygjerojmë të aktivizoni lidhjen e Internet për këtë shërbyes nëse doni të keni të gjitha karakteristikat.",
"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>." : "S’ka të formësuar fshehtinë kujtese. Që të përmirësoni punimin, ju lutemi formësoni një të tillë, në pastë. Më tepër të dhëna mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
"/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 s’lexohet dot nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër të dhëna mund të gjenden te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
"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." : "Po xhironi PHP {version}. Ju nxisim të përmirësoni versionin e PHP-së që të përfitoni <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">nga përditësimet e punimit dhe sigurisë të ofruara PHP Group</a>, sapo të mbulohet nga shpërndarja juaj.",
+ "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>." : "E anasjellta e konfigurimit të kryeve proxy është e pasaktë, ose ju po aksesoni Nextcloud nga një proxy i besuar. Nëse nuk jeni duke aksesuar Nextcloud nga një proxy i besuar, kjo është një çështje sigurie dhe mund të lejoj një sulmues të manipuloj adresën e tyre IP si të dukshme nga Nextcloud. Informacione të mëtejshme mund të gjendet në <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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 është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki-n mbi memcached rreth të dy moduleve</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>)" : "Disa kartela s’e kaluan dot kontrollin e pacenueshmërisë. Më tepër të dhëna se si të zgjidhet ky problem mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listë e kartelave të pavlefshme…</a> / <a href=\"{rescanEndpoint}\">Rikontrollojini…</a>)",
"Error occurred while checking server setup" : "Ndodhi një gabim gjatë kontrollit të rregullimit të shërbyesit",
@@ -100,18 +112,32 @@ OC.L10N.register(
"Expiration" : "Skadim",
"Expiration date" : "Datë skadimi",
"Choose a password for the public link" : "Zgjidhni një fjalëkalim për lidhjen publike",
+ "Copied!" : "U kopjua!",
+ "Copy" : "Kopjo",
+ "Not supported!" : "Jo i përshtatshëm!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar.",
"Resharing is not allowed" : "Nuk lejohen rindarjet",
"Share link" : "Lidhje ndarjeje",
"Link" : "Lidhje",
"Password protect" : "Mbroje me fjalëkalim",
+ "Allow upload and editing" : "Lejo ngarkim dhe editim",
+ "Allow editing" : "Lejo përpunim",
+ "File drop (upload only)" : "Lësho skedar (vetëm ngarkim)",
"Email link to person" : "Dërgoja personit lidhjen me email",
"Send" : "Dërgoje",
"Shared with you and the group {group} by {owner}" : "Ndarë me ju dhe me grupin {group} nga {owner}",
"Shared with you by {owner}" : "Ndarë me ju nga {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shpërndaEmrinEShfaqurTëNismëtarit}} shpërnda nëpërmjet linkut",
"group" : "grup",
"remote" : "i largët",
+ "email" : "postë elektronike",
"Unshare" : "Hiqe ndarjen",
+ "can reshare" : "mund të rishpërndahet",
"can edit" : "mund të përpunojnë",
+ "can create" : "mund të krijohet",
+ "can change" : "mund të ndryshohet",
+ "can delete" : "mund të fshihet",
"access control" : "kontroll hyrjesh",
"Could not unshare" : "S’e shndau dot",
"Share details could not be loaded for this item." : "Për këtë objekt s’u ngarkuan dot hollësi ndarjeje.",
@@ -120,7 +146,17 @@ OC.L10N.register(
"An error occurred. Please try again" : "Ndodhi një gabim. Ju lutemi, riprovoni",
"{sharee} (group)" : "{sharee} (grup)",
"{sharee} (remote)" : "{sharee} (i largët)",
+ "{sharee} (email)" : "{shpërnda} (postë elektronike)",
"Share" : "Ndaje",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Shpërnda me njerëzit në serverat e tjerë duke përdorur ID e tyre të Cloud-it të Federuar\nusername@example.com/nextcloud",
+ "Share with users or by mail..." : "Shpërnda me përdoruesit ose nga posta elektronike",
+ "Share with users or remote users..." : "Shpërnda me përdoruesit ose me përdoruesit në distancë...",
+ "Share with users, remote users or by mail..." : "Shpërnda me përdoruesit, përdoruesit në distancë ose nga posta elektronike...",
+ "Share with users or groups..." : "Shpërnda me përdoruesit ose grupet...",
+ "Share with users, groups or by mail..." : "Shpërnda me përdoruesit, grupet ose nga posta elektronike...",
+ "Share with users, groups or remote users..." : "Shpërnda me përdoruesit, grupet ose përdoruesit në distancë...",
+ "Share with users, groups, remote users or by mail..." : "Shpërnda me përdoruesit, grupet, përdoruesit në distancë ose nga posta elektronike...",
+ "Share with users..." : "Shpërnda me përdoruesit...",
"Error removing share" : "Gabim në heqjen e ndarjes",
"Non-existing tag #{tag}" : "Etiketë #{tag} që s’ekziston",
"restricted" : "e kufizuar",
@@ -129,6 +165,7 @@ OC.L10N.register(
"Delete" : "Fshije",
"Rename" : "Riemërtoje",
"Collaborative tags" : "Etiketa bashkëpunimi",
+ "No tags found" : "Jo etiketime të gjetura",
"The object type is not specified." : "S’është specifikuar lloji i objektit.",
"Enter new" : "Jep të ri",
"Add" : "Shtoni",
@@ -142,10 +179,16 @@ OC.L10N.register(
"Hello {name}" : "Tungjatjeta {name}",
"new" : "re",
"_download %n file_::_download %n files_" : ["shkarko %n kartelë","shkarko %n kartela"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "Përditësimi është në zhvillim, largimi nga faqja mund të ndërpres procesin në disa mjedise.",
+ "Update to {version}" : "Përditëso në {version}",
"An error occurred." : "Ndodhi një gabim.",
"Please reload the page." : "Ju lutemi, ringarkoni faqen.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Përditësimi qe i pasuksesshëm. Për më tepër të dhëna <a href=\"{url}\">shihni postimin te forumi ynë</a> lidhur me këtë çështje.",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Përditësimi ishte i pasuksesshëm. Ju lutem raportoni këtë problem në <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.",
+ "Continue to Nextcloud" : "Vazhdoni tek Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Përditësimi ishte i suksesshëm. Ju ridrejtojmë në Nextcloud tani.",
"Searching other places" : "Po kërkohet në vende të tjera",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Jo rezultate nga kërkimi në dosjet e tjera për '{etiketim}{filtrim}{përfundoetiketimin}'",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} përfundim kërkimi në një tjetër dosje","{count} përfundime kërkimi në dosje të tjera"],
"Personal" : "Personale",
"Users" : "Përdorues",
@@ -188,6 +231,7 @@ OC.L10N.register(
"Database name" : "Emër baze të dhënash",
"Database tablespace" : "Tablespace-i i database-it",
"Database host" : "Strehë baze të dhënash",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Ju lutem specifikoni numrin e portës së bashku me një emër hosti (p.sh. localhost:5432).",
"Performance warning" : "Sinjalizim funksionimi",
"SQLite will be used as database." : "Si bazë të dhënash do të përdoret SQLite.",
"For larger installations we recommend to choose a different database backend." : "Për instalime më të mëdha këshillojmë të zgjidhni një tjetër program shërbyesi baze të dhënash.",
@@ -197,8 +241,10 @@ OC.L10N.register(
"Need help?" : "Ju duhet ndihmë?",
"See the documentation" : "Shihni dokumentimin",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ky aplikacion lyp JavaScript për punim të saktë. Ju lutemi, {linkstart}aktivizoni JavaScript-in{linkend} dhe ringarkoni faqen.",
- "Log out" : "Dilni",
"Search" : "Kërko",
+ "Log out" : "Dilni",
+ "This action requires you to confirm your password:" : "Ky veprim kërkon të konfirmoni fjalëkalimin tuaj:",
+ "Confirm your password" : "Konfrimoni fjalëkalimin tuaj",
"Server side authentication failed!" : "Mirëfilltësimi më anë të shërbyesit dështoi!",
"Please contact your administrator." : "Ju lutemi, lidhuni me përgjegjësin tuaj.",
"An internal error occurred." : "Ndodhi një gabim i brendshëm.",
@@ -218,6 +264,11 @@ OC.L10N.register(
"This means only administrators can use the instance." : "Kjo do të thotë që instancën mund ta përdorin vetëm administratorët.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Nëse ky mesazh shfaqet vazhdimisht ose u shfaq papritmas, lidhuni me përgjegjësin e sistemit.",
"Thank you for your patience." : "Ju faleminderit për durimin.",
+ "Two-factor authentication" : "Verifikim dy-element",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Rrit sigurinë për llogarin tuaj. Ju lutem bëni verifikimin duke përdorur një element të dytë.",
+ "Cancel log in" : "Anuloni identifikimin",
+ "Use backup code" : "Përdorni kodin e kopjes rezervë",
+ "Error while validating your second factor" : "Gabim gjatë verifikimit të elementit të dytë",
"You are accessing the server from an untrusted domain." : "Po hyni në shërbyes nga një përkatësi jo e besuar.",
"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." : "Ju lutemi, lidhuni me përgjegjësin tuaj. Nëse jeni një përgjegjës në këtë instancë, formësoni rregullimin \"trusted_domains\" te config/config.php. Një formësim shembull jepet te 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." : "Në varësi të formësimit tuaj, si administrator mundet gjithashtu të jeni në gjendje të përdorni butonin më poshtë për ta besuar këtë përkatësi.",
@@ -289,8 +340,10 @@ OC.L10N.register(
"Oct." : "Tet.",
"Nov." : "Nën.",
"Dec." : "Dhj.",
+ "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?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?",
+ "This server has no working Internet connection. 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." : "Ky shërbyes nuk ka lidhje Internet funksionale. Kjo do të thotë që disa nga karakteristikat e lidhjes së ngarkesës së jashtme, njoftimet rreth përditësimit ose instalimit të aplikacioneve të palës së tretë nuk do të punojnë. Duke aksesuar skedarët në distancë dhe duke dërguar njoftimin me postë elektronike mund të mos punojë. Ne sygjerojmë të aktivizoni lidhjen e Internet për këtë shërbyes nëse doni të keni të gjitha karakteristikat.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
- "Allow editing" : "Lejo përpunim",
+ "Hide file listing" : "Fshih skedarin e listimit",
"Sending ..." : "Po dërgohet …",
"Email sent" : "Email-i u dërgua",
"Send link via email" : "Dërgojeni lidhjen me email",
@@ -306,12 +359,14 @@ OC.L10N.register(
"Share with users or remote users…" : "Ndajeni me përdorues ose përdorues të largët…",
"Warning" : "Kujdes",
"Error while sending notification" : "Gabim gjatë dërgimit të njoftimit",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Përmirësimi është në progres, largimi nga faqja mund të ndërpres procesin në disa mjedise.",
+ "Updating to {version}" : "Përditësim në {version}",
+ "The update was successful. There were warnings." : "Përditësimi ishte i suksesshëm. Ka paralajmërime..",
"No search results in other folders" : "S’u gjetën përfundime në dosje të tjera",
"Two-step verification" : "Verifikim dyhapësh",
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Siguria e zgjeruar është aktivizuar për llogarinë tuaj. Ju lutemi, bëni mirëfilltësimin duke përdorur një faktor të dytë.",
"Cancel login" : "Anuloje hyrjen",
- "Please authenticate using the selected factor." : "Ju lutemi, bëni mirëfilltësimin duke përdorur faktorin e përzgjedhur.",
- "An error occured while verifying the token" : "Ndodhi një gabim gjatë verifikimit të token-it",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Ndajeni me persona në ownCloud-e të tjera duke përdorur sintaksën username@example.com/owncloud"
+ "Please authenticate using the selected factor." : "Ju lutemi, bëni identifikimin duke përdorur faktorin e përzgjedhur.",
+ "An error occured while verifying the token" : "Ndodhi një gabim gjatë verifikimit të token-it"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/sq.json b/core/l10n/sq.json
index b5ee4a364c4..b61584cc5f3 100644
--- a/core/l10n/sq.json
+++ b/core/l10n/sq.json
@@ -1,6 +1,8 @@
{ "translations": {
"Please select a file." : "Ju lutemi, përzgjidhni një kartelë.",
"File is too big" : "Kartela është shumë e madhe",
+ "The selected file is not an image." : "Skedari i zgjedhur nuk është një imazh",
+ "The selected file cannot be read." : "Skedari i zgjedhur nuk mund të lexohet",
"Invalid file provided" : "U dha kartelë e pavlefshme",
"No image or file provided" : "S’u dha figurë apo kartelë",
"Unknown filetype" : "Lloj i panjohur kartele",
@@ -43,18 +45,25 @@
"Already up to date" : "Tashmë e përditësuar",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Pati probleme me kontrollin e integritetit të kodit. Më tepër të dhëna…</a>",
"Settings" : "Rregullime",
+ "Connection to server lost" : "Lidhja me serverin u shkëput",
"Problem loading page, reloading in 5 seconds" : "Gabim në ngarkimin e faqes, do të ringarkohet pas 5 sekondash",
"Saving..." : "Po ruhet …",
"Dismiss" : "Mos e merr parasysh",
+ "This action requires you to confirm your password" : "Ky veprim kërkon që të konfirmoni fjalëkalimin tuaj.",
+ "Authentication required" : "Verifikim i kërkuar",
"Password" : "Fjalëkalim",
"Cancel" : "Anuloje",
+ "Confirm" : "Konfirmo",
+ "Failed to authenticate, try again" : "Dështoi në verifikim, provo përsëri",
"seconds ago" : "sekonda më parë",
+ "Logging in …" : "Duke u loguar ...",
"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." : "Lidhja për ricaktimin e fjalëkalimi tuaj u dërgua tek email-i juaj. Nëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme/postës së pavlerë.<br>Nëse s’është as aty, pyetni përgjegjësin tuaj lokal.",
- "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?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?",
+ "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?" : "Skedarët tuaj janë të enkriptuar. Nuk do ketë asnjë mënyrë për ti rimarrë të dhënat pasi fjalëkalimi juaj të rivendoset. <br>Nëse nuk jeni të sigurt se çfarë duhet të bëni, ju lutemi flisni me administratorin tuaj para se të vazhdoni. <br /> Doni vërtet të vazhdoni?",
"I know what I'm doing" : "E di se ç’bëj",
"Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutemi, lidhuni me përgjegjësin tuaj.",
"No" : "Jo",
"Yes" : "Po",
+ "No files in here" : "Jo skedar këtu",
"Choose" : "Zgjidhni",
"Error loading file picker template: {error}" : "Gabim në ngarkimin e gjedhes së marrësit të kartelave: {error}",
"Ok" : "Në rregull",
@@ -70,6 +79,7 @@
"(all selected)" : "(krejt të përzgjedhurat)",
"({count} selected)" : "({count} të përzgjedhura)",
"Error loading file exists template" : "Gabim në ngarkimin e gjedhes kartela ekziston",
+ "Pending" : "Në pritje",
"Very weak password" : "Fjalëkalim shumë i dobët",
"Weak password" : "Fjalëkalim i dobët",
"So-so password" : "Fjalëkalim çka",
@@ -77,9 +87,11 @@
"Strong password" : "Fjalëkalim i fortë",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Shërbyesi juaj web ende s’është rregulluar për të lejuar njëkohësim kartelash, ngaqë ndërfaqja WebDAV duket se është e dëmtuar.",
"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>." : "Shërbyesi juaj s’është rregulluar si duhet për të kuptuar \"{url}\". Të dhëna të mëtejshme mund të gjenden te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
+ "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." : "Ky shërbyes nuk ka lidhje Internet funksionale. Kjo do të thotë që disa nga karakteristikat e lidhjes së ngarkesës së jashtme, njoftimet rreth përditësimit ose instalimit të aplikacioneve të palës së tretë nuk do të punojnë. Duke aksesuar skedarët në distancë dhe duke dërguar njoftimin me postë elektronike mund të mos punojë. Ne sygjerojmë të aktivizoni lidhjen e Internet për këtë shërbyes nëse doni të keni të gjitha karakteristikat.",
"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>." : "S’ka të formësuar fshehtinë kujtese. Që të përmirësoni punimin, ju lutemi formësoni një të tillë, në pastë. Më tepër të dhëna mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
"/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 s’lexohet dot nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër të dhëna mund të gjenden te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
"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." : "Po xhironi PHP {version}. Ju nxisim të përmirësoni versionin e PHP-së që të përfitoni <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">nga përditësimet e punimit dhe sigurisë të ofruara PHP Group</a>, sapo të mbulohet nga shpërndarja juaj.",
+ "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>." : "E anasjellta e konfigurimit të kryeve proxy është e pasaktë, ose ju po aksesoni Nextcloud nga një proxy i besuar. Nëse nuk jeni duke aksesuar Nextcloud nga një proxy i besuar, kjo është një çështje sigurie dhe mund të lejoj një sulmues të manipuloj adresën e tyre IP si të dukshme nga Nextcloud. Informacione të mëtejshme mund të gjendet në <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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 është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki-n mbi memcached rreth të dy moduleve</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>)" : "Disa kartela s’e kaluan dot kontrollin e pacenueshmërisë. Më tepër të dhëna se si të zgjidhet ky problem mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listë e kartelave të pavlefshme…</a> / <a href=\"{rescanEndpoint}\">Rikontrollojini…</a>)",
"Error occurred while checking server setup" : "Ndodhi një gabim gjatë kontrollit të rregullimit të shërbyesit",
@@ -98,18 +110,32 @@
"Expiration" : "Skadim",
"Expiration date" : "Datë skadimi",
"Choose a password for the public link" : "Zgjidhni një fjalëkalim për lidhjen publike",
+ "Copied!" : "U kopjua!",
+ "Copy" : "Kopjo",
+ "Not supported!" : "Jo i përshtatshëm!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar.",
"Resharing is not allowed" : "Nuk lejohen rindarjet",
"Share link" : "Lidhje ndarjeje",
"Link" : "Lidhje",
"Password protect" : "Mbroje me fjalëkalim",
+ "Allow upload and editing" : "Lejo ngarkim dhe editim",
+ "Allow editing" : "Lejo përpunim",
+ "File drop (upload only)" : "Lësho skedar (vetëm ngarkim)",
"Email link to person" : "Dërgoja personit lidhjen me email",
"Send" : "Dërgoje",
"Shared with you and the group {group} by {owner}" : "Ndarë me ju dhe me grupin {group} nga {owner}",
"Shared with you by {owner}" : "Ndarë me ju nga {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shpërndaEmrinEShfaqurTëNismëtarit}} shpërnda nëpërmjet linkut",
"group" : "grup",
"remote" : "i largët",
+ "email" : "postë elektronike",
"Unshare" : "Hiqe ndarjen",
+ "can reshare" : "mund të rishpërndahet",
"can edit" : "mund të përpunojnë",
+ "can create" : "mund të krijohet",
+ "can change" : "mund të ndryshohet",
+ "can delete" : "mund të fshihet",
"access control" : "kontroll hyrjesh",
"Could not unshare" : "S’e shndau dot",
"Share details could not be loaded for this item." : "Për këtë objekt s’u ngarkuan dot hollësi ndarjeje.",
@@ -118,7 +144,17 @@
"An error occurred. Please try again" : "Ndodhi një gabim. Ju lutemi, riprovoni",
"{sharee} (group)" : "{sharee} (grup)",
"{sharee} (remote)" : "{sharee} (i largët)",
+ "{sharee} (email)" : "{shpërnda} (postë elektronike)",
"Share" : "Ndaje",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Shpërnda me njerëzit në serverat e tjerë duke përdorur ID e tyre të Cloud-it të Federuar\nusername@example.com/nextcloud",
+ "Share with users or by mail..." : "Shpërnda me përdoruesit ose nga posta elektronike",
+ "Share with users or remote users..." : "Shpërnda me përdoruesit ose me përdoruesit në distancë...",
+ "Share with users, remote users or by mail..." : "Shpërnda me përdoruesit, përdoruesit në distancë ose nga posta elektronike...",
+ "Share with users or groups..." : "Shpërnda me përdoruesit ose grupet...",
+ "Share with users, groups or by mail..." : "Shpërnda me përdoruesit, grupet ose nga posta elektronike...",
+ "Share with users, groups or remote users..." : "Shpërnda me përdoruesit, grupet ose përdoruesit në distancë...",
+ "Share with users, groups, remote users or by mail..." : "Shpërnda me përdoruesit, grupet, përdoruesit në distancë ose nga posta elektronike...",
+ "Share with users..." : "Shpërnda me përdoruesit...",
"Error removing share" : "Gabim në heqjen e ndarjes",
"Non-existing tag #{tag}" : "Etiketë #{tag} që s’ekziston",
"restricted" : "e kufizuar",
@@ -127,6 +163,7 @@
"Delete" : "Fshije",
"Rename" : "Riemërtoje",
"Collaborative tags" : "Etiketa bashkëpunimi",
+ "No tags found" : "Jo etiketime të gjetura",
"The object type is not specified." : "S’është specifikuar lloji i objektit.",
"Enter new" : "Jep të ri",
"Add" : "Shtoni",
@@ -140,10 +177,16 @@
"Hello {name}" : "Tungjatjeta {name}",
"new" : "re",
"_download %n file_::_download %n files_" : ["shkarko %n kartelë","shkarko %n kartela"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "Përditësimi është në zhvillim, largimi nga faqja mund të ndërpres procesin në disa mjedise.",
+ "Update to {version}" : "Përditëso në {version}",
"An error occurred." : "Ndodhi një gabim.",
"Please reload the page." : "Ju lutemi, ringarkoni faqen.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Përditësimi qe i pasuksesshëm. Për më tepër të dhëna <a href=\"{url}\">shihni postimin te forumi ynë</a> lidhur me këtë çështje.",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Përditësimi ishte i pasuksesshëm. Ju lutem raportoni këtë problem në <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.",
+ "Continue to Nextcloud" : "Vazhdoni tek Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Përditësimi ishte i suksesshëm. Ju ridrejtojmë në Nextcloud tani.",
"Searching other places" : "Po kërkohet në vende të tjera",
+ "No search results in other folders for '{tag}{filter}{endtag}'" : "Jo rezultate nga kërkimi në dosjet e tjera për '{etiketim}{filtrim}{përfundoetiketimin}'",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} përfundim kërkimi në një tjetër dosje","{count} përfundime kërkimi në dosje të tjera"],
"Personal" : "Personale",
"Users" : "Përdorues",
@@ -186,6 +229,7 @@
"Database name" : "Emër baze të dhënash",
"Database tablespace" : "Tablespace-i i database-it",
"Database host" : "Strehë baze të dhënash",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Ju lutem specifikoni numrin e portës së bashku me një emër hosti (p.sh. localhost:5432).",
"Performance warning" : "Sinjalizim funksionimi",
"SQLite will be used as database." : "Si bazë të dhënash do të përdoret SQLite.",
"For larger installations we recommend to choose a different database backend." : "Për instalime më të mëdha këshillojmë të zgjidhni një tjetër program shërbyesi baze të dhënash.",
@@ -195,8 +239,10 @@
"Need help?" : "Ju duhet ndihmë?",
"See the documentation" : "Shihni dokumentimin",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ky aplikacion lyp JavaScript për punim të saktë. Ju lutemi, {linkstart}aktivizoni JavaScript-in{linkend} dhe ringarkoni faqen.",
- "Log out" : "Dilni",
"Search" : "Kërko",
+ "Log out" : "Dilni",
+ "This action requires you to confirm your password:" : "Ky veprim kërkon të konfirmoni fjalëkalimin tuaj:",
+ "Confirm your password" : "Konfrimoni fjalëkalimin tuaj",
"Server side authentication failed!" : "Mirëfilltësimi më anë të shërbyesit dështoi!",
"Please contact your administrator." : "Ju lutemi, lidhuni me përgjegjësin tuaj.",
"An internal error occurred." : "Ndodhi një gabim i brendshëm.",
@@ -216,6 +262,11 @@
"This means only administrators can use the instance." : "Kjo do të thotë që instancën mund ta përdorin vetëm administratorët.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Nëse ky mesazh shfaqet vazhdimisht ose u shfaq papritmas, lidhuni me përgjegjësin e sistemit.",
"Thank you for your patience." : "Ju faleminderit për durimin.",
+ "Two-factor authentication" : "Verifikim dy-element",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Rrit sigurinë për llogarin tuaj. Ju lutem bëni verifikimin duke përdorur një element të dytë.",
+ "Cancel log in" : "Anuloni identifikimin",
+ "Use backup code" : "Përdorni kodin e kopjes rezervë",
+ "Error while validating your second factor" : "Gabim gjatë verifikimit të elementit të dytë",
"You are accessing the server from an untrusted domain." : "Po hyni në shërbyes nga një përkatësi jo e besuar.",
"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." : "Ju lutemi, lidhuni me përgjegjësin tuaj. Nëse jeni një përgjegjës në këtë instancë, formësoni rregullimin \"trusted_domains\" te config/config.php. Një formësim shembull jepet te 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." : "Në varësi të formësimit tuaj, si administrator mundet gjithashtu të jeni në gjendje të përdorni butonin më poshtë për ta besuar këtë përkatësi.",
@@ -287,8 +338,10 @@
"Oct." : "Tet.",
"Nov." : "Nën.",
"Dec." : "Dhj.",
+ "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?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?",
+ "This server has no working Internet connection. 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." : "Ky shërbyes nuk ka lidhje Internet funksionale. Kjo do të thotë që disa nga karakteristikat e lidhjes së ngarkesës së jashtme, njoftimet rreth përditësimit ose instalimit të aplikacioneve të palës së tretë nuk do të punojnë. Duke aksesuar skedarët në distancë dhe duke dërguar njoftimin me postë elektronike mund të mos punojë. Ne sygjerojmë të aktivizoni lidhjen e Internet për këtë shërbyes nëse doni të keni të gjitha karakteristikat.",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentimi</a> ynë.",
- "Allow editing" : "Lejo përpunim",
+ "Hide file listing" : "Fshih skedarin e listimit",
"Sending ..." : "Po dërgohet …",
"Email sent" : "Email-i u dërgua",
"Send link via email" : "Dërgojeni lidhjen me email",
@@ -304,12 +357,14 @@
"Share with users or remote users…" : "Ndajeni me përdorues ose përdorues të largët…",
"Warning" : "Kujdes",
"Error while sending notification" : "Gabim gjatë dërgimit të njoftimit",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Përmirësimi është në progres, largimi nga faqja mund të ndërpres procesin në disa mjedise.",
+ "Updating to {version}" : "Përditësim në {version}",
+ "The update was successful. There were warnings." : "Përditësimi ishte i suksesshëm. Ka paralajmërime..",
"No search results in other folders" : "S’u gjetën përfundime në dosje të tjera",
"Two-step verification" : "Verifikim dyhapësh",
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Siguria e zgjeruar është aktivizuar për llogarinë tuaj. Ju lutemi, bëni mirëfilltësimin duke përdorur një faktor të dytë.",
"Cancel login" : "Anuloje hyrjen",
- "Please authenticate using the selected factor." : "Ju lutemi, bëni mirëfilltësimin duke përdorur faktorin e përzgjedhur.",
- "An error occured while verifying the token" : "Ndodhi një gabim gjatë verifikimit të token-it",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Ndajeni me persona në ownCloud-e të tjera duke përdorur sintaksën username@example.com/owncloud"
+ "Please authenticate using the selected factor." : "Ju lutemi, bëni identifikimin duke përdorur faktorin e përzgjedhur.",
+ "An error occured while verifying the token" : "Ndodhi një gabim gjatë verifikimit të token-it"
},"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 74d050a2150..f5cad1205bd 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"core",
{
- "Please select a file." : "Vänligen välj en fil.",
+ "Please select a file." : "Välj en fil.",
"File is too big" : "Filen är för stor",
"The selected file is not an image." : "Den valda filen är ingen bild.",
"The selected file cannot be read." : "Den valda filen kan inte läsas.",
@@ -16,10 +16,10 @@ OC.L10N.register(
"Crop is not square" : "Beskärning är inte kvadratisk",
"Couldn't reset password because the token is invalid" : "Kunde inte återställa lösenordet på grund av felaktig token",
"Couldn't reset password because the token is expired" : "Lösenord kunde inte återställas eftersom \"token\" har utgått",
- "Couldn't send reset email. Please make sure your username is correct." : "Kunde inte skicka återställningsmail. Vänligen kontrollera att ditt användarnamn är korrekt.",
- "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kunde inte skicka återställningsmail eftersom det saknas epost-adress för denna användaren. Kontakta din administratör",
+ "Couldn't send reset email. Please make sure your username is correct." : "Kunde inte skicka återställningsmejl. Vänligen kontrollera att ditt användarnamn är korrekt.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kunde inte skicka återställningsmejl eftersom det saknas e-postadress för denna användare. Kontakta din administratör",
"%s password reset" : "%s återställ lösenord",
- "Couldn't send reset email. Please contact your administrator." : "Kunde inte skicka återställningsmail. Vänligen kontakta din administratör.",
+ "Couldn't send reset email. Please contact your administrator." : "Kunde inte skicka återställningsmejl. Vänligen kontakta din administratör.",
"Preparing update" : "Förbereder uppdatering",
"[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "Reperationsvarning:",
@@ -27,8 +27,8 @@ OC.L10N.register(
"Please use the command line updater because automatic updating is disabled in the config.php." : "Vänligen använd den kommandotolksbaserade uppdateringen då automatisk uppdatering är inaktiverat i config.php.",
"[%d / %d]: Checking table %s" : "[%d / %d]: Kontrollerar tabell %s",
"Turned on maintenance mode" : "Aktiverade underhållsläge",
- "Turned off maintenance mode" : "Deaktiverade underhållsläge",
- "Maintenance mode is kept active" : "Underhållsläget förblir aktivt",
+ "Turned off maintenance mode" : "Inaktivera underhållsläge",
+ "Maintenance mode is kept active" : "Underhållsläget förblir aktiverat",
"Updating database schema" : "Uppdaterar databasschema",
"Updated database" : "Uppdaterade databasen",
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Kontrollerar om databasschema kan uppdateras (detta kan ta lång tid beroende på databasens storlek)",
@@ -60,7 +60,7 @@ OC.L10N.register(
"seconds ago" : "sekunder sedan",
"Logging in …" : "Loggar 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." : "Länken för att återställa ditt lösenord har skickats till din e-mail. Om du inte mottar något inom kort, kontrollera spam/skräpkorgen.<br>Om det inte finns något där, vänligen kontakta din lokala administratör.",
- "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?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
+ "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?" : "Dina filer är krypterade. Det kommer inte att finnas något sätt att få tillbaka din data efter att ditt lösenord om ditt lösenord återställs..<br />Om du är osäker på hur du ska göra, vänligen kontakta din administratör innan du fortsätter..<br />Är du verkligen säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag är säker på vad jag gör",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
"No" : "Nej",
@@ -75,7 +75,7 @@ OC.L10N.register(
"One file conflict" : "En filkonflikt",
"New Files" : "Nya filer",
"Already existing files" : "Filer som redan existerar",
- "Which files do you want to keep?" : "Vilken fil vill du behålla?",
+ "Which files do you want to keep?" : "Vilka filer vill du behålla?",
"If you select both versions, the copied file will have a number added to its name." : "Om du väljer båda versionerna kommer de kopierade filerna ha nummer tillagda i filnamnet.",
"Continue" : "Fortsätt",
"(all selected)" : "(Alla valda)",
@@ -90,14 +90,14 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Din webbserver är inte konfigurerad korrekt för att tillåta filsynkronisering eftersom WebDAV gränssnittet verkar otillgängligt.",
"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 webbserver är inte konfigurerad riktigt för att lösa \"{url}\". Vidare information kan hittas i vår <a target=\"_blank\" rel\"noreferrer\" href=\"{docLink}\">dokumentation</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." : "Servern har ingen fungerande internetuppkoppling. Detta betyder att vissa funktioner såsom extern lagring, notifikationer om uppdateringar eller installationer utav tredjepartsapplikationer inte kommer fungera. Åtkomst av filer utifrån och att skicka notifieringar via epost kanske inte fungerar heller. Vi föreslår att internetanslutningen aktiveras för denna server om man vill använda samtliga funktioner.",
- "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 minnes cache har blivit konfigurerad. För att förbättra din prestanda var god konfigurera memcache om tillgängligt. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
+ "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 minnescache har blivit konfigurerad. För att förbättra din prestanda var god konfigurera memcache om tillgängligt. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</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 är inte läsbar av PHP vilket definitivt inte är rekommenderat av säkerhetsskäl. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</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 kör för närvarande PHP {version}. Vi rekommenderar dig att uppgradera din PHP version så att ta fördel utav <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">prestanda och säkerhetsuppdateringar från PHP Group</a> så fort som din distribution stödjer det.",
"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>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, så är detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan hittas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</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 är konfigurerad som distribuerad cache, men fel PHP modul \"memcache\" är installerad. \\OC\\Memcache\\Memcached stödjer bara \"memcached\" och inte \"memcache\". Se wiki för <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached för båda modulerna</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>)" : "Några filer passerade inte integritetskontrollen. Vidare information om hur man löser dessa problem kan finnas i vår dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista över felaktiga filer…</a> / <a href=\"{rescanEndpoint}\">Sök igenom igen…</a>)",
- "Error occurred while checking server setup" : "Ett fel inträffade när en kontroll utav servens setup gjordes",
- "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." : "Din datakatalog och dina filer är sannolikt tillgängliga över internet. .htaccess filen fungerar ej korrekt. Vi uppmuntrar starkt att du konfigurerar din webbserver på ett sätt som inte gör din datakatalog tillgänglig på nätet eller att man flyttar hela datakatalogen ut ifrån webbserverns webbrot.",
+ "Error occurred while checking server setup" : "Ett fel inträffade när en kontroll utav servens konfiguration gjordes",
+ "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." : "Din datakatalog och dina filer är sannolikt tillgängliga för vem som helst på internet. .htaccess filen fungerar inte korrekt. Vi rekommenderar starkt att du konfigurerar din webbserver på ett sätt som gör din datakatalog otillgänglig för vem som helst på internet eller att du flyttar ut hela datakatalogen ifrån webbserverns webbrot.",
"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." : "\"{header}\" HTTP headern är inte konfigurerad att evalueras till \"{expected}\". Detta är en potensiell säkerhetsrisk och vi rekommenderar dig åtgärda denna inställning.",
"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>." : "The \"Strict-Transport-Security\" HTTP headern är inte konfigurerad till minst \"{seconds}\" sekunder. För förbättrad säkerhet rekommenderas aktivering utav HSTS som beskrivs i våra <a href=\"{docUrl}\" rel=\"noreferrer\">säkerhetstips</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>." : "Du har begärt denna sidan över HTTP. Vi föreslår starkt att du konfigurerar din webbserver att kräva använding utav HTTPS istället, som beskrivs i våra <a href=\"{docUrl}\">säkerhetstips</a>.",
@@ -106,12 +106,12 @@ OC.L10N.register(
"Error" : "Fel",
"Error while sharing" : "Fel vid delning",
"Error while unsharing" : "Fel när delning skulle avslutas",
- "Error setting expiration date" : "Fel vid sättning av utgångsdatum",
- "The public link will expire no later than {days} days after it is created" : "Den publika länken kommer sluta gälla inte senare än {days} dagar efter att den skapades",
- "Set expiration date" : "Sätt utgångsdatum",
+ "Error setting expiration date" : "Fel vid val av utgångsdatum",
+ "The public link will expire no later than {days} days after it is created" : "Den offentliga länken kommer sluta gälla inte senare än {days} dagar efter att den skapades",
+ "Set expiration date" : "Välj utgångsdatum",
"Expiration" : "Upphör",
"Expiration date" : "Utgångsdatum",
- "Choose a password for the public link" : "Välj ett lösenord för den publika länken",
+ "Choose a password for the public link" : "Välj ett lösenord för den offentliga länken",
"Copied!" : "Kopierad!",
"Copy" : "Kopiera",
"Not supported!" : "Stöds ej!",
@@ -122,15 +122,16 @@ OC.L10N.register(
"Link" : "Länk",
"Password protect" : "Lösenordsskydda",
"Allow upload and editing" : "Tillåt uppladdning och redigering",
+ "Allow editing" : "Tillåt redigering",
"File drop (upload only)" : "Göm fillista (endast uppladdning)",
- "Email link to person" : "E-posta länk till person",
+ "Email link to person" : "Skicka länken som e-postmeddelande",
"Send" : "Skicka",
"Shared with you and the group {group} by {owner}" : "Delad med dig och gruppen {group} av {owner}",
"Shared with you by {owner}" : "Delad med dig av {owner}",
"{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} delad via länk",
"group" : "Grupp",
- "remote" : "fjärr",
- "email" : "epost",
+ "remote" : "extern",
+ "email" : "e-post",
"Unshare" : "Sluta dela",
"can reshare" : "kan dela vidare",
"can edit" : "kan redigera",
@@ -138,23 +139,23 @@ OC.L10N.register(
"can change" : "kan ändra",
"can delete" : "kan radera",
"access control" : "åtkomstkontroll",
- "Could not unshare" : "Kunde inte odela",
+ "Could not unshare" : "Kunde inte ta bort delning",
"Share details could not be loaded for this item." : "Delningsdetaljer kunde inte laddas för detta objekt.",
"No users or groups found for {search}" : "Inga användare eller grupper funna för {search}",
"No users found for {search}" : "Inga användare funna för {search}",
"An error occurred. Please try again" : "Ett fel uppstod. Vänligen försök igen",
- "{sharee} (group)" : "{sharee} (group)",
- "{sharee} (remote)" : "{sharee} (remote)",
- "{sharee} (email)" : "{sharee} (email)",
+ "{sharee} (group)" : "{sharee} (grupp)",
+ "{sharee} (remote)" : "{sharee} (externt)",
+ "{sharee} (email)" : "{sharee} (e-post)",
"Share" : "Dela",
- "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Dela med andra personer på andra servrar genom att använda deras Federerade Cloud ID användarnamn@example.com/nextcloud",
- "Share with users or by mail..." : "Dela med användare via epost...",
- "Share with users or remote users..." : "Dela med användare eller fjärranvändare...",
- "Share with users, remote users or by mail..." : "Dela med användare, fjärranvändare eller via epost...",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Dela med andra personer på andra servrar genom att använda deras Federerade Moln-ID användarnamn@example.com/nextcloud",
+ "Share with users or by mail..." : "Dela med användare eller via e-post...",
+ "Share with users or remote users..." : "Dela med användare eller externanvändare...",
+ "Share with users, remote users or by mail..." : "Dela med användare, externanvändare eller via e-post...",
"Share with users or groups..." : "Dela med användare eller grupper...",
"Share with users, groups or by mail..." : "Dela med användare, grupper eller via epost",
- "Share with users, groups or remote users..." : "Dela med användare, grupper eller fjärranvändare...",
- "Share with users, groups, remote users or by mail..." : "Dela med användare, grupper, fjärranvändare eller via epost...",
+ "Share with users, groups or remote users..." : "Dela med användare, grupper eller externanvändare...",
+ "Share with users, groups, remote users or by mail..." : "Dela med användare, grupper, externanvändare eller via e-post...",
"Share with users..." : "Dela med användare...",
"Error removing share" : "Fel uppstod när delning försökte tas bort",
"Non-existing tag #{tag}" : "Icke-existerande tag #{tag}",
@@ -163,13 +164,13 @@ OC.L10N.register(
"({scope})" : "({scope})",
"Delete" : "Radera",
"Rename" : "Byt namn",
- "Collaborative tags" : "Sammarbets taggar",
+ "Collaborative tags" : "Samverkanstaggar",
"No tags found" : "Hittade inga taggar",
"The object type is not specified." : "Objekttypen är inte specificerad.",
"Enter new" : "Skriv nytt",
"Add" : "Lägg till",
"Edit tags" : "Redigera taggar",
- "Error loading dialog template: {error}" : "Fel vid inläsning av dialogmall: {fel}",
+ "Error loading dialog template: {error}" : "Fel vid inläsning av dialogmall: {error}",
"No tags selected for deletion." : "Inga taggar valda för borttagning.",
"unknown text" : "okänd text",
"Hello world!" : "Hej världen!",
@@ -177,7 +178,7 @@ OC.L10N.register(
"Hello {name}, the weather is {weather}" : "Hej {name}, vädret är {weather}",
"Hello {name}" : "Hej {name}",
"new" : "ny",
- "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ner %n filer"],
+ "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ned %n filer"],
"The update is in progress, leaving this page might interrupt the process in some environments." : "Uppdateringen pågår, om sidan lämnas kan uppdateringen misslyckas. ",
"Update to {version}" : "Uppdatera till {version}",
"An error occurred." : "Ett fel inträffade.",
@@ -189,24 +190,24 @@ OC.L10N.register(
"Searching other places" : "Söker på andra platser",
"No search results in other folders for '{tag}{filter}{endtag}'" : "Inga sökresultat i andra mappar för '{tag}{filter}{endtag}'",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} sökresultat i en annan mapp","{count} sökresultat i andra mappar"],
- "Personal" : "Personligt",
+ "Personal" : "Personliga Inställningar",
"Users" : "Användare",
- "Apps" : "Program",
+ "Apps" : "Appar",
"Admin" : "Admin",
"Help" : "Hjälp",
"Access forbidden" : "Åtkomst förbjuden",
"File not found" : "Filen kunde inte hittas",
"The specified document has not been found on the server." : "Det angivna dokumentet hittades inte på servern.",
"You can click here to return to %s." : "Du kan klicka här för att återvända till %s.",
- "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." : "Utdelningen kommer att upphöra %s.",
+ "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!",
"Internal Server Error" : "Internt serverfel",
"The server encountered an internal error and was unable to complete your request." : "Servern påträffade ett internt fel och lmisslyckades att slutföra din begäran.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Vänligen kontakta serveradministratören om detta fel återkommer flera gånger, vänligen inkludera nedanstående tekniska detaljeri din felrapport.",
"More details can be found in the server log." : "Mer detaljer återfinns i serverns logg.",
"Technical details" : "Tekniska detaljer",
- "Remote Address: %s" : "Fjärradress: %s",
+ "Remote Address: %s" : "Extern adress: %s",
"Request ID: %s" : "Begärd ID: %s",
"Type: %s" : "Typ: %s",
"Code: %s" : "Kod: %s",
@@ -230,17 +231,18 @@ OC.L10N.register(
"Database name" : "Databasnamn",
"Database tablespace" : "Databas tabellutrymme",
"Database host" : "Databasserver",
- "Performance warning" : "Prestanda varning",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Vänligen ange portnumret tillsammans med hostnamnet (t.ex. localhost:5432).",
+ "Performance warning" : "Prestandavarning",
"SQLite will be used as database." : "SQLite kommer att användas som databas",
- "For larger installations we recommend to choose a different database backend." : "För större installationer rekommenderar vi at man väljer en annan databasmotor.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när desktop klienten för filsynkronisering används så avråds användande av SQLite.",
- "Finish setup" : "Avsluta installation",
+ "For larger installations we recommend to choose a different database backend." : "För större installationer rekommenderar vi att man väljer en annan databasmotor.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när skrivbordsklienten för filsynkronisering används så avråds användande av SQLite.",
+ "Finish setup" : "Slutför installationen",
"Finishing …" : "Avslutar ...",
"Need help?" : "Behöver du hjälp?",
- "See the documentation" : "Kolla dokumentationen",
+ "See the documentation" : "Läs dokumentationen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denna applikationen kräver JavaScript för att fungera korrekt. Var god {linkstart}aktivera JavaScript{linkend} och ladda om sidan.",
- "Log out" : "Logga ut",
"Search" : "Sök",
+ "Log out" : "Logga ut",
"This action requires you to confirm your password:" : "Denna åtgärd kräver att du bekräftar ditt lösenord:",
"Confirm your password" : "Bekräfta ditt lösenord",
"Server side authentication failed!" : "Servern misslyckades med autentisering!",
@@ -248,7 +250,7 @@ OC.L10N.register(
"An internal error occurred." : "Ett internt fel uppstod.",
"Please try again or contact your administrator." : "Vänligen försök igen eller kontakta din administratör.",
"Username or email" : "Användarnamn eller e-post",
- "Wrong password. Reset it?" : "Fel lösenord. Vill du återställa?",
+ "Wrong password. Reset it?" : "Fel lösenord. Vill du återställa lösenordet?",
"Wrong password." : "Fel lösenord.",
"Log in" : "Logga in",
"Stay logged in" : "Fortsätt vara inloggad.",
@@ -256,19 +258,19 @@ OC.L10N.register(
"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ösenordet",
- "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>ville bara informera dig om att %s delade <strong>%s</strong> med dig.<br><a href=\"%s\">Visa den!</a><br><br>",
+ "Reset password" : "Återställ lösenord",
+ "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>",
"This Nextcloud instance is currently in single user mode." : "Denna Nextcloud instans är för närvarande i enanvändarläge",
"This means only administrators can use the instance." : "Detta betyder att endast administartörer kan använda instansen.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Hör av dig till din systemadministratör ifall detta meddelande fortsätter eller visas oväntat.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Hör av dig till din systemadministratör om detta meddelande fortsätter eller visas oväntat.",
"Thank you for your patience." : "Tack för ditt tålamod.",
"Two-factor authentication" : "Tvåfaktorsautentisering",
- "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Utökad säkerhet är aktiverat för ditt konto. Var vänlig verifiera med en andra faktor. ",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Utökad säkerhet är aktiverat för ditt konto. Var vänlig verifiera med tvåfaktorsautentisering.",
"Cancel log in" : "Avbryt inloggning",
- "Use backup code" : "Använd backupkod",
- "Error while validating your second factor" : "Fel vid verifiering av din andra faktor.",
- "You are accessing the server from an untrusted domain." : "Du ansluter till servern från en osäker domän.",
- "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." : "Var god kontakta din administratör. Om du är en administratör för denna installationen konfigurera \"trusted_domains\" i inställnings i config/config.php. En exempelkonfiguration återfinns i confg/config.sample.php.",
+ "Use backup code" : "Använd reservkod",
+ "Error while validating your second factor" : "Fel vid verifiering av tvåfaktorsautentisering.",
+ "You are accessing the server from an untrusted domain." : "Du försöker ansluta från en icke tillåten domän.",
+ "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." : "Var god kontakta din administratör. Om du är en administratör för denna installation så behöver du konfigurera \"trusted_domains\" i config/config.php. En exempelkonfiguration återfinns i confg/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Beroende på din konfiguartion, så finns det möjlighet att du som administratör kan använda knappen nedan för att verifiera på denna domän.",
"Add \"%s\" as trusted domain" : "Lägg till \"%s\" som en pålitlig domän",
"App update required" : "Appen behöver uppdateras",
@@ -277,7 +279,7 @@ OC.L10N.register(
"These incompatible apps will be disabled:" : "Dessa inkompatibla appar kommer att inaktiveras",
"The theme %s has been disabled." : "Temat %s har blivit inaktiverat.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Vänligen säkerställ att en säkerhetskopia har gjorts av databasen, konfigurations- och datamappen innan du fortsätter.",
- "Start update" : "Starta uppdateringen",
+ "Start update" : "Påbörja uppdateringen",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "För att undvika timeout vid större installationer kan du istället köra följande kommando från din installationskatalog:",
"Detailed logs" : "Detaljerade loggar",
"Update needed" : "Uppdatering krävs",
@@ -285,13 +287,13 @@ OC.L10N.register(
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "För hjälp, se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentationen</a>.",
"This %s instance is currently in maintenance mode, which may take a while." : "Denna %s instans befinner sig för närvarande i underhållsläge, vilket kan ta ett tag.",
"This page will refresh itself when the %s instance is available again." : "Denna sida uppdaterar sig själv när %s instansen är tillgänglig igen.",
- "Error loading tags" : "Fel vid inläsning utav taggar",
- "Tag already exists" : "Tagg existerar redan",
+ "Error loading tags" : "Fel vid inläsning av taggar",
+ "Tag already exists" : "Taggen finns redan",
"Error deleting tag(s)" : "Fel vid borttagning utav tagg(ar)",
"Error tagging" : "Fel vid taggning",
- "Error untagging" : "Fel vid avtaggning",
+ "Error untagging" : "Fel vid borttagning av tagg",
"Error favoriting" : "Fel vid favorisering",
- "Error unfavoriting" : "Fel vid avfavorisering ",
+ "Error unfavoriting" : "Fel vid borttagning av favorisering ",
"Couldn't send mail to following users: %s " : "Gick inte att skicka e-post till följande användare: %s",
"Sunday" : "Söndag",
"Monday" : "Måndag",
@@ -338,23 +340,23 @@ OC.L10N.register(
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
+ "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?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"This server has no working Internet connection. 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." : "Servern har ingen fungerande internetuppkoppling. Detta betyder att vissa funktioner så som extern lagring, notifikationer om uppdateringar eller installationer utav tredjepartsapplikationer inte kommer fungera. Åtkomst av filer utifrån och att skicka notifieringar via epost kanske inte fungerar heller. Vi föreslår att internetanslutningen aktiveras för denna server om man vill använda samtliga funktioner.",
- "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Owncloud från en betrodd proxy. Om du inte försöker nå Owncloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Owncloud. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
- "Allow editing" : "Tillåt redigering",
- "Hide file listing" : "Göm fillista",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
+ "Hide file listing" : "Dölj filer i mappen",
"Sending ..." : "Skickar ...",
"Email sent" : "E-post skickat",
"Send link via email" : "Skicka länk via e-post",
"notify by email" : "informera via e-post",
"can share" : "får dela",
"create" : "skapa",
- "change" : "ändra",
+ "change" : "redigera",
"delete" : "radera",
- "{sharee} (at {server})" : "{sharee} (at {server})",
+ "{sharee} (at {server})" : "{sharee} (på {server})",
"Share with users…" : "Dela med användare...",
- "Share with users, groups or remote users…" : "Dela med användare, grupper och fjärranvändare...",
+ "Share with users, groups or remote users…" : "Dela med användare, grupper eller externanvändare...",
"Share with users or groups…" : "Dela med användare eller grupper...",
- "Share with users or remote users…" : "Dela med användare eller fjärranvändare...",
+ "Share with users or remote users…" : "Dela med användare eller externanvändare...",
"Warning" : "Varning",
"Error while sending notification" : "Fel när notifikation skulle skickas",
"The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Uppgradering pågår, att lämna denna sidan kan störa processen i vissa miljöer",
@@ -365,20 +367,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Utökad säkerhet har aktiverats på ditt konto. Vänligen autentisera med en andra faktor.",
"Cancel login" : "Avbryt inloggning",
"Please authenticate using the selected factor." : "Vänligen autentisera med vald faktor.",
- "An error occured while verifying the token" : "Ett fel uppstod vid verifiering av token.",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Din webbserver är inte konfigurerad riktigt för att lösa \"{url}\". Vidare information kan hittas i vår <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Ingen minnescache har blivit konfigurerad. För att förbättra din prestanda var god konfigurera memcache om tillgängligt. Vidare information kan finnas i vår <a target=\"_blank\" href=\"{docLink}\">dokumentation</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom är inte läsbar av PHP vilket definitivt inte är rekommenderat av säkerhetsskäl. Vidare information kan finnas i vår <a target=\"_blank\" href=\"{docLink}\">dokumentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du kör för närvarande PHP {version}. Vi rekommenderar dig att uppgradera din PHP version så att ta fördel utav <a target=\"_blank\" href=\"{phpLink}\">prestanda och säkerhetsuppdateringar från PHP Group</a> å fort som din distribution stödjer det.",
- "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\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan finnas i vår <a target=\"_blank\" href=\"{docLink}\">documentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached är konfigurerad som distribuerad cache, men fel PHP modul \"memcache\" är installerad. \\OC\\Memcache\\Memcached stödjer bara \"memcached\" och inte \"memcache\". Se wiki för <a target=\"_blank\" href=\"{wikiLink}\">memcached för båda modulerna</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Några filer passerade inte integritetskontrollen. Vidare information om hur man löser dessa problem kan finnas i vår dokumentation <a target=\"_blank\" href=\"{docLink}\">dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista över felaktiga filer…</a> / <a href=\"{rescanEndpoint}\">Sök igenom igen…</a>)",
- "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}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP header är inte konfigurerad till minst \"{seconds}\" sekunder. För utökad säkerhet rekommenderas att HSTS aktiveras som beskrivs i våra <a href=\"{docUrl}\">säkerhetstips</a>.",
- "An error occured. Please try again" : "Ett fel inträffade. Var god försök igen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Dela med folk på andra ownClouds med följande syntax username@example.com/owncloud",
- "not assignable" : "Inte tilldelbar",
- "Updating {productName} to version {version}, this may take a while." : "Uppdaterar {productName} till version {version}, detta kan ta en stund.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "För information om hur servern bör konfigureras, se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
- "An internal error occured." : "Ett internt fel uppstod. "
+ "An error occured while verifying the token" : "Ett fel uppstod vid verifiering av token."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index 503e68c100f..642187b356c 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Please select a file." : "Vänligen välj en fil.",
+ "Please select a file." : "Välj en fil.",
"File is too big" : "Filen är för stor",
"The selected file is not an image." : "Den valda filen är ingen bild.",
"The selected file cannot be read." : "Den valda filen kan inte läsas.",
@@ -14,10 +14,10 @@
"Crop is not square" : "Beskärning är inte kvadratisk",
"Couldn't reset password because the token is invalid" : "Kunde inte återställa lösenordet på grund av felaktig token",
"Couldn't reset password because the token is expired" : "Lösenord kunde inte återställas eftersom \"token\" har utgått",
- "Couldn't send reset email. Please make sure your username is correct." : "Kunde inte skicka återställningsmail. Vänligen kontrollera att ditt användarnamn är korrekt.",
- "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kunde inte skicka återställningsmail eftersom det saknas epost-adress för denna användaren. Kontakta din administratör",
+ "Couldn't send reset email. Please make sure your username is correct." : "Kunde inte skicka återställningsmejl. Vänligen kontrollera att ditt användarnamn är korrekt.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kunde inte skicka återställningsmejl eftersom det saknas e-postadress för denna användare. Kontakta din administratör",
"%s password reset" : "%s återställ lösenord",
- "Couldn't send reset email. Please contact your administrator." : "Kunde inte skicka återställningsmail. Vänligen kontakta din administratör.",
+ "Couldn't send reset email. Please contact your administrator." : "Kunde inte skicka återställningsmejl. Vänligen kontakta din administratör.",
"Preparing update" : "Förbereder uppdatering",
"[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "Reperationsvarning:",
@@ -25,8 +25,8 @@
"Please use the command line updater because automatic updating is disabled in the config.php." : "Vänligen använd den kommandotolksbaserade uppdateringen då automatisk uppdatering är inaktiverat i config.php.",
"[%d / %d]: Checking table %s" : "[%d / %d]: Kontrollerar tabell %s",
"Turned on maintenance mode" : "Aktiverade underhållsläge",
- "Turned off maintenance mode" : "Deaktiverade underhållsläge",
- "Maintenance mode is kept active" : "Underhållsläget förblir aktivt",
+ "Turned off maintenance mode" : "Inaktivera underhållsläge",
+ "Maintenance mode is kept active" : "Underhållsläget förblir aktiverat",
"Updating database schema" : "Uppdaterar databasschema",
"Updated database" : "Uppdaterade databasen",
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Kontrollerar om databasschema kan uppdateras (detta kan ta lång tid beroende på databasens storlek)",
@@ -58,7 +58,7 @@
"seconds ago" : "sekunder sedan",
"Logging in …" : "Loggar 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." : "Länken för att återställa ditt lösenord har skickats till din e-mail. Om du inte mottar något inom kort, kontrollera spam/skräpkorgen.<br>Om det inte finns något där, vänligen kontakta din lokala administratör.",
- "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?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
+ "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?" : "Dina filer är krypterade. Det kommer inte att finnas något sätt att få tillbaka din data efter att ditt lösenord om ditt lösenord återställs..<br />Om du är osäker på hur du ska göra, vänligen kontakta din administratör innan du fortsätter..<br />Är du verkligen säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag är säker på vad jag gör",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
"No" : "Nej",
@@ -73,7 +73,7 @@
"One file conflict" : "En filkonflikt",
"New Files" : "Nya filer",
"Already existing files" : "Filer som redan existerar",
- "Which files do you want to keep?" : "Vilken fil vill du behålla?",
+ "Which files do you want to keep?" : "Vilka filer vill du behålla?",
"If you select both versions, the copied file will have a number added to its name." : "Om du väljer båda versionerna kommer de kopierade filerna ha nummer tillagda i filnamnet.",
"Continue" : "Fortsätt",
"(all selected)" : "(Alla valda)",
@@ -88,14 +88,14 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Din webbserver är inte konfigurerad korrekt för att tillåta filsynkronisering eftersom WebDAV gränssnittet verkar otillgängligt.",
"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 webbserver är inte konfigurerad riktigt för att lösa \"{url}\". Vidare information kan hittas i vår <a target=\"_blank\" rel\"noreferrer\" href=\"{docLink}\">dokumentation</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." : "Servern har ingen fungerande internetuppkoppling. Detta betyder att vissa funktioner såsom extern lagring, notifikationer om uppdateringar eller installationer utav tredjepartsapplikationer inte kommer fungera. Åtkomst av filer utifrån och att skicka notifieringar via epost kanske inte fungerar heller. Vi föreslår att internetanslutningen aktiveras för denna server om man vill använda samtliga funktioner.",
- "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 minnes cache har blivit konfigurerad. För att förbättra din prestanda var god konfigurera memcache om tillgängligt. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
+ "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 minnescache har blivit konfigurerad. För att förbättra din prestanda var god konfigurera memcache om tillgängligt. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</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 är inte läsbar av PHP vilket definitivt inte är rekommenderat av säkerhetsskäl. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</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 kör för närvarande PHP {version}. Vi rekommenderar dig att uppgradera din PHP version så att ta fördel utav <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">prestanda och säkerhetsuppdateringar från PHP Group</a> så fort som din distribution stödjer det.",
"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>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, så är detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan hittas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</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 är konfigurerad som distribuerad cache, men fel PHP modul \"memcache\" är installerad. \\OC\\Memcache\\Memcached stödjer bara \"memcached\" och inte \"memcache\". Se wiki för <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached för båda modulerna</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>)" : "Några filer passerade inte integritetskontrollen. Vidare information om hur man löser dessa problem kan finnas i vår dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista över felaktiga filer…</a> / <a href=\"{rescanEndpoint}\">Sök igenom igen…</a>)",
- "Error occurred while checking server setup" : "Ett fel inträffade när en kontroll utav servens setup gjordes",
- "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." : "Din datakatalog och dina filer är sannolikt tillgängliga över internet. .htaccess filen fungerar ej korrekt. Vi uppmuntrar starkt att du konfigurerar din webbserver på ett sätt som inte gör din datakatalog tillgänglig på nätet eller att man flyttar hela datakatalogen ut ifrån webbserverns webbrot.",
+ "Error occurred while checking server setup" : "Ett fel inträffade när en kontroll utav servens konfiguration gjordes",
+ "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." : "Din datakatalog och dina filer är sannolikt tillgängliga för vem som helst på internet. .htaccess filen fungerar inte korrekt. Vi rekommenderar starkt att du konfigurerar din webbserver på ett sätt som gör din datakatalog otillgänglig för vem som helst på internet eller att du flyttar ut hela datakatalogen ifrån webbserverns webbrot.",
"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." : "\"{header}\" HTTP headern är inte konfigurerad att evalueras till \"{expected}\". Detta är en potensiell säkerhetsrisk och vi rekommenderar dig åtgärda denna inställning.",
"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>." : "The \"Strict-Transport-Security\" HTTP headern är inte konfigurerad till minst \"{seconds}\" sekunder. För förbättrad säkerhet rekommenderas aktivering utav HSTS som beskrivs i våra <a href=\"{docUrl}\" rel=\"noreferrer\">säkerhetstips</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>." : "Du har begärt denna sidan över HTTP. Vi föreslår starkt att du konfigurerar din webbserver att kräva använding utav HTTPS istället, som beskrivs i våra <a href=\"{docUrl}\">säkerhetstips</a>.",
@@ -104,12 +104,12 @@
"Error" : "Fel",
"Error while sharing" : "Fel vid delning",
"Error while unsharing" : "Fel när delning skulle avslutas",
- "Error setting expiration date" : "Fel vid sättning av utgångsdatum",
- "The public link will expire no later than {days} days after it is created" : "Den publika länken kommer sluta gälla inte senare än {days} dagar efter att den skapades",
- "Set expiration date" : "Sätt utgångsdatum",
+ "Error setting expiration date" : "Fel vid val av utgångsdatum",
+ "The public link will expire no later than {days} days after it is created" : "Den offentliga länken kommer sluta gälla inte senare än {days} dagar efter att den skapades",
+ "Set expiration date" : "Välj utgångsdatum",
"Expiration" : "Upphör",
"Expiration date" : "Utgångsdatum",
- "Choose a password for the public link" : "Välj ett lösenord för den publika länken",
+ "Choose a password for the public link" : "Välj ett lösenord för den offentliga länken",
"Copied!" : "Kopierad!",
"Copy" : "Kopiera",
"Not supported!" : "Stöds ej!",
@@ -120,15 +120,16 @@
"Link" : "Länk",
"Password protect" : "Lösenordsskydda",
"Allow upload and editing" : "Tillåt uppladdning och redigering",
+ "Allow editing" : "Tillåt redigering",
"File drop (upload only)" : "Göm fillista (endast uppladdning)",
- "Email link to person" : "E-posta länk till person",
+ "Email link to person" : "Skicka länken som e-postmeddelande",
"Send" : "Skicka",
"Shared with you and the group {group} by {owner}" : "Delad med dig och gruppen {group} av {owner}",
"Shared with you by {owner}" : "Delad med dig av {owner}",
"{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} delad via länk",
"group" : "Grupp",
- "remote" : "fjärr",
- "email" : "epost",
+ "remote" : "extern",
+ "email" : "e-post",
"Unshare" : "Sluta dela",
"can reshare" : "kan dela vidare",
"can edit" : "kan redigera",
@@ -136,23 +137,23 @@
"can change" : "kan ändra",
"can delete" : "kan radera",
"access control" : "åtkomstkontroll",
- "Could not unshare" : "Kunde inte odela",
+ "Could not unshare" : "Kunde inte ta bort delning",
"Share details could not be loaded for this item." : "Delningsdetaljer kunde inte laddas för detta objekt.",
"No users or groups found for {search}" : "Inga användare eller grupper funna för {search}",
"No users found for {search}" : "Inga användare funna för {search}",
"An error occurred. Please try again" : "Ett fel uppstod. Vänligen försök igen",
- "{sharee} (group)" : "{sharee} (group)",
- "{sharee} (remote)" : "{sharee} (remote)",
- "{sharee} (email)" : "{sharee} (email)",
+ "{sharee} (group)" : "{sharee} (grupp)",
+ "{sharee} (remote)" : "{sharee} (externt)",
+ "{sharee} (email)" : "{sharee} (e-post)",
"Share" : "Dela",
- "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Dela med andra personer på andra servrar genom att använda deras Federerade Cloud ID användarnamn@example.com/nextcloud",
- "Share with users or by mail..." : "Dela med användare via epost...",
- "Share with users or remote users..." : "Dela med användare eller fjärranvändare...",
- "Share with users, remote users or by mail..." : "Dela med användare, fjärranvändare eller via epost...",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Dela med andra personer på andra servrar genom att använda deras Federerade Moln-ID användarnamn@example.com/nextcloud",
+ "Share with users or by mail..." : "Dela med användare eller via e-post...",
+ "Share with users or remote users..." : "Dela med användare eller externanvändare...",
+ "Share with users, remote users or by mail..." : "Dela med användare, externanvändare eller via e-post...",
"Share with users or groups..." : "Dela med användare eller grupper...",
"Share with users, groups or by mail..." : "Dela med användare, grupper eller via epost",
- "Share with users, groups or remote users..." : "Dela med användare, grupper eller fjärranvändare...",
- "Share with users, groups, remote users or by mail..." : "Dela med användare, grupper, fjärranvändare eller via epost...",
+ "Share with users, groups or remote users..." : "Dela med användare, grupper eller externanvändare...",
+ "Share with users, groups, remote users or by mail..." : "Dela med användare, grupper, externanvändare eller via e-post...",
"Share with users..." : "Dela med användare...",
"Error removing share" : "Fel uppstod när delning försökte tas bort",
"Non-existing tag #{tag}" : "Icke-existerande tag #{tag}",
@@ -161,13 +162,13 @@
"({scope})" : "({scope})",
"Delete" : "Radera",
"Rename" : "Byt namn",
- "Collaborative tags" : "Sammarbets taggar",
+ "Collaborative tags" : "Samverkanstaggar",
"No tags found" : "Hittade inga taggar",
"The object type is not specified." : "Objekttypen är inte specificerad.",
"Enter new" : "Skriv nytt",
"Add" : "Lägg till",
"Edit tags" : "Redigera taggar",
- "Error loading dialog template: {error}" : "Fel vid inläsning av dialogmall: {fel}",
+ "Error loading dialog template: {error}" : "Fel vid inläsning av dialogmall: {error}",
"No tags selected for deletion." : "Inga taggar valda för borttagning.",
"unknown text" : "okänd text",
"Hello world!" : "Hej världen!",
@@ -175,7 +176,7 @@
"Hello {name}, the weather is {weather}" : "Hej {name}, vädret är {weather}",
"Hello {name}" : "Hej {name}",
"new" : "ny",
- "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ner %n filer"],
+ "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ned %n filer"],
"The update is in progress, leaving this page might interrupt the process in some environments." : "Uppdateringen pågår, om sidan lämnas kan uppdateringen misslyckas. ",
"Update to {version}" : "Uppdatera till {version}",
"An error occurred." : "Ett fel inträffade.",
@@ -187,24 +188,24 @@
"Searching other places" : "Söker på andra platser",
"No search results in other folders for '{tag}{filter}{endtag}'" : "Inga sökresultat i andra mappar för '{tag}{filter}{endtag}'",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} sökresultat i en annan mapp","{count} sökresultat i andra mappar"],
- "Personal" : "Personligt",
+ "Personal" : "Personliga Inställningar",
"Users" : "Användare",
- "Apps" : "Program",
+ "Apps" : "Appar",
"Admin" : "Admin",
"Help" : "Hjälp",
"Access forbidden" : "Åtkomst förbjuden",
"File not found" : "Filen kunde inte hittas",
"The specified document has not been found on the server." : "Det angivna dokumentet hittades inte på servern.",
"You can click here to return to %s." : "Du kan klicka här för att återvända till %s.",
- "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." : "Utdelningen kommer att upphöra %s.",
+ "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!",
"Internal Server Error" : "Internt serverfel",
"The server encountered an internal error and was unable to complete your request." : "Servern påträffade ett internt fel och lmisslyckades att slutföra din begäran.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Vänligen kontakta serveradministratören om detta fel återkommer flera gånger, vänligen inkludera nedanstående tekniska detaljeri din felrapport.",
"More details can be found in the server log." : "Mer detaljer återfinns i serverns logg.",
"Technical details" : "Tekniska detaljer",
- "Remote Address: %s" : "Fjärradress: %s",
+ "Remote Address: %s" : "Extern adress: %s",
"Request ID: %s" : "Begärd ID: %s",
"Type: %s" : "Typ: %s",
"Code: %s" : "Kod: %s",
@@ -228,17 +229,18 @@
"Database name" : "Databasnamn",
"Database tablespace" : "Databas tabellutrymme",
"Database host" : "Databasserver",
- "Performance warning" : "Prestanda varning",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Vänligen ange portnumret tillsammans med hostnamnet (t.ex. localhost:5432).",
+ "Performance warning" : "Prestandavarning",
"SQLite will be used as database." : "SQLite kommer att användas som databas",
- "For larger installations we recommend to choose a different database backend." : "För större installationer rekommenderar vi at man väljer en annan databasmotor.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när desktop klienten för filsynkronisering används så avråds användande av SQLite.",
- "Finish setup" : "Avsluta installation",
+ "For larger installations we recommend to choose a different database backend." : "För större installationer rekommenderar vi att man väljer en annan databasmotor.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när skrivbordsklienten för filsynkronisering används så avråds användande av SQLite.",
+ "Finish setup" : "Slutför installationen",
"Finishing …" : "Avslutar ...",
"Need help?" : "Behöver du hjälp?",
- "See the documentation" : "Kolla dokumentationen",
+ "See the documentation" : "Läs dokumentationen",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denna applikationen kräver JavaScript för att fungera korrekt. Var god {linkstart}aktivera JavaScript{linkend} och ladda om sidan.",
- "Log out" : "Logga ut",
"Search" : "Sök",
+ "Log out" : "Logga ut",
"This action requires you to confirm your password:" : "Denna åtgärd kräver att du bekräftar ditt lösenord:",
"Confirm your password" : "Bekräfta ditt lösenord",
"Server side authentication failed!" : "Servern misslyckades med autentisering!",
@@ -246,7 +248,7 @@
"An internal error occurred." : "Ett internt fel uppstod.",
"Please try again or contact your administrator." : "Vänligen försök igen eller kontakta din administratör.",
"Username or email" : "Användarnamn eller e-post",
- "Wrong password. Reset it?" : "Fel lösenord. Vill du återställa?",
+ "Wrong password. Reset it?" : "Fel lösenord. Vill du återställa lösenordet?",
"Wrong password." : "Fel lösenord.",
"Log in" : "Logga in",
"Stay logged in" : "Fortsätt vara inloggad.",
@@ -254,19 +256,19 @@
"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ösenordet",
- "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>ville bara informera dig om att %s delade <strong>%s</strong> med dig.<br><a href=\"%s\">Visa den!</a><br><br>",
+ "Reset password" : "Återställ lösenord",
+ "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>",
"This Nextcloud instance is currently in single user mode." : "Denna Nextcloud instans är för närvarande i enanvändarläge",
"This means only administrators can use the instance." : "Detta betyder att endast administartörer kan använda instansen.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Hör av dig till din systemadministratör ifall detta meddelande fortsätter eller visas oväntat.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Hör av dig till din systemadministratör om detta meddelande fortsätter eller visas oväntat.",
"Thank you for your patience." : "Tack för ditt tålamod.",
"Two-factor authentication" : "Tvåfaktorsautentisering",
- "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Utökad säkerhet är aktiverat för ditt konto. Var vänlig verifiera med en andra faktor. ",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Utökad säkerhet är aktiverat för ditt konto. Var vänlig verifiera med tvåfaktorsautentisering.",
"Cancel log in" : "Avbryt inloggning",
- "Use backup code" : "Använd backupkod",
- "Error while validating your second factor" : "Fel vid verifiering av din andra faktor.",
- "You are accessing the server from an untrusted domain." : "Du ansluter till servern från en osäker domän.",
- "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." : "Var god kontakta din administratör. Om du är en administratör för denna installationen konfigurera \"trusted_domains\" i inställnings i config/config.php. En exempelkonfiguration återfinns i confg/config.sample.php.",
+ "Use backup code" : "Använd reservkod",
+ "Error while validating your second factor" : "Fel vid verifiering av tvåfaktorsautentisering.",
+ "You are accessing the server from an untrusted domain." : "Du försöker ansluta från en icke tillåten domän.",
+ "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." : "Var god kontakta din administratör. Om du är en administratör för denna installation så behöver du konfigurera \"trusted_domains\" i config/config.php. En exempelkonfiguration återfinns i confg/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Beroende på din konfiguartion, så finns det möjlighet att du som administratör kan använda knappen nedan för att verifiera på denna domän.",
"Add \"%s\" as trusted domain" : "Lägg till \"%s\" som en pålitlig domän",
"App update required" : "Appen behöver uppdateras",
@@ -275,7 +277,7 @@
"These incompatible apps will be disabled:" : "Dessa inkompatibla appar kommer att inaktiveras",
"The theme %s has been disabled." : "Temat %s har blivit inaktiverat.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Vänligen säkerställ att en säkerhetskopia har gjorts av databasen, konfigurations- och datamappen innan du fortsätter.",
- "Start update" : "Starta uppdateringen",
+ "Start update" : "Påbörja uppdateringen",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "För att undvika timeout vid större installationer kan du istället köra följande kommando från din installationskatalog:",
"Detailed logs" : "Detaljerade loggar",
"Update needed" : "Uppdatering krävs",
@@ -283,13 +285,13 @@
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "För hjälp, se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentationen</a>.",
"This %s instance is currently in maintenance mode, which may take a while." : "Denna %s instans befinner sig för närvarande i underhållsläge, vilket kan ta ett tag.",
"This page will refresh itself when the %s instance is available again." : "Denna sida uppdaterar sig själv när %s instansen är tillgänglig igen.",
- "Error loading tags" : "Fel vid inläsning utav taggar",
- "Tag already exists" : "Tagg existerar redan",
+ "Error loading tags" : "Fel vid inläsning av taggar",
+ "Tag already exists" : "Taggen finns redan",
"Error deleting tag(s)" : "Fel vid borttagning utav tagg(ar)",
"Error tagging" : "Fel vid taggning",
- "Error untagging" : "Fel vid avtaggning",
+ "Error untagging" : "Fel vid borttagning av tagg",
"Error favoriting" : "Fel vid favorisering",
- "Error unfavoriting" : "Fel vid avfavorisering ",
+ "Error unfavoriting" : "Fel vid borttagning av favorisering ",
"Couldn't send mail to following users: %s " : "Gick inte att skicka e-post till följande användare: %s",
"Sunday" : "Söndag",
"Monday" : "Måndag",
@@ -336,23 +338,23 @@
"Oct." : "Okt.",
"Nov." : "Nov.",
"Dec." : "Dec.",
+ "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?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"This server has no working Internet connection. 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." : "Servern har ingen fungerande internetuppkoppling. Detta betyder att vissa funktioner så som extern lagring, notifikationer om uppdateringar eller installationer utav tredjepartsapplikationer inte kommer fungera. Åtkomst av filer utifrån och att skicka notifieringar via epost kanske inte fungerar heller. Vi föreslår att internetanslutningen aktiveras för denna server om man vill använda samtliga funktioner.",
- "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Owncloud från en betrodd proxy. Om du inte försöker nå Owncloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Owncloud. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
- "Allow editing" : "Tillåt redigering",
- "Hide file listing" : "Göm fillista",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan finnas i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentation</a>.",
+ "Hide file listing" : "Dölj filer i mappen",
"Sending ..." : "Skickar ...",
"Email sent" : "E-post skickat",
"Send link via email" : "Skicka länk via e-post",
"notify by email" : "informera via e-post",
"can share" : "får dela",
"create" : "skapa",
- "change" : "ändra",
+ "change" : "redigera",
"delete" : "radera",
- "{sharee} (at {server})" : "{sharee} (at {server})",
+ "{sharee} (at {server})" : "{sharee} (på {server})",
"Share with users…" : "Dela med användare...",
- "Share with users, groups or remote users…" : "Dela med användare, grupper och fjärranvändare...",
+ "Share with users, groups or remote users…" : "Dela med användare, grupper eller externanvändare...",
"Share with users or groups…" : "Dela med användare eller grupper...",
- "Share with users or remote users…" : "Dela med användare eller fjärranvändare...",
+ "Share with users or remote users…" : "Dela med användare eller externanvändare...",
"Warning" : "Varning",
"Error while sending notification" : "Fel när notifikation skulle skickas",
"The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Uppgradering pågår, att lämna denna sidan kan störa processen i vissa miljöer",
@@ -363,20 +365,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Utökad säkerhet har aktiverats på ditt konto. Vänligen autentisera med en andra faktor.",
"Cancel login" : "Avbryt inloggning",
"Please authenticate using the selected factor." : "Vänligen autentisera med vald faktor.",
- "An error occured while verifying the token" : "Ett fel uppstod vid verifiering av token.",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Din webbserver är inte konfigurerad riktigt för att lösa \"{url}\". Vidare information kan hittas i vår <a target=\"_blank\" href=\"{docLink}\">documentation</a>.",
- "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\" href=\"{docLink}\">documentation</a>." : "Ingen minnescache har blivit konfigurerad. För att förbättra din prestanda var god konfigurera memcache om tillgängligt. Vidare information kan finnas i vår <a target=\"_blank\" href=\"{docLink}\">dokumentation</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\" href=\"{docLink}\">documentation</a>." : "/dev/urandom är inte läsbar av PHP vilket definitivt inte är rekommenderat av säkerhetsskäl. Vidare information kan finnas i vår <a target=\"_blank\" href=\"{docLink}\">dokumentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du kör för närvarande PHP {version}. Vi rekommenderar dig att uppgradera din PHP version så att ta fördel utav <a target=\"_blank\" href=\"{phpLink}\">prestanda och säkerhetsuppdateringar från PHP Group</a> å fort som din distribution stödjer det.",
- "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\" href=\"{docLink}\">documentation</a>." : "Konfiguration för \"reverse proxy headers\" är felaktig eller så försöker du nå Nextcloud från en betrodd proxy. Om du inte försöker nå Nextcloud från en betrodd proxy, detta är en säkerhetsrisk och kan möjliggöra att en hacker att förfalska sin IP adress som är synlig för Nextcloud. Vidare information kan finnas i vår <a target=\"_blank\" href=\"{docLink}\">documentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached är konfigurerad som distribuerad cache, men fel PHP modul \"memcache\" är installerad. \\OC\\Memcache\\Memcached stödjer bara \"memcached\" och inte \"memcache\". Se wiki för <a target=\"_blank\" href=\"{wikiLink}\">memcached för båda modulerna</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\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Några filer passerade inte integritetskontrollen. Vidare information om hur man löser dessa problem kan finnas i vår dokumentation <a target=\"_blank\" href=\"{docLink}\">dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista över felaktiga filer…</a> / <a href=\"{rescanEndpoint}\">Sök igenom igen…</a>)",
- "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}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP header är inte konfigurerad till minst \"{seconds}\" sekunder. För utökad säkerhet rekommenderas att HSTS aktiveras som beskrivs i våra <a href=\"{docUrl}\">säkerhetstips</a>.",
- "An error occured. Please try again" : "Ett fel inträffade. Var god försök igen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Dela med folk på andra ownClouds med följande syntax username@example.com/owncloud",
- "not assignable" : "Inte tilldelbar",
- "Updating {productName} to version {version}, this may take a while." : "Uppdaterar {productName} till version {version}, detta kan ta en stund.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "För information om hur servern bör konfigureras, se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
- "An internal error occured." : "Ett internt fel uppstod. "
+ "An error occured while verifying the token" : "Ett fel uppstod vid verifiering av token."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js
new file mode 100644
index 00000000000..09129861c82
--- /dev/null
+++ b/core/l10n/th_TH.js
@@ -0,0 +1,285 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "กรุณาเลือกแฟ้ม",
+ "File is too big" : "ไฟล์มีขนาดใหญ่เกินไป",
+ "Invalid file provided" : "ระบุไฟล์ไม่ถูกต้อง",
+ "No image or file provided" : "ไม่มีรูปภาพหรือไฟล์ที่ระบุ",
+ "Unknown filetype" : "ไม่รู้จักชนิดของไฟล์",
+ "Invalid image" : "รูปภาพไม่ถูกต้อง",
+ "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" : "ไม่สามารถตั้งค่ารหัสผ่านเพราะโทเค็นหมดอายุ",
+ "Couldn't send reset email. Please make sure your username is correct." : "ไม่สามารถส่งข้อมูลการตั้งค่าไปยังอีเมลของคุณ กรุณาตรวจสอบชื่อผู้ใช้ของคุณให้ถูกต้อง",
+ "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." : "ไม่สามารถส่งข้อมูลการตั้งค่าไปยังอีเมลของคุณ กรุณาติดต่อผู้ดูแลระบบ",
+ "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",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: กำลังตรวจสอบตาราง %s",
+ "Turned on maintenance mode" : "เปิดโหมดการบำรุงรักษา",
+ "Turned off maintenance mode" : "ปิดโหมดการบำรุงรักษา",
+ "Maintenance mode is kept active" : "โหมดการบำรุงรักษาจะถูกเก็บไว้ใช้งาน",
+ "Updating database schema" : "กำลังอัพเดทฐานข้อมูล schema",
+ "Updated database" : "อัพเดทฐานข้อมูลเรียบร้อยแล้ว",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "กำลังตรวจสอบว่าฐานข้อมูล schema สามารถอัพเดทได้หรือไม่ (นี้อาจใช้เวลานานขึ้นอยู่กับขนาดของฐานข้อมูล)",
+ "Checked database schema update" : "Schema อัพเดตของฐานข้อมูลถูกตรวจสอบ",
+ "Checking updates of apps" : "กำลังตรวจสอบการอัพเดทแอพพลิเคชัน",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "กำลังตรวจสอบว่าฐานข้อมูลสำหรับ schema สำหรับ %s ว่าสามารถอัพเดทได้หรือไม่ (นี้จะใช้เวลานานขึ้นอยู่กับขนาดของฐานข้อมูล)",
+ "Checked database schema update for apps" : "Schema อัพเดตของฐานข้อมูลสำหรับแอพฯ",
+ "Updated \"%s\" to %s" : "อัพเดท \"%s\" ไปยัง %s",
+ "Set log level to debug" : "ตั้งค่าระดับบันทึกเพื่อแก้ปัญหา",
+ "Reset log level" : "ตั้งค่าระดับบันทึกใหม่",
+ "Starting code integrity check" : "กำลังเริ่มต้นรหัสตรวจสอบความสมบูรณ์",
+ "Finished code integrity check" : "ตรวจสอบความสมบูรณ์ของรหัสเสร็จสิ้น",
+ "%s (3rdparty)" : "%s (บุคคลที่ 3)",
+ "%s (incompatible)" : "%s (เข้ากันไม่ได้)",
+ "Following apps have been disabled: %s" : "แอพฯดังต่อไปนี้ถูกปิดการใช้งาน: %s",
+ "Already up to date" : "มีอยู่แล้วถึงวันที่",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">มีปัญหาเกี่ยวกับการตรวจสอบความสมบูรณ์ของรหัส รายละเอียดเพิ่มเติม...</a>",
+ "Settings" : "ตั้งค่า",
+ "Problem loading page, reloading in 5 seconds" : "เกิดปัญหาขณะโหลดหน้าเว็บ จะรีโหลดหน้าเว็บภายใน 5 วินาที",
+ "Saving..." : "กำลังบันทึกข้อมูล...",
+ "Dismiss" : "ยกเลิก",
+ "Password" : "รหัสผ่าน",
+ "Cancel" : "ยกเลิก",
+ "seconds ago" : "วินาที ก่อนหน้านี้",
+ "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>ทั้งนี้หากหาอีเมลไม่พบกรุณาติดต่อผู้ดูแลระบบ",
+ "I know what I'm doing" : "ฉันรู้ว่าฉันกำลังทำอะไรอยู่",
+ "Password can not be changed. Please contact your administrator." : "หากคุณไม่สามารถเปลี่ยนแปลงรหัสผ่าน กรุณาติดต่อผู้ดูแลระบบ",
+ "No" : "ไม่ตกลง",
+ "Yes" : "ตกลง",
+ "Choose" : "เลือก",
+ "Error loading file picker template: {error}" : "เกิดข้อผิดพลาดขณะกำลังโหลดไฟล์เทมเพลต: {error}",
+ "Ok" : "ตกลง",
+ "Error loading message template: {error}" : "เกิดข้อผิดพลาดขณะกำลังโหลดเทมเพลต: {error} ",
+ "read-only" : "อ่านอย่างเดียว",
+ "_{count} file conflict_::_{count} file conflicts_" : ["ไฟล์มีปัญหา {count} ไฟล์"],
+ "One file conflict" : "มีหนึ่งไฟล์ที่มีปัญหา",
+ "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." : "เลือกวางทับไฟล์เดิมหรือ เขียนไฟล์ใหม่จะเพิ่มตัวเลขไปยังชื่อของมัน",
+ "Continue" : "ดำเนินการต่อ",
+ "(all selected)" : "(เลือกทั้งหมด)",
+ "({count} selected)" : "(เลือกจำนวน {count})",
+ "Error loading file exists template" : "เกิดข้อผิดพลาดขณะโหลดไฟล์เทมเพลตที่มีอยู่",
+ "Very weak password" : "รหัสผ่านระดับต่ำมาก",
+ "Weak password" : "รหัสผ่านระดับต่ำ",
+ "So-so password" : "รหัสผ่านระดับปกติ",
+ "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 อาจเสียหาย",
+ "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} เราขอให้คุณอัพเดท <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">เพื่อเหตุผลด้านประสิทธิภาพและความปลอดภัยของ PHP</a>",
+ "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 ไฟล์ไม่ทำงาน เราขอแนะนำให้คุณกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณในทางที่ข้อมูลไดเรกทอรีไม่สามารถเข้าถึงได้หรือคุณย้ายข้อมูลไดเรกทอรีไปยังนอกเว็บเซิร์ฟเวอร์หรือเอกสาร",
+ "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." : "\"{header}\" ไม่ได้กำหนดค่าส่วนหัว Http ให้เท่ากับ \"{expected}\" นี่คือระบบการรักษาความปลอดภัยที่มีศักยภาพหรือลดความเสี่ยงที่จะเกิดขึ้นเราขอแนะนำให้ปรับการตั้งค่านี้",
+ "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" : "กำหนดวันที่หมดอายุ",
+ "Expiration" : "การหมดอายุ",
+ "Expiration date" : "วันที่หมดอายุ",
+ "Choose a password for the public link" : "เลือกรหัสผ่านสำหรับลิงค์สาธารณะ",
+ "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลที่ซ้ำกัน",
+ "Share link" : "แชร์ลิงค์",
+ "Link" : "ลิงค์",
+ "Password protect" : "ป้องกันด้วยรหัสผ่าน",
+ "Allow editing" : "อนุญาตให้แก้ไข",
+ "Email link to person" : "ส่งลิงก์ให้ทางอีเมล",
+ "Send" : "ส่ง",
+ "Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}",
+ "Shared with you by {owner}" : "ถูกแชร์ให้กับคุณโดย {owner}",
+ "group" : "กลุ่มผู้ใช้งาน",
+ "remote" : "รีโมท",
+ "Unshare" : "ยกเลิกการแชร์",
+ "can edit" : "สามารถแก้ไข",
+ "access control" : "ควบคุมการเข้าถึง",
+ "Could not unshare" : "ไม่สามารถยกเลิกการแชร์ได้",
+ "Share details could not be loaded for this item." : "รายละเอียดการแชร์ไม่สามารถโหลดสำหรับรายการนี้",
+ "{sharee} (remote)" : "{sharee} (รีโมท)",
+ "Share" : "แชร์",
+ "Error removing share" : "พบข้อผิดพลาดในรายการที่แชร์ออก",
+ "Non-existing tag #{tag}" : "ไม่มีแท็กนี้อยู่ #{tag}",
+ "invisible" : "จะมองไม่เห็น",
+ "({scope})" : "({scope})",
+ "Delete" : "ลบ",
+ "Rename" : "เปลี่ยนชื่อ",
+ "The object type is not specified." : "ชนิดของวัตถุยังไม่ได้รับการระบุ",
+ "Enter new" : "ใส่ข้อมูลใหม่",
+ "Add" : "เพิ่ม",
+ "Edit tags" : "แก้ไขแท็ก",
+ "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}" : "สวัสดี {name}",
+ "_download %n file_::_download %n files_" : ["ดาวน์โหลด %n ไฟล์"],
+ "An error occurred." : "เกิดข้อผิดพลาด",
+ "Please reload the page." : "โปรดโหลดหน้าเว็บใหม่",
+ "Searching other places" : "กำลังค้นหาสถานที่อื่นๆ",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["ค้นหาพบ {count} ผลลัพธ์ในโฟลเดอร์อื่นๆ"],
+ "Personal" : "ส่วนตัว",
+ "Users" : "ผู้ใช้งาน",
+ "Apps" : "แอปฯ",
+ "Admin" : "ผู้ดูแล",
+ "Help" : "ช่วยเหลือ",
+ "Access forbidden" : "การเข้าถึงถูกหวงห้าม",
+ "File not found" : "ไม่พบไฟล์",
+ "The specified document has not been found on the server." : "ไม่พบเอกสารที่ระบุบนเซิร์ฟเวอร์",
+ "You can click here to return to %s." : "คุณสามารถคลิกที่นี่เพื่อกลับไปยัง %s",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "นี่คุณ,\nอยากให้คุณทราบว่า %s ได้แชร์ %s กับคุณ\nคลิกดูที่นี่: %s\n",
+ "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s",
+ "Cheers!" : "ไชโย!",
+ "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." : "กรุณาติดต่อผู้ดูแลเซิร์ฟเวอร์ถ้าพบข้อผิดพลาดนี้หลายครั้ง กรุณาระบุรายละเอียดทางเทคนิคที่ด้านล่างในรายงานของคุณ",
+ "More details can be found in the server log." : "รายละเอียดเพิ่มเติมสามารถดูได้ที่บันทึกของระบบเซิร์ฟเวอร์",
+ "Technical details" : "รายละเอียดทางเทคนิค",
+ "Remote Address: %s" : "ที่อยู่รีโมท: %s",
+ "Request ID: %s" : "คำขอ ID: %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." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณ อาจไม่สามารถเข้าถึงได้จากอินเทอร์เน็ตเพราะ htaccess ไฟล์ไม่ทำงาน",
+ "Create an <strong>admin account</strong>" : "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>",
+ "Username" : "ชื่อผู้ใช้งาน",
+ "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." : "สำหรับรายละเอียดเพิ่มเติมสามารถตรวจสอบได้ที่ <a href=\"%s\" target=\"_blank\">เอกสาร</a>",
+ "Database user" : "ชื่อผู้ใช้งานฐานข้อมูล",
+ "Database password" : "รหัสผ่านฐานข้อมูล",
+ "Database name" : "ชื่อฐานข้อมูล",
+ "Database tablespace" : "พื้นที่ตารางในฐานข้อมูล",
+ "Database host" : "Database host",
+ "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" : "ติดตั้งเลย",
+ "Finishing …" : "เสร็จสิ้น ...",
+ "Need help?" : "ต้องการความช่วยเหลือ?",
+ "See the documentation" : "ดูได้จากเอกสาร",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "โปรแกรมนี้ต้องการ JavaScript สำหรับการดำเนินงานที่ถูกต้อง กรุณา {linkstart}เปิดใช้งาน JavaScript{linkend} และโหลดหน้าเว็บ",
+ "Search" : "ค้นหา",
+ "Log out" : "ออกจากระบบ",
+ "Server side authentication failed!" : "การรับรองความถูกต้องจากเซิร์ฟเวอร์ล้มเหลว!",
+ "Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ",
+ "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ",
+ "Wrong password. Reset it?" : "รหัสผ่านผิด รีเซ็ตรหัสผ่าน?",
+ "Wrong password." : "รหัสผ่านผิดพลาด",
+ "Log in" : "เข้าสู่ระบบ",
+ "Stay logged in" : "จดจำฉัน",
+ "Alternative Logins" : "ทางเลือกการเข้าสู่ระบบ",
+ "Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
+ "New password" : "รหัสผ่านใหม่",
+ "New Password" : "รหัสผ่านใหม่",
+ "Reset password" : "เปลี่ยนรหัสผ่านใหม่",
+ "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>",
+ "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." : "ขอบคุณสำหรับความอดทนของคุณ เราจะนำความคิดเห็นของท่านมาปรับปรุงระบบให้ดียิ่งขึ้น",
+ "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_domains\" ใน\nconfig/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\" เป็นโดเมนที่เชื่อถือ",
+ "App update required" : "จำเป้นต้องอัพเดทแอพฯ",
+ "%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." : "โปรดตรวจสอบฐานข้อมูล การตั้งค่าโฟลเดอร์และโฟลเดอร์ข้อมูลจะถูกสำรองไว้ก่อนดำเนินการ",
+ "Start update" : "เริ่มต้นอัพเดท",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "เพื่อหลีกเลี่ยงการหมดเวลากับการติดตั้งขนาดใหญ่ คุณสามารถเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีการติดตั้งของคุณ:",
+ "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 สามารถใช้ได้อีกครั้ง",
+ "Error loading tags" : "เกิดข้อผิดพลาดขณะโหลดแท็ก",
+ "Tag already exists" : "มีแท็กอยู่แล้ว",
+ "Error deleting tag(s)" : "เกิดข้อผิดพลาดขณะลบแท็ก",
+ "Error tagging" : "เกิดข้อผิดพลาดขณะติดแท็ก",
+ "Error untagging" : "เกิดข้อผิดพลาดขณะยกเลิกการติดแท็ก",
+ "Error favoriting" : "เกิดข้อผิดพลาดขณะเลือกที่ชื่นชอบ",
+ "Error unfavoriting" : "เกิดข้อผิดพลาดขณะยกเลิกการเลือกที่ชื่นชอบ",
+ "Couldn't send mail to following users: %s " : "ไม่สามารถส่งอีเมลไปยังผู้ใช้: %s",
+ "Sunday" : "วันอาทิตย์",
+ "Monday" : "วันจันทร์",
+ "Tuesday" : "วันอังคาร",
+ "Wednesday" : "วันพุธ",
+ "Thursday" : "วันพฤหัสบดี",
+ "Friday" : "วันศุกร์",
+ "Saturday" : "วันเสาร์",
+ "Sun." : "อา.",
+ "Mon." : "จ.",
+ "Tue." : "อ.",
+ "Wed." : "พ.",
+ "Thu." : "พฤ.",
+ "Fri." : "ศ.",
+ "Sat." : "ส.",
+ "Su" : "อา",
+ "Mo" : "จัน",
+ "Tu" : "อัง",
+ "We" : "พุธ",
+ "Th" : "พฤ",
+ "Fr" : "ศุก",
+ "Sa" : "เสา",
+ "January" : "มกราคม",
+ "February" : "กุมภาพันธ์",
+ "March" : "มีนาคม",
+ "April" : "เมษายน",
+ "May" : "พฤษภาคม",
+ "June" : "มิถุนายน",
+ "July" : "กรกฏาคม",
+ "August" : "สิงหาคม",
+ "September" : "กันยายน",
+ "October" : "ตุลาคม",
+ "November" : "พฤศจิกายน",
+ "December" : "ธันวาคม",
+ "Jan." : "ม.ค.",
+ "Feb." : "ก.พ.",
+ "Mar." : "มี.ค.",
+ "Apr." : "เม.ย.",
+ "May." : "พ.ค.",
+ "Jun." : "มิ.ย.",
+ "Jul." : "ก.ค.",
+ "Aug." : "ส.ค.",
+ "Sep." : "ก.ย.",
+ "Oct." : "ต.ค.",
+ "Nov." : "พ.ย.",
+ "Dec." : "ธ.ค.",
+ "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 /> คุณต้องการดำเนินการต่อ?",
+ "Sending ..." : "กำลังส่ง...",
+ "Email sent" : "ส่งอีเมล์แล้ว",
+ "notify by email" : "แจ้งเตือนทางอีเมล",
+ "can share" : "สามารถแชร์ได้",
+ "create" : "สร้าง",
+ "change" : "เปลี่ยนแปลง",
+ "delete" : "ลบ",
+ "Share with users, groups or remote users…" : "แชร์กับผู้ใช้หรือกลุ่มหรือผู้ใช้โดยการรีโมท ...",
+ "Share with users or remote users…" : "แชร์กับผู้ใช้หรือผู้ใช้โดยการรีโมท ...",
+ "Warning" : "คำเตือน",
+ "Error while sending notification" : "เกิดข้อผิดพลาดขณะกำลังส่งการแจ้งเตือน",
+ "No search results in other folders" : "ไม่พบผลลัพธ์การค้นหาในโฟลเดอร์อื่นๆ"
+},
+"nplurals=1; plural=0;");
diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json
new file mode 100644
index 00000000000..589a776139f
--- /dev/null
+++ b/core/l10n/th_TH.json
@@ -0,0 +1,283 @@
+{ "translations": {
+ "Please select a file." : "กรุณาเลือกแฟ้ม",
+ "File is too big" : "ไฟล์มีขนาดใหญ่เกินไป",
+ "Invalid file provided" : "ระบุไฟล์ไม่ถูกต้อง",
+ "No image or file provided" : "ไม่มีรูปภาพหรือไฟล์ที่ระบุ",
+ "Unknown filetype" : "ไม่รู้จักชนิดของไฟล์",
+ "Invalid image" : "รูปภาพไม่ถูกต้อง",
+ "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" : "ไม่สามารถตั้งค่ารหัสผ่านเพราะโทเค็นหมดอายุ",
+ "Couldn't send reset email. Please make sure your username is correct." : "ไม่สามารถส่งข้อมูลการตั้งค่าไปยังอีเมลของคุณ กรุณาตรวจสอบชื่อผู้ใช้ของคุณให้ถูกต้อง",
+ "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." : "ไม่สามารถส่งข้อมูลการตั้งค่าไปยังอีเมลของคุณ กรุณาติดต่อผู้ดูแลระบบ",
+ "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",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: กำลังตรวจสอบตาราง %s",
+ "Turned on maintenance mode" : "เปิดโหมดการบำรุงรักษา",
+ "Turned off maintenance mode" : "ปิดโหมดการบำรุงรักษา",
+ "Maintenance mode is kept active" : "โหมดการบำรุงรักษาจะถูกเก็บไว้ใช้งาน",
+ "Updating database schema" : "กำลังอัพเดทฐานข้อมูล schema",
+ "Updated database" : "อัพเดทฐานข้อมูลเรียบร้อยแล้ว",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "กำลังตรวจสอบว่าฐานข้อมูล schema สามารถอัพเดทได้หรือไม่ (นี้อาจใช้เวลานานขึ้นอยู่กับขนาดของฐานข้อมูล)",
+ "Checked database schema update" : "Schema อัพเดตของฐานข้อมูลถูกตรวจสอบ",
+ "Checking updates of apps" : "กำลังตรวจสอบการอัพเดทแอพพลิเคชัน",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "กำลังตรวจสอบว่าฐานข้อมูลสำหรับ schema สำหรับ %s ว่าสามารถอัพเดทได้หรือไม่ (นี้จะใช้เวลานานขึ้นอยู่กับขนาดของฐานข้อมูล)",
+ "Checked database schema update for apps" : "Schema อัพเดตของฐานข้อมูลสำหรับแอพฯ",
+ "Updated \"%s\" to %s" : "อัพเดท \"%s\" ไปยัง %s",
+ "Set log level to debug" : "ตั้งค่าระดับบันทึกเพื่อแก้ปัญหา",
+ "Reset log level" : "ตั้งค่าระดับบันทึกใหม่",
+ "Starting code integrity check" : "กำลังเริ่มต้นรหัสตรวจสอบความสมบูรณ์",
+ "Finished code integrity check" : "ตรวจสอบความสมบูรณ์ของรหัสเสร็จสิ้น",
+ "%s (3rdparty)" : "%s (บุคคลที่ 3)",
+ "%s (incompatible)" : "%s (เข้ากันไม่ได้)",
+ "Following apps have been disabled: %s" : "แอพฯดังต่อไปนี้ถูกปิดการใช้งาน: %s",
+ "Already up to date" : "มีอยู่แล้วถึงวันที่",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">มีปัญหาเกี่ยวกับการตรวจสอบความสมบูรณ์ของรหัส รายละเอียดเพิ่มเติม...</a>",
+ "Settings" : "ตั้งค่า",
+ "Problem loading page, reloading in 5 seconds" : "เกิดปัญหาขณะโหลดหน้าเว็บ จะรีโหลดหน้าเว็บภายใน 5 วินาที",
+ "Saving..." : "กำลังบันทึกข้อมูล...",
+ "Dismiss" : "ยกเลิก",
+ "Password" : "รหัสผ่าน",
+ "Cancel" : "ยกเลิก",
+ "seconds ago" : "วินาที ก่อนหน้านี้",
+ "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>ทั้งนี้หากหาอีเมลไม่พบกรุณาติดต่อผู้ดูแลระบบ",
+ "I know what I'm doing" : "ฉันรู้ว่าฉันกำลังทำอะไรอยู่",
+ "Password can not be changed. Please contact your administrator." : "หากคุณไม่สามารถเปลี่ยนแปลงรหัสผ่าน กรุณาติดต่อผู้ดูแลระบบ",
+ "No" : "ไม่ตกลง",
+ "Yes" : "ตกลง",
+ "Choose" : "เลือก",
+ "Error loading file picker template: {error}" : "เกิดข้อผิดพลาดขณะกำลังโหลดไฟล์เทมเพลต: {error}",
+ "Ok" : "ตกลง",
+ "Error loading message template: {error}" : "เกิดข้อผิดพลาดขณะกำลังโหลดเทมเพลต: {error} ",
+ "read-only" : "อ่านอย่างเดียว",
+ "_{count} file conflict_::_{count} file conflicts_" : ["ไฟล์มีปัญหา {count} ไฟล์"],
+ "One file conflict" : "มีหนึ่งไฟล์ที่มีปัญหา",
+ "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." : "เลือกวางทับไฟล์เดิมหรือ เขียนไฟล์ใหม่จะเพิ่มตัวเลขไปยังชื่อของมัน",
+ "Continue" : "ดำเนินการต่อ",
+ "(all selected)" : "(เลือกทั้งหมด)",
+ "({count} selected)" : "(เลือกจำนวน {count})",
+ "Error loading file exists template" : "เกิดข้อผิดพลาดขณะโหลดไฟล์เทมเพลตที่มีอยู่",
+ "Very weak password" : "รหัสผ่านระดับต่ำมาก",
+ "Weak password" : "รหัสผ่านระดับต่ำ",
+ "So-so password" : "รหัสผ่านระดับปกติ",
+ "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 อาจเสียหาย",
+ "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} เราขอให้คุณอัพเดท <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">เพื่อเหตุผลด้านประสิทธิภาพและความปลอดภัยของ PHP</a>",
+ "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 ไฟล์ไม่ทำงาน เราขอแนะนำให้คุณกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณในทางที่ข้อมูลไดเรกทอรีไม่สามารถเข้าถึงได้หรือคุณย้ายข้อมูลไดเรกทอรีไปยังนอกเว็บเซิร์ฟเวอร์หรือเอกสาร",
+ "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." : "\"{header}\" ไม่ได้กำหนดค่าส่วนหัว Http ให้เท่ากับ \"{expected}\" นี่คือระบบการรักษาความปลอดภัยที่มีศักยภาพหรือลดความเสี่ยงที่จะเกิดขึ้นเราขอแนะนำให้ปรับการตั้งค่านี้",
+ "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" : "กำหนดวันที่หมดอายุ",
+ "Expiration" : "การหมดอายุ",
+ "Expiration date" : "วันที่หมดอายุ",
+ "Choose a password for the public link" : "เลือกรหัสผ่านสำหรับลิงค์สาธารณะ",
+ "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลที่ซ้ำกัน",
+ "Share link" : "แชร์ลิงค์",
+ "Link" : "ลิงค์",
+ "Password protect" : "ป้องกันด้วยรหัสผ่าน",
+ "Allow editing" : "อนุญาตให้แก้ไข",
+ "Email link to person" : "ส่งลิงก์ให้ทางอีเมล",
+ "Send" : "ส่ง",
+ "Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}",
+ "Shared with you by {owner}" : "ถูกแชร์ให้กับคุณโดย {owner}",
+ "group" : "กลุ่มผู้ใช้งาน",
+ "remote" : "รีโมท",
+ "Unshare" : "ยกเลิกการแชร์",
+ "can edit" : "สามารถแก้ไข",
+ "access control" : "ควบคุมการเข้าถึง",
+ "Could not unshare" : "ไม่สามารถยกเลิกการแชร์ได้",
+ "Share details could not be loaded for this item." : "รายละเอียดการแชร์ไม่สามารถโหลดสำหรับรายการนี้",
+ "{sharee} (remote)" : "{sharee} (รีโมท)",
+ "Share" : "แชร์",
+ "Error removing share" : "พบข้อผิดพลาดในรายการที่แชร์ออก",
+ "Non-existing tag #{tag}" : "ไม่มีแท็กนี้อยู่ #{tag}",
+ "invisible" : "จะมองไม่เห็น",
+ "({scope})" : "({scope})",
+ "Delete" : "ลบ",
+ "Rename" : "เปลี่ยนชื่อ",
+ "The object type is not specified." : "ชนิดของวัตถุยังไม่ได้รับการระบุ",
+ "Enter new" : "ใส่ข้อมูลใหม่",
+ "Add" : "เพิ่ม",
+ "Edit tags" : "แก้ไขแท็ก",
+ "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}" : "สวัสดี {name}",
+ "_download %n file_::_download %n files_" : ["ดาวน์โหลด %n ไฟล์"],
+ "An error occurred." : "เกิดข้อผิดพลาด",
+ "Please reload the page." : "โปรดโหลดหน้าเว็บใหม่",
+ "Searching other places" : "กำลังค้นหาสถานที่อื่นๆ",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["ค้นหาพบ {count} ผลลัพธ์ในโฟลเดอร์อื่นๆ"],
+ "Personal" : "ส่วนตัว",
+ "Users" : "ผู้ใช้งาน",
+ "Apps" : "แอปฯ",
+ "Admin" : "ผู้ดูแล",
+ "Help" : "ช่วยเหลือ",
+ "Access forbidden" : "การเข้าถึงถูกหวงห้าม",
+ "File not found" : "ไม่พบไฟล์",
+ "The specified document has not been found on the server." : "ไม่พบเอกสารที่ระบุบนเซิร์ฟเวอร์",
+ "You can click here to return to %s." : "คุณสามารถคลิกที่นี่เพื่อกลับไปยัง %s",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "นี่คุณ,\nอยากให้คุณทราบว่า %s ได้แชร์ %s กับคุณ\nคลิกดูที่นี่: %s\n",
+ "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s",
+ "Cheers!" : "ไชโย!",
+ "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." : "กรุณาติดต่อผู้ดูแลเซิร์ฟเวอร์ถ้าพบข้อผิดพลาดนี้หลายครั้ง กรุณาระบุรายละเอียดทางเทคนิคที่ด้านล่างในรายงานของคุณ",
+ "More details can be found in the server log." : "รายละเอียดเพิ่มเติมสามารถดูได้ที่บันทึกของระบบเซิร์ฟเวอร์",
+ "Technical details" : "รายละเอียดทางเทคนิค",
+ "Remote Address: %s" : "ที่อยู่รีโมท: %s",
+ "Request ID: %s" : "คำขอ ID: %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." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณ อาจไม่สามารถเข้าถึงได้จากอินเทอร์เน็ตเพราะ htaccess ไฟล์ไม่ทำงาน",
+ "Create an <strong>admin account</strong>" : "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>",
+ "Username" : "ชื่อผู้ใช้งาน",
+ "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." : "สำหรับรายละเอียดเพิ่มเติมสามารถตรวจสอบได้ที่ <a href=\"%s\" target=\"_blank\">เอกสาร</a>",
+ "Database user" : "ชื่อผู้ใช้งานฐานข้อมูล",
+ "Database password" : "รหัสผ่านฐานข้อมูล",
+ "Database name" : "ชื่อฐานข้อมูล",
+ "Database tablespace" : "พื้นที่ตารางในฐานข้อมูล",
+ "Database host" : "Database host",
+ "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" : "ติดตั้งเลย",
+ "Finishing …" : "เสร็จสิ้น ...",
+ "Need help?" : "ต้องการความช่วยเหลือ?",
+ "See the documentation" : "ดูได้จากเอกสาร",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "โปรแกรมนี้ต้องการ JavaScript สำหรับการดำเนินงานที่ถูกต้อง กรุณา {linkstart}เปิดใช้งาน JavaScript{linkend} และโหลดหน้าเว็บ",
+ "Search" : "ค้นหา",
+ "Log out" : "ออกจากระบบ",
+ "Server side authentication failed!" : "การรับรองความถูกต้องจากเซิร์ฟเวอร์ล้มเหลว!",
+ "Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ",
+ "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ",
+ "Wrong password. Reset it?" : "รหัสผ่านผิด รีเซ็ตรหัสผ่าน?",
+ "Wrong password." : "รหัสผ่านผิดพลาด",
+ "Log in" : "เข้าสู่ระบบ",
+ "Stay logged in" : "จดจำฉัน",
+ "Alternative Logins" : "ทางเลือกการเข้าสู่ระบบ",
+ "Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
+ "New password" : "รหัสผ่านใหม่",
+ "New Password" : "รหัสผ่านใหม่",
+ "Reset password" : "เปลี่ยนรหัสผ่านใหม่",
+ "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>",
+ "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." : "ขอบคุณสำหรับความอดทนของคุณ เราจะนำความคิดเห็นของท่านมาปรับปรุงระบบให้ดียิ่งขึ้น",
+ "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_domains\" ใน\nconfig/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\" เป็นโดเมนที่เชื่อถือ",
+ "App update required" : "จำเป้นต้องอัพเดทแอพฯ",
+ "%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." : "โปรดตรวจสอบฐานข้อมูล การตั้งค่าโฟลเดอร์และโฟลเดอร์ข้อมูลจะถูกสำรองไว้ก่อนดำเนินการ",
+ "Start update" : "เริ่มต้นอัพเดท",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "เพื่อหลีกเลี่ยงการหมดเวลากับการติดตั้งขนาดใหญ่ คุณสามารถเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีการติดตั้งของคุณ:",
+ "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 สามารถใช้ได้อีกครั้ง",
+ "Error loading tags" : "เกิดข้อผิดพลาดขณะโหลดแท็ก",
+ "Tag already exists" : "มีแท็กอยู่แล้ว",
+ "Error deleting tag(s)" : "เกิดข้อผิดพลาดขณะลบแท็ก",
+ "Error tagging" : "เกิดข้อผิดพลาดขณะติดแท็ก",
+ "Error untagging" : "เกิดข้อผิดพลาดขณะยกเลิกการติดแท็ก",
+ "Error favoriting" : "เกิดข้อผิดพลาดขณะเลือกที่ชื่นชอบ",
+ "Error unfavoriting" : "เกิดข้อผิดพลาดขณะยกเลิกการเลือกที่ชื่นชอบ",
+ "Couldn't send mail to following users: %s " : "ไม่สามารถส่งอีเมลไปยังผู้ใช้: %s",
+ "Sunday" : "วันอาทิตย์",
+ "Monday" : "วันจันทร์",
+ "Tuesday" : "วันอังคาร",
+ "Wednesday" : "วันพุธ",
+ "Thursday" : "วันพฤหัสบดี",
+ "Friday" : "วันศุกร์",
+ "Saturday" : "วันเสาร์",
+ "Sun." : "อา.",
+ "Mon." : "จ.",
+ "Tue." : "อ.",
+ "Wed." : "พ.",
+ "Thu." : "พฤ.",
+ "Fri." : "ศ.",
+ "Sat." : "ส.",
+ "Su" : "อา",
+ "Mo" : "จัน",
+ "Tu" : "อัง",
+ "We" : "พุธ",
+ "Th" : "พฤ",
+ "Fr" : "ศุก",
+ "Sa" : "เสา",
+ "January" : "มกราคม",
+ "February" : "กุมภาพันธ์",
+ "March" : "มีนาคม",
+ "April" : "เมษายน",
+ "May" : "พฤษภาคม",
+ "June" : "มิถุนายน",
+ "July" : "กรกฏาคม",
+ "August" : "สิงหาคม",
+ "September" : "กันยายน",
+ "October" : "ตุลาคม",
+ "November" : "พฤศจิกายน",
+ "December" : "ธันวาคม",
+ "Jan." : "ม.ค.",
+ "Feb." : "ก.พ.",
+ "Mar." : "มี.ค.",
+ "Apr." : "เม.ย.",
+ "May." : "พ.ค.",
+ "Jun." : "มิ.ย.",
+ "Jul." : "ก.ค.",
+ "Aug." : "ส.ค.",
+ "Sep." : "ก.ย.",
+ "Oct." : "ต.ค.",
+ "Nov." : "พ.ย.",
+ "Dec." : "ธ.ค.",
+ "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 /> คุณต้องการดำเนินการต่อ?",
+ "Sending ..." : "กำลังส่ง...",
+ "Email sent" : "ส่งอีเมล์แล้ว",
+ "notify by email" : "แจ้งเตือนทางอีเมล",
+ "can share" : "สามารถแชร์ได้",
+ "create" : "สร้าง",
+ "change" : "เปลี่ยนแปลง",
+ "delete" : "ลบ",
+ "Share with users, groups or remote users…" : "แชร์กับผู้ใช้หรือกลุ่มหรือผู้ใช้โดยการรีโมท ...",
+ "Share with users or remote users…" : "แชร์กับผู้ใช้หรือผู้ใช้โดยการรีโมท ...",
+ "Warning" : "คำเตือน",
+ "Error while sending notification" : "เกิดข้อผิดพลาดขณะกำลังส่งการแจ้งเตือน",
+ "No search results in other folders" : "ไม่พบผลลัพธ์การค้นหาในโฟลเดอร์อื่นๆ"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index a4bf07acd53..f938e97716a 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -52,7 +52,6 @@ OC.L10N.register(
"Cancel" : "İptal",
"seconds ago" : "saniyeler önce",
"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." : "Parolanızı değiştirme bağlantısı e-posta adresinize gönderildi. Makul bir süre içerisinde almadıysanız spam/gereksiz klasörlerini kontrol ediniz.<br>Bu konumlarda da yoksa yerel sistem yöneticinize sorunuz.",
- "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?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"I know what I'm doing" : "Ne yaptığımı biliyorum",
"Password can not be changed. Please contact your administrator." : "Parola değiştirilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"No" : "Hayır",
@@ -109,6 +108,7 @@ OC.L10N.register(
"Share link" : "Paylaşma bağlantısı",
"Link" : "Bağlantı",
"Password protect" : "Parola koruması",
+ "Allow editing" : "Düzenlemeye izin ver",
"Email link to person" : "Bağlantıyı e-posta ile gönder",
"Send" : "Gönder",
"Shared with you and the group {group} by {owner}" : "{owner} tarafından sizinle ve {group} ile paylaştırılmış",
@@ -204,8 +204,8 @@ OC.L10N.register(
"Need help?" : "Yardım mı lazım?",
"See the documentation" : "Belgelendirmeye bak",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulama düzgün çalışabilmesi için JavaScript gerektirir. Lütfen {linkstart}JavaScript'i etkinleştirin{linkend} ve sayfayı yeniden yükleyin.",
- "Log out" : "Çıkış yap",
"Search" : "Ara",
+ "Log out" : "Çıkış yap",
"Server side authentication failed!" : "Sunucu taraflı yetkilendirme başarısız!",
"Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"An internal error occurred." : "Dahili bir hata oluştu.",
@@ -296,8 +296,8 @@ OC.L10N.register(
"Oct." : "Eki.",
"Nov." : "Kas.",
"Dec." : "Ara.",
+ "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?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırmanız hatalı veya ownCloud'a güvenilen bir vekil sunucudan erişiyorsunuz. Eğer erişiminiz güvenilen bir vekil sunucu aracılığıyla gerçekleşmiyorsa bu bir güvenlik sorunudur ve bir saldırganın IP adresini farklıymış gibi göstermesine neden olabilir. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.",
- "Allow editing" : "Düzenlemeye izin ver",
"Hide file listing" : "Dosya listelemesini gizle",
"Sending ..." : "Gönderiliyor...",
"Email sent" : "E-posta gönderildi",
@@ -319,7 +319,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Hesabınız için gelişmiş güvenlik etkinleştirildi. Lütfen ikinci etkeni kullanarak kimlik doğrulaması yapın.",
"Cancel login" : "Girişi iptal et",
"Please authenticate using the selected factor." : "Lütfen seçilen etkeni kullanarak kimlik doğrulaması yapın.",
- "An error occured while verifying the token" : "Anahtarı(token) doğrularken bir hata oluştu",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "kullanıcı@example.com/owncloud şeklinde diğer ownCloud kullanan diğer kullanıcılarla paylaş"
+ "An error occured while verifying the token" : "Anahtarı(token) doğrularken bir hata oluştu"
},
"nplurals=2; plural=(n > 1);");
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index bbca4a23402..79c15a5ecee 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -50,7 +50,6 @@
"Cancel" : "İptal",
"seconds ago" : "saniyeler önce",
"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." : "Parolanızı değiştirme bağlantısı e-posta adresinize gönderildi. Makul bir süre içerisinde almadıysanız spam/gereksiz klasörlerini kontrol ediniz.<br>Bu konumlarda da yoksa yerel sistem yöneticinize sorunuz.",
- "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?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"I know what I'm doing" : "Ne yaptığımı biliyorum",
"Password can not be changed. Please contact your administrator." : "Parola değiştirilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"No" : "Hayır",
@@ -107,6 +106,7 @@
"Share link" : "Paylaşma bağlantısı",
"Link" : "Bağlantı",
"Password protect" : "Parola koruması",
+ "Allow editing" : "Düzenlemeye izin ver",
"Email link to person" : "Bağlantıyı e-posta ile gönder",
"Send" : "Gönder",
"Shared with you and the group {group} by {owner}" : "{owner} tarafından sizinle ve {group} ile paylaştırılmış",
@@ -202,8 +202,8 @@
"Need help?" : "Yardım mı lazım?",
"See the documentation" : "Belgelendirmeye bak",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulama düzgün çalışabilmesi için JavaScript gerektirir. Lütfen {linkstart}JavaScript'i etkinleştirin{linkend} ve sayfayı yeniden yükleyin.",
- "Log out" : "Çıkış yap",
"Search" : "Ara",
+ "Log out" : "Çıkış yap",
"Server side authentication failed!" : "Sunucu taraflı yetkilendirme başarısız!",
"Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"An internal error occurred." : "Dahili bir hata oluştu.",
@@ -294,8 +294,8 @@
"Oct." : "Eki.",
"Nov." : "Kas.",
"Dec." : "Ara.",
+ "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?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırmanız hatalı veya ownCloud'a güvenilen bir vekil sunucudan erişiyorsunuz. Eğer erişiminiz güvenilen bir vekil sunucu aracılığıyla gerçekleşmiyorsa bu bir güvenlik sorunudur ve bir saldırganın IP adresini farklıymış gibi göstermesine neden olabilir. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.",
- "Allow editing" : "Düzenlemeye izin ver",
"Hide file listing" : "Dosya listelemesini gizle",
"Sending ..." : "Gönderiliyor...",
"Email sent" : "E-posta gönderildi",
@@ -317,7 +317,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Hesabınız için gelişmiş güvenlik etkinleştirildi. Lütfen ikinci etkeni kullanarak kimlik doğrulaması yapın.",
"Cancel login" : "Girişi iptal et",
"Please authenticate using the selected factor." : "Lütfen seçilen etkeni kullanarak kimlik doğrulaması yapın.",
- "An error occured while verifying the token" : "Anahtarı(token) doğrularken bir hata oluştu",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "kullanıcı@example.com/owncloud şeklinde diğer ownCloud kullanan diğer kullanıcılarla paylaş"
+ "An error occured while verifying the token" : "Anahtarı(token) doğrularken bir hata oluştu"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index 0a69151727f..aef131f69fe 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -52,7 +52,6 @@ OC.L10N.register(
"Cancel" : "Скасувати",
"seconds ago" : "секунди тому",
"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." : "Посилання для скидання вашого паролю було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
- "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 /> Ви дійсно хочете продовжити?",
"I know what I'm doing" : "Я знаю що роблю",
"Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
"No" : "Ні",
@@ -96,6 +95,7 @@ OC.L10N.register(
"Share link" : "Поділитись посиланням",
"Link" : "Посилання",
"Password protect" : "Захистити паролем",
+ "Allow editing" : "Дозволити редагування",
"Email link to person" : "Надіслати посилання електронною поштою",
"Send" : "Надіслати",
"Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}",
@@ -187,8 +187,8 @@ OC.L10N.register(
"Need help?" : "Потрібна допомога?",
"See the documentation" : "Дивіться документацію",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте сторінку.",
- "Log out" : "Вихід",
"Search" : "Пошук",
+ "Log out" : "Вихід",
"Server side authentication failed!" : "Невдала аутентифікація з сервером!",
"Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.",
"An internal error occurred." : "Виникла внутрішня помилка.",
@@ -278,7 +278,7 @@ OC.L10N.register(
"Oct." : "Жов.",
"Nov." : "Лис.",
"Dec." : "Гру.",
- "Allow editing" : "Дозволити редагування",
+ "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 /> Ви дійсно хочете продовжити?",
"Sending ..." : "Надсилання...",
"Email sent" : "Лист надіслано",
"Send link via email" : "Надіслати посилання електронною поштою",
@@ -296,7 +296,6 @@ OC.L10N.register(
"Error while sending notification" : "Помилка під час надсилання повідомлення",
"No search results in other folders" : "В інших теках нічого не знайдено",
"Two-step verification" : "Дворівнева перевірка",
- "An error occured while verifying the token" : "При верифікації токена виникла помилка",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поширити серед людей інших ownCloud'ів, використовуючи синтаксис ім'я_користувача@файли.укр/owncloud"
+ "An error occured while verifying the token" : "При верифікації токена виникла помилка"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index 2f43606aad3..da69ffaea29 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -50,7 +50,6 @@
"Cancel" : "Скасувати",
"seconds ago" : "секунди тому",
"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." : "Посилання для скидання вашого паролю було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
- "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 /> Ви дійсно хочете продовжити?",
"I know what I'm doing" : "Я знаю що роблю",
"Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
"No" : "Ні",
@@ -94,6 +93,7 @@
"Share link" : "Поділитись посиланням",
"Link" : "Посилання",
"Password protect" : "Захистити паролем",
+ "Allow editing" : "Дозволити редагування",
"Email link to person" : "Надіслати посилання електронною поштою",
"Send" : "Надіслати",
"Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}",
@@ -185,8 +185,8 @@
"Need help?" : "Потрібна допомога?",
"See the documentation" : "Дивіться документацію",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте сторінку.",
- "Log out" : "Вихід",
"Search" : "Пошук",
+ "Log out" : "Вихід",
"Server side authentication failed!" : "Невдала аутентифікація з сервером!",
"Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.",
"An internal error occurred." : "Виникла внутрішня помилка.",
@@ -276,7 +276,7 @@
"Oct." : "Жов.",
"Nov." : "Лис.",
"Dec." : "Гру.",
- "Allow editing" : "Дозволити редагування",
+ "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 /> Ви дійсно хочете продовжити?",
"Sending ..." : "Надсилання...",
"Email sent" : "Лист надіслано",
"Send link via email" : "Надіслати посилання електронною поштою",
@@ -294,7 +294,6 @@
"Error while sending notification" : "Помилка під час надсилання повідомлення",
"No search results in other folders" : "В інших теках нічого не знайдено",
"Two-step verification" : "Дворівнева перевірка",
- "An error occured while verifying the token" : "При верифікації токена виникла помилка",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поширити серед людей інших ownCloud'ів, використовуючи синтаксис ім'я_користувача@файли.укр/owncloud"
+ "An error occured while verifying the token" : "При верифікації токена виникла помилка"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index 77d541ca71a..4157cb3d1c3 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -1,39 +1,41 @@
OC.L10N.register(
"core",
{
- "Please select a file." : "请选择一个文件",
+ "Please select a file." : "请选择一个文件.",
"File is too big" : "文件太大",
+ "The selected file is not an image." : "所选文件不是一张图片.",
+ "The selected file cannot be read." : "无法读取所选文件.",
"Invalid file provided" : "提供了无效文件",
"No image or file provided" : "没有提供图片或文件",
"Unknown filetype" : "未知的文件类型",
"Invalid image" : "无效的图像",
- "An error occurred. Please contact your admin." : "发生了一个错误,请联系管理员。",
- "No temporary profile picture available, try again" : "没有临时概览页图片可用,请重试",
- "No crop data provided" : "没有提供相应数据",
+ "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" : "无法重设密码,因为令牌已过期",
- "Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件,请检查您的用户名是否正确。",
- "Could not send reset email because there is no email address for this username. Please contact your administrator." : "此用户名的电子邮件地址不存在导致无法发送重置邮件,请联系管理员。",
+ "Couldn't reset password because the token is invalid" : "令牌无效, 无法重置密码",
+ "Couldn't reset password because the token is expired" : "令牌已过期, 无法重置密码",
+ "Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件, 请检查您的用户名是否正确.",
+ "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 contact your administrator." : "未能成功发送重置邮件, 请联系管理员.",
"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 中已禁用,请使用命令行更新。",
+ "Repair warning: " : "修复警告:",
+ "Repair error: " : "修复错误:",
+ "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" : "关闭维护模式",
- "Maintenance mode is kept active" : "维护模式已被启用",
- "Updating database schema" : "正在更新数据库架构",
+ "Maintenance mode is kept active" : "维护模式已启用",
+ "Updating database schema" : "正在更新数据库结构",
"Updated database" : "数据库已更新",
- "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "检查数据库架构是否可以更新 (这可能需要很长的时间,这取决于数据库大小)",
- "Checked database schema update" : "已经检查数据库架构更新",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "检查数据库结构是否可以更新 (这可能需要很长的时间, 这取决于数据库大小)",
+ "Checked database schema update" : "已经检查数据库结构更新",
"Checking updates of apps" : "检查更新应用",
- "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "检查 %s 的数据库架构是否可以更新 (这可能需要很长的时间,这取决于数据库大小)",
- "Checked database schema update for apps" : "已经检查应用的数据库架构更新",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "检查 %s 的数据库结构是否可以更新 (这可能需要很长的时间, 这取决于数据库大小)",
+ "Checked database schema update for apps" : "已经检查应用的数据库结构更新",
"Updated \"%s\" to %s" : "更新 \"%s\" 为 %s",
"Set log level to debug" : "设置日志级别为 调试",
"Reset log level" : "重设日志级别",
@@ -41,86 +43,120 @@ OC.L10N.register(
"Finished code integrity check" : "代码完整性检查完成",
"%s (3rdparty)" : "%s (第三方)",
"%s (incompatible)" : "%s (不兼容)",
- "Following apps have been disabled: %s" : "下列应用已经被禁用:%s",
+ "Following apps have been disabled: %s" : "下列应用已经被禁用: %s",
"Already up to date" : "已经是最新",
- "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">代码完整性检查出现异常,点击查看详细信息...</a>",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">代码完整性检查出现异常, 点击查看详细信息...</a>",
"Settings" : "设置",
- "Problem loading page, reloading in 5 seconds" : "加载页面出现问题,在 5 秒内重新载入",
+ "Connection to server lost" : "与服务器的连接断开",
+ "Problem loading page, reloading in 5 seconds" : "加载页面出现问题, 在 5 秒内重新加载",
"Saving..." : "保存中...",
"Dismiss" : "忽略",
+ "This action requires you to confirm your password" : "请您确认您的密码",
+ "Authentication required" : "授权请求",
"Password" : "密码",
"Cancel" : "取消",
+ "Confirm" : "确认",
+ "Failed to authenticate, try again" : "授权失败, 请重试",
"seconds ago" : "几秒前",
- "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. 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 />确认继续?",
+ "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/>您是否真的要继续?",
"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" : "未找到文件",
"Choose" : "选择",
- "Error loading file picker template: {error}" : "加载文件分拣模板出错: {error}",
+ "Error loading file picker template: {error}" : "加载文件选择模板出错: {error}",
"Ok" : "确定",
"Error loading message template: {error}" : "加载消息模板出错: {error}",
"read-only" : "只读",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} 个文件冲突"],
- "One file conflict" : "1个文件冲突",
+ "One file conflict" : "1 个文件冲突",
"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." : "如果同时选择了两个版本,复制的文件名将会增加上一个数字。",
+ "Which files do you want to keep?" : "请选择需要保留的文件?",
+ "If you select both versions, the copied file will have a number added to its name." : "如果同时选择了两个版本, 副本的文件名中将会追加数字.",
"Continue" : "继续",
"(all selected)" : "(选中全部)",
- "({count} selected)" : "(选择了{count}个)",
+ "({count} selected)" : "(选择了 {count} 个)",
"Error loading file exists template" : "加载文件存在性模板失败",
+ "Pending" : "等待",
"Very weak password" : "非常弱的密码",
"Weak password" : "弱密码",
"So-so password" : "一般强度的密码",
"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>." : "您的web服务器未正确设置以解析 \"{url}\"。您可以在我们的<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>中找到更多可用信息。",
- "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}) 不再被 <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\"> PHP </a>支持。我们建议您升级您的PHP版本,以便获得 PHP 性能和安全提升。",
- "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 配置为分布式缓存,但是已经安装的 PHP 模块是 \"memcache\" 。 \\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>)",
- "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 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。",
- "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." : "\"{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>." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照<a href=\"{docUrl}\" rel=\"noreferrer\">安全提示</a>启用 HSTS。",
- "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 访问该站点,我们强烈建议您按照<a href=\"{docUrl}\">安全提示</a>配置服务器强制使用 HTTPS。",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "由于 WebDAV 接口似乎被破坏, 因此你的 Web 服务器没有正确地设置允许文件同步。",
+ "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>." : "您的 Web 服务器未正确设置以解析 \"{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>." : "PHP 无法访问 /dev/urandom, 由于安全原因, 这是强烈不推荐的. 更多信息请查看我们的<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>." : "反向代理配置错误, 或者您正在通过可信的代理访问 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 当前配置为分布式缓存, 但是当前安装的 PHP 模块是 \"memcache\". \\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>)",
+ "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 文件没有工作. 我们强烈建议您在 Web 服务器上配置不可以访问数据目录, 或者将数据目录移动到 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." : "HTTP 请求头 \"{header}\" 没有配置为 \"{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>." : "HTTP 请求头 \"Strict-Transport-Security\" 没有配置为至少 “{seconds}” 秒. 出于增强安全性考虑, 我们推荐按照<a href=\"{docUrl}\" rel=\"noreferrer\">安全提示</a>中的说明启用 HSTS.",
+ "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 访问该站点, 我们强烈建议您按照<a href=\"{docUrl}\">安全提示</a>中的说明配置服务器强制使用 HTTPS.",
"Shared" : "已共享",
- "Shared with {recipients}" : "由{recipients}分享",
+ "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} 天失效",
+ "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" : "为共享链接设置密码",
+ "Copied!" : "已经复制!",
+ "Copy" : "复制",
+ "Not supported!" : "无法支持!",
+ "Press ⌘-C to copy." : "按 ⌘ + C 进行复制.",
+ "Press Ctrl-C to copy." : "按 Ctrl + C 进行复制.",
"Resharing is not allowed" : "不允许二次共享",
"Share link" : "分享链接",
"Link" : "链接",
"Password protect" : "密码保护",
+ "Allow upload and editing" : "允许上传和编辑",
+ "Allow editing" : "允许编辑",
+ "File drop (upload only)" : "文件拖拽 (仅上传)",
"Email link to person" : "发送链接到个人",
"Send" : "发送",
- "Shared with you and the group {group} by {owner}" : "{owner} 共享给您及 {group} 组",
- "Shared with you by {owner}" : "{owner} 与您共享",
+ "Shared with you and the group {group} by {owner}" : "{owner} 分享给您及 {group} 分组",
+ "Shared with you by {owner}" : "{owner} 分享给您",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} 通过链接分享",
"group" : "群组",
- "remote" : "远程",
+ "remote" : "外部",
+ "email" : "邮件",
"Unshare" : "取消共享",
- "can edit" : "可以修改",
+ "can reshare" : "允许重新分享",
+ "can edit" : "允许修改",
+ "can create" : "允许创建",
+ "can change" : "允许改变",
+ "can delete" : "允许删除",
"access control" : "访问控制",
"Could not unshare" : "无法共享",
"Share details could not be loaded for this item." : "无法加载这个项目的分享详情",
"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} (远程)",
+ "An error occurred. Please try again" : "发生错误. 请重试.",
+ "{sharee} (group)" : "{sharee} (分组)",
+ "{sharee} (remote)" : "{sharee} (外部)",
+ "{sharee} (email)" : "{sharee} (邮件)",
"Share" : "分享",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "使用联合云ID与其他服务器的用户分享, 如 用户名@example.com/nextcloud",
+ "Share with users or by mail..." : "通过邮件分享...",
+ "Share with users or remote users..." : "分享给其他用户或外部用户...",
+ "Share with users, remote users or by mail..." : "通过邮件分享给其他用户或外部用户...",
+ "Share with users or groups..." : "分享给其他用户或分组...",
+ "Share with users, groups or by mail..." : "通过邮件分享给其他用户或分组...",
+ "Share with users, groups or remote users..." : "分享给其他用户, 分组或外部用户...",
+ "Share with users, groups, remote users or by mail..." : "通过邮件分享给其他用户, 分组或外部用户...",
+ "Share with users..." : "分享给其他用户...",
"Error removing share" : "移除分享时出错",
"Non-existing tag #{tag}" : "标签 #{tag} 不存在",
"restricted" : "受限",
@@ -129,23 +165,30 @@ OC.L10N.register(
"Delete" : "删除",
"Rename" : "重命名",
"Collaborative tags" : "协作标签",
- "The object type is not specified." : "未指定对象类型。",
+ "No tags found" : "标签未找到",
+ "The object type is not specified." : "未指定对象类型.",
"Enter new" : "输入新...",
"Add" : "增加",
"Edit tags" : "编辑标签",
"Error loading dialog template: {error}" : "加载对话框模板出错: {error}",
- "No tags selected for deletion." : "请选择要删除的标签。",
+ "No tags selected for deletion." : "没有选择删除的标签",
"unknown text" : "未知文字",
"Hello world!" : "Hello world!",
"sunny" : "晴",
- "Hello {name}, the weather is {weather}" : "您好 {name},今天天气是{weather}",
+ "Hello {name}, the weather is {weather}" : "您好 {name}, 今天天气是 {weather}",
"Hello {name}" : "你好 {name}",
"new" : "新建",
"_download %n file_::_download %n files_" : ["下载 %n 个文件"],
- "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}\">查看我们的论坛帖子</a>。",
- "Searching other places" : "搜索其他地方",
+ "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." : "请重新加载页面",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "更新不成功. 有关此问题的更多信息请<a href=\"{url}\">查看我们的论坛帖子</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 now." : "升级成功. 正在重新访问 Nextcloud.",
+ "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} 条搜索结果"],
"Personal" : "个人",
"Users" : "用户",
@@ -154,88 +197,96 @@ OC.L10N.register(
"Help" : "帮助",
"Access forbidden" : "访问禁止",
"File not found" : "文件未找到",
- "The specified document has not been found on the server." : "在服务器上没找到指定的文件。",
- "You can click here to return to %s." : "你可以点击这里返回 %s。",
+ "The specified document has not been found on the server." : "在服务器上没找到指定的文件.",
+ "You can click here to return to %s." : "你可以点击这里返回 %s.",
"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 过期。",
+ "The share will expire on %s." : "此分享将在 %s 过期.",
"Cheers!" : "干杯!",
"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." : "请联系服务器管理员,如果多次出现这个错误,请把下面的技术细节包含在您的报告里。",
- "More details can be found in the server log." : "更多细节能在服务器日志中找到。",
+ "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." : "如果多次出现这个错误, 请联系服务器管理员, 请把下面的技术细节包含在您的报告中.",
+ "More details can be found in the server log." : "更多细节可以在服务器日志中找到.",
"Technical details" : "技术细节",
- "Remote Address: %s" : "远程地址: %s",
+ "Remote Address: %s" : "远程地址: %s",
"Request ID: %s" : "请求 ID: %s",
- "Type: %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." : "您的数据目录和文件可能可以直接被互联网访问,因为 .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>",
+ "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" : "存储 & 数据库",
"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." : "请查阅文档获得详细信息。",
+ "Install and activate additional PHP modules to choose other database types." : "安装并激活额外的 PHP 模块以选择其他数据库类型.",
+ "For more details check out the documentation." : "请查阅文档获得详细信息.",
"Database user" : "数据库用户",
"Database password" : "数据库密码",
"Database name" : "数据库名",
"Database tablespace" : "数据库表空间",
"Database host" : "数据库主机",
+ "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 。",
+ "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" : "安装完成",
- "Finishing …" : "正在结束 ...",
- "Need help?" : "需要帮助?",
+ "Finishing …" : "正在完成...",
+ "Need help?" : "需要帮助?",
"See the documentation" : "查看文档",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作,该应用要求 JavaScript 。请 {linkstart} 打开 JavaScript {linkend} ,然后重新载入页面。",
- "Log out" : "注销",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作, 该应用需要使用 JavaScript. 请 {linkstart}启用 JavaScript{linkend}, 并重新加载页面.",
"Search" : "搜索",
- "Server side authentication failed!" : "服务端验证失败!",
- "Please contact your administrator." : "请联系你的管理员。",
- "An internal error occurred." : "发生了内部错误。",
- "Please try again or contact your administrator." : "请重试或联系管理员。",
+ "Log out" : "注销",
+ "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." : "请重试或联系您的管理员.",
"Username or email" : "用户名或邮箱",
- "Wrong password. Reset it?" : "密码错误。要重置么?",
+ "Wrong password. Reset it?" : "密码错误. 是否要重置?",
"Wrong password." : "密码错误",
"Log in" : "登录",
"Stay logged in" : "保持登录",
"Alternative Logins" : "其他登录方式",
- "Use the following link to reset your password: {link}" : "使用以下链接重置您的密码:{link}",
+ "Use the following link to reset your password: {link}" : "使用以下链接重置您的密码: {link}",
"New password" : "新密码",
"New Password" : "新密码",
"Reset password" : "重置密码",
"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>",
- "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." : "感谢让你久等了。",
- "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." : "请联系你的系统管理员。如果你是系统管理员,配置 config/config.php 文件中参数 \"trusted_domain\" 设置。可以在 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\"为信任域",
+ "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." : "感谢您久等了.",
+ "Two-factor authentication" : "双重认证",
+ "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." : "请联系您的系统管理员. 如果您是系统管理员, 在 config/config.php 文件中设置 \"trusted_domain\". 可以在 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\" 为信任域名",
"App update required" : "必须的应用更新",
"%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." : "在继续之前,请确认数据库、配置文件夹和数据文件夹已经备份。",
+ "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." : "在继续之前, 请确认数据库、配置文件夹和数据文件夹已经备份.",
"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 page will refresh itself when the %s instance is available again." : "当实例 %s 再次可用时这个页面将刷新。",
+ "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 page will refresh itself when the %s instance is available again." : "当实例 %s 再次可用时此页面将刷新.",
"Error loading tags" : "加载标签出错",
"Tag already exists" : "标签已存在",
"Error deleting tag(s)" : "删除标签时出错",
@@ -251,20 +302,20 @@ OC.L10N.register(
"Thursday" : "星期四",
"Friday" : "星期五",
"Saturday" : "星期六",
- "Sun." : "日",
+ "Sun." : "周日",
"Mon." : "周一",
"Tue." : "周二",
"Wed." : "周三",
"Thu." : "周四",
"Fri." : "周五",
"Sat." : "周六",
- "Su" : "Su",
- "Mo" : "Mo",
- "Tu" : "Tu",
- "We" : "We",
- "Th" : "Th",
- "Fr" : "Fr",
- "Sa" : "Sa",
+ "Su" : "日",
+ "Mo" : "一",
+ "Tu" : "二",
+ "We" : "三",
+ "Th" : "四",
+ "Fr" : "五",
+ "Sa" : "六",
"January" : "一月",
"February" : "二月",
"March" : "三月",
@@ -289,8 +340,10 @@ OC.L10N.register(
"Oct." : "十月",
"Nov." : "十一月",
"Dec." : "十二月",
- "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "反向代理头配置不正确,或者您正从一个受信任的代理访问ownCloud。如果你不是通过受信任的代理访问 ownCloud,这将引发一个安全问题,可能由于 ownCloud IP 地址可见导致欺骗攻击。更多信息可以查看我们的 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>。",
- "Allow editing" : "允许编辑",
+ "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/>您是否真的要继续?",
+ "This server has no working Internet connection. 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." : "此服务器没有可用的互联网连接. 这意味着某些功能比如挂载外部存储, 更新通知以及安装第三方应用将无法工作. 远程访问文件和发送通知邮件可能也不工作. 如果您想使用所有的功能, 我们建议启用互联网连接.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "反向代理配置错误, 或者您正在通过可信的代理访问 ownCloud. 如果您不是通过可信代理访问 ownCloud, 这将是一个安全问题, 并允许攻击者通过伪装 IP 地址访问 ownCloud. 更多信息请查看我们的<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>.",
+ "Hide file listing" : "隐藏列出的文件",
"Sending ..." : "正在发送...",
"Email sent" : "邮件已发送",
"Send link via email" : "通过邮件发送链接",
@@ -300,18 +353,20 @@ OC.L10N.register(
"change" : "更改",
"delete" : "删除",
"{sharee} (at {server})" : "{sharee} (位于 {server})",
- "Share with users…" : "与用户分享...",
- "Share with users, groups or remote users…" : "与用户,组或远程用户分享...",
- "Share with users or groups…" : "与用户或组分享...",
- "Share with users or remote users…" : "与用户或远程用户分享...",
+ "Share with users…" : "分享给其他用户...",
+ "Share with users, groups or remote users…" : "分享给其他用户, 分组或外部用户...",
+ "Share with users or groups…" : "分享给其他用户或分组...",
+ "Share with users or remote users…" : "分享给其他用户或外部用户...",
"Warning" : "警告",
"Error while sending notification" : "发送通知时出现错误",
- "No search results in other folders" : "在其他文件夹中没有得到任何搜索结果",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "正在升级, 在某些环境下离开当前页面可能会中断.",
+ "Updating to {version}" : "升级到 {version}",
+ "The update was successful. There were warnings." : "更新成功. 更新过程中出现一些警告.",
+ "No search results in other folders" : "在其他文件夹内未找到任何结果",
"Two-step verification" : "两步验证",
- "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "您的帐户已启用增强安全性,请使用第二因子验证。",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "您的帐户已启用增强安全性, 请使用第二因子验证.",
"Cancel login" : "取消登录",
- "Please authenticate using the selected factor." : "请使用所选择的因素验证。",
- "An error occured while verifying the token" : "在验证令牌时出错",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "使用语法 username@example.com/owncloud 分享给其他 ownCloud 上的用户"
+ "Please authenticate using the selected factor." : "请使用所选择的方式验证.",
+ "An error occured while verifying the token" : "验证令牌时出错"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index 8a1af692c4f..b99348b05ee 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -1,37 +1,39 @@
{ "translations": {
- "Please select a file." : "请选择一个文件",
+ "Please select a file." : "请选择一个文件.",
"File is too big" : "文件太大",
+ "The selected file is not an image." : "所选文件不是一张图片.",
+ "The selected file cannot be read." : "无法读取所选文件.",
"Invalid file provided" : "提供了无效文件",
"No image or file provided" : "没有提供图片或文件",
"Unknown filetype" : "未知的文件类型",
"Invalid image" : "无效的图像",
- "An error occurred. Please contact your admin." : "发生了一个错误,请联系管理员。",
- "No temporary profile picture available, try again" : "没有临时概览页图片可用,请重试",
- "No crop data provided" : "没有提供相应数据",
+ "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" : "无法重设密码,因为令牌已过期",
- "Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件,请检查您的用户名是否正确。",
- "Could not send reset email because there is no email address for this username. Please contact your administrator." : "此用户名的电子邮件地址不存在导致无法发送重置邮件,请联系管理员。",
+ "Couldn't reset password because the token is invalid" : "令牌无效, 无法重置密码",
+ "Couldn't reset password because the token is expired" : "令牌已过期, 无法重置密码",
+ "Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件, 请检查您的用户名是否正确.",
+ "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 contact your administrator." : "未能成功发送重置邮件, 请联系管理员.",
"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 中已禁用,请使用命令行更新。",
+ "Repair warning: " : "修复警告:",
+ "Repair error: " : "修复错误:",
+ "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" : "关闭维护模式",
- "Maintenance mode is kept active" : "维护模式已被启用",
- "Updating database schema" : "正在更新数据库架构",
+ "Maintenance mode is kept active" : "维护模式已启用",
+ "Updating database schema" : "正在更新数据库结构",
"Updated database" : "数据库已更新",
- "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "检查数据库架构是否可以更新 (这可能需要很长的时间,这取决于数据库大小)",
- "Checked database schema update" : "已经检查数据库架构更新",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "检查数据库结构是否可以更新 (这可能需要很长的时间, 这取决于数据库大小)",
+ "Checked database schema update" : "已经检查数据库结构更新",
"Checking updates of apps" : "检查更新应用",
- "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "检查 %s 的数据库架构是否可以更新 (这可能需要很长的时间,这取决于数据库大小)",
- "Checked database schema update for apps" : "已经检查应用的数据库架构更新",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "检查 %s 的数据库结构是否可以更新 (这可能需要很长的时间, 这取决于数据库大小)",
+ "Checked database schema update for apps" : "已经检查应用的数据库结构更新",
"Updated \"%s\" to %s" : "更新 \"%s\" 为 %s",
"Set log level to debug" : "设置日志级别为 调试",
"Reset log level" : "重设日志级别",
@@ -39,86 +41,120 @@
"Finished code integrity check" : "代码完整性检查完成",
"%s (3rdparty)" : "%s (第三方)",
"%s (incompatible)" : "%s (不兼容)",
- "Following apps have been disabled: %s" : "下列应用已经被禁用:%s",
+ "Following apps have been disabled: %s" : "下列应用已经被禁用: %s",
"Already up to date" : "已经是最新",
- "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">代码完整性检查出现异常,点击查看详细信息...</a>",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">代码完整性检查出现异常, 点击查看详细信息...</a>",
"Settings" : "设置",
- "Problem loading page, reloading in 5 seconds" : "加载页面出现问题,在 5 秒内重新载入",
+ "Connection to server lost" : "与服务器的连接断开",
+ "Problem loading page, reloading in 5 seconds" : "加载页面出现问题, 在 5 秒内重新加载",
"Saving..." : "保存中...",
"Dismiss" : "忽略",
+ "This action requires you to confirm your password" : "请您确认您的密码",
+ "Authentication required" : "授权请求",
"Password" : "密码",
"Cancel" : "取消",
+ "Confirm" : "确认",
+ "Failed to authenticate, try again" : "授权失败, 请重试",
"seconds ago" : "几秒前",
- "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. 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 />确认继续?",
+ "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/>您是否真的要继续?",
"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" : "未找到文件",
"Choose" : "选择",
- "Error loading file picker template: {error}" : "加载文件分拣模板出错: {error}",
+ "Error loading file picker template: {error}" : "加载文件选择模板出错: {error}",
"Ok" : "确定",
"Error loading message template: {error}" : "加载消息模板出错: {error}",
"read-only" : "只读",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} 个文件冲突"],
- "One file conflict" : "1个文件冲突",
+ "One file conflict" : "1 个文件冲突",
"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." : "如果同时选择了两个版本,复制的文件名将会增加上一个数字。",
+ "Which files do you want to keep?" : "请选择需要保留的文件?",
+ "If you select both versions, the copied file will have a number added to its name." : "如果同时选择了两个版本, 副本的文件名中将会追加数字.",
"Continue" : "继续",
"(all selected)" : "(选中全部)",
- "({count} selected)" : "(选择了{count}个)",
+ "({count} selected)" : "(选择了 {count} 个)",
"Error loading file exists template" : "加载文件存在性模板失败",
+ "Pending" : "等待",
"Very weak password" : "非常弱的密码",
"Weak password" : "弱密码",
"So-so password" : "一般强度的密码",
"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>." : "您的web服务器未正确设置以解析 \"{url}\"。您可以在我们的<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>中找到更多可用信息。",
- "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}) 不再被 <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\"> PHP </a>支持。我们建议您升级您的PHP版本,以便获得 PHP 性能和安全提升。",
- "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 配置为分布式缓存,但是已经安装的 PHP 模块是 \"memcache\" 。 \\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>)",
- "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 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。",
- "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." : "\"{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>." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照<a href=\"{docUrl}\" rel=\"noreferrer\">安全提示</a>启用 HSTS。",
- "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 访问该站点,我们强烈建议您按照<a href=\"{docUrl}\">安全提示</a>配置服务器强制使用 HTTPS。",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "由于 WebDAV 接口似乎被破坏, 因此你的 Web 服务器没有正确地设置允许文件同步。",
+ "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>." : "您的 Web 服务器未正确设置以解析 \"{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>." : "PHP 无法访问 /dev/urandom, 由于安全原因, 这是强烈不推荐的. 更多信息请查看我们的<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>." : "反向代理配置错误, 或者您正在通过可信的代理访问 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 当前配置为分布式缓存, 但是当前安装的 PHP 模块是 \"memcache\". \\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>)",
+ "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 文件没有工作. 我们强烈建议您在 Web 服务器上配置不可以访问数据目录, 或者将数据目录移动到 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." : "HTTP 请求头 \"{header}\" 没有配置为 \"{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>." : "HTTP 请求头 \"Strict-Transport-Security\" 没有配置为至少 “{seconds}” 秒. 出于增强安全性考虑, 我们推荐按照<a href=\"{docUrl}\" rel=\"noreferrer\">安全提示</a>中的说明启用 HSTS.",
+ "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 访问该站点, 我们强烈建议您按照<a href=\"{docUrl}\">安全提示</a>中的说明配置服务器强制使用 HTTPS.",
"Shared" : "已共享",
- "Shared with {recipients}" : "由{recipients}分享",
+ "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} 天失效",
+ "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" : "为共享链接设置密码",
+ "Copied!" : "已经复制!",
+ "Copy" : "复制",
+ "Not supported!" : "无法支持!",
+ "Press ⌘-C to copy." : "按 ⌘ + C 进行复制.",
+ "Press Ctrl-C to copy." : "按 Ctrl + C 进行复制.",
"Resharing is not allowed" : "不允许二次共享",
"Share link" : "分享链接",
"Link" : "链接",
"Password protect" : "密码保护",
+ "Allow upload and editing" : "允许上传和编辑",
+ "Allow editing" : "允许编辑",
+ "File drop (upload only)" : "文件拖拽 (仅上传)",
"Email link to person" : "发送链接到个人",
"Send" : "发送",
- "Shared with you and the group {group} by {owner}" : "{owner} 共享给您及 {group} 组",
- "Shared with you by {owner}" : "{owner} 与您共享",
+ "Shared with you and the group {group} by {owner}" : "{owner} 分享给您及 {group} 分组",
+ "Shared with you by {owner}" : "{owner} 分享给您",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} 通过链接分享",
"group" : "群组",
- "remote" : "远程",
+ "remote" : "外部",
+ "email" : "邮件",
"Unshare" : "取消共享",
- "can edit" : "可以修改",
+ "can reshare" : "允许重新分享",
+ "can edit" : "允许修改",
+ "can create" : "允许创建",
+ "can change" : "允许改变",
+ "can delete" : "允许删除",
"access control" : "访问控制",
"Could not unshare" : "无法共享",
"Share details could not be loaded for this item." : "无法加载这个项目的分享详情",
"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} (远程)",
+ "An error occurred. Please try again" : "发生错误. 请重试.",
+ "{sharee} (group)" : "{sharee} (分组)",
+ "{sharee} (remote)" : "{sharee} (外部)",
+ "{sharee} (email)" : "{sharee} (邮件)",
"Share" : "分享",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "使用联合云ID与其他服务器的用户分享, 如 用户名@example.com/nextcloud",
+ "Share with users or by mail..." : "通过邮件分享...",
+ "Share with users or remote users..." : "分享给其他用户或外部用户...",
+ "Share with users, remote users or by mail..." : "通过邮件分享给其他用户或外部用户...",
+ "Share with users or groups..." : "分享给其他用户或分组...",
+ "Share with users, groups or by mail..." : "通过邮件分享给其他用户或分组...",
+ "Share with users, groups or remote users..." : "分享给其他用户, 分组或外部用户...",
+ "Share with users, groups, remote users or by mail..." : "通过邮件分享给其他用户, 分组或外部用户...",
+ "Share with users..." : "分享给其他用户...",
"Error removing share" : "移除分享时出错",
"Non-existing tag #{tag}" : "标签 #{tag} 不存在",
"restricted" : "受限",
@@ -127,23 +163,30 @@
"Delete" : "删除",
"Rename" : "重命名",
"Collaborative tags" : "协作标签",
- "The object type is not specified." : "未指定对象类型。",
+ "No tags found" : "标签未找到",
+ "The object type is not specified." : "未指定对象类型.",
"Enter new" : "输入新...",
"Add" : "增加",
"Edit tags" : "编辑标签",
"Error loading dialog template: {error}" : "加载对话框模板出错: {error}",
- "No tags selected for deletion." : "请选择要删除的标签。",
+ "No tags selected for deletion." : "没有选择删除的标签",
"unknown text" : "未知文字",
"Hello world!" : "Hello world!",
"sunny" : "晴",
- "Hello {name}, the weather is {weather}" : "您好 {name},今天天气是{weather}",
+ "Hello {name}, the weather is {weather}" : "您好 {name}, 今天天气是 {weather}",
"Hello {name}" : "你好 {name}",
"new" : "新建",
"_download %n file_::_download %n files_" : ["下载 %n 个文件"],
- "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}\">查看我们的论坛帖子</a>。",
- "Searching other places" : "搜索其他地方",
+ "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." : "请重新加载页面",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "更新不成功. 有关此问题的更多信息请<a href=\"{url}\">查看我们的论坛帖子</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 now." : "升级成功. 正在重新访问 Nextcloud.",
+ "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} 条搜索结果"],
"Personal" : "个人",
"Users" : "用户",
@@ -152,88 +195,96 @@
"Help" : "帮助",
"Access forbidden" : "访问禁止",
"File not found" : "文件未找到",
- "The specified document has not been found on the server." : "在服务器上没找到指定的文件。",
- "You can click here to return to %s." : "你可以点击这里返回 %s。",
+ "The specified document has not been found on the server." : "在服务器上没找到指定的文件.",
+ "You can click here to return to %s." : "你可以点击这里返回 %s.",
"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 过期。",
+ "The share will expire on %s." : "此分享将在 %s 过期.",
"Cheers!" : "干杯!",
"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." : "请联系服务器管理员,如果多次出现这个错误,请把下面的技术细节包含在您的报告里。",
- "More details can be found in the server log." : "更多细节能在服务器日志中找到。",
+ "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." : "如果多次出现这个错误, 请联系服务器管理员, 请把下面的技术细节包含在您的报告中.",
+ "More details can be found in the server log." : "更多细节可以在服务器日志中找到.",
"Technical details" : "技术细节",
- "Remote Address: %s" : "远程地址: %s",
+ "Remote Address: %s" : "远程地址: %s",
"Request ID: %s" : "请求 ID: %s",
- "Type: %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." : "您的数据目录和文件可能可以直接被互联网访问,因为 .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>",
+ "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" : "存储 & 数据库",
"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." : "请查阅文档获得详细信息。",
+ "Install and activate additional PHP modules to choose other database types." : "安装并激活额外的 PHP 模块以选择其他数据库类型.",
+ "For more details check out the documentation." : "请查阅文档获得详细信息.",
"Database user" : "数据库用户",
"Database password" : "数据库密码",
"Database name" : "数据库名",
"Database tablespace" : "数据库表空间",
"Database host" : "数据库主机",
+ "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 。",
+ "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" : "安装完成",
- "Finishing …" : "正在结束 ...",
- "Need help?" : "需要帮助?",
+ "Finishing …" : "正在完成...",
+ "Need help?" : "需要帮助?",
"See the documentation" : "查看文档",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作,该应用要求 JavaScript 。请 {linkstart} 打开 JavaScript {linkend} ,然后重新载入页面。",
- "Log out" : "注销",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作, 该应用需要使用 JavaScript. 请 {linkstart}启用 JavaScript{linkend}, 并重新加载页面.",
"Search" : "搜索",
- "Server side authentication failed!" : "服务端验证失败!",
- "Please contact your administrator." : "请联系你的管理员。",
- "An internal error occurred." : "发生了内部错误。",
- "Please try again or contact your administrator." : "请重试或联系管理员。",
+ "Log out" : "注销",
+ "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." : "请重试或联系您的管理员.",
"Username or email" : "用户名或邮箱",
- "Wrong password. Reset it?" : "密码错误。要重置么?",
+ "Wrong password. Reset it?" : "密码错误. 是否要重置?",
"Wrong password." : "密码错误",
"Log in" : "登录",
"Stay logged in" : "保持登录",
"Alternative Logins" : "其他登录方式",
- "Use the following link to reset your password: {link}" : "使用以下链接重置您的密码:{link}",
+ "Use the following link to reset your password: {link}" : "使用以下链接重置您的密码: {link}",
"New password" : "新密码",
"New Password" : "新密码",
"Reset password" : "重置密码",
"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>",
- "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." : "感谢让你久等了。",
- "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." : "请联系你的系统管理员。如果你是系统管理员,配置 config/config.php 文件中参数 \"trusted_domain\" 设置。可以在 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\"为信任域",
+ "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." : "感谢您久等了.",
+ "Two-factor authentication" : "双重认证",
+ "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." : "请联系您的系统管理员. 如果您是系统管理员, 在 config/config.php 文件中设置 \"trusted_domain\". 可以在 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\" 为信任域名",
"App update required" : "必须的应用更新",
"%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." : "在继续之前,请确认数据库、配置文件夹和数据文件夹已经备份。",
+ "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." : "在继续之前, 请确认数据库、配置文件夹和数据文件夹已经备份.",
"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 page will refresh itself when the %s instance is available again." : "当实例 %s 再次可用时这个页面将刷新。",
+ "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 page will refresh itself when the %s instance is available again." : "当实例 %s 再次可用时此页面将刷新.",
"Error loading tags" : "加载标签出错",
"Tag already exists" : "标签已存在",
"Error deleting tag(s)" : "删除标签时出错",
@@ -249,20 +300,20 @@
"Thursday" : "星期四",
"Friday" : "星期五",
"Saturday" : "星期六",
- "Sun." : "日",
+ "Sun." : "周日",
"Mon." : "周一",
"Tue." : "周二",
"Wed." : "周三",
"Thu." : "周四",
"Fri." : "周五",
"Sat." : "周六",
- "Su" : "Su",
- "Mo" : "Mo",
- "Tu" : "Tu",
- "We" : "We",
- "Th" : "Th",
- "Fr" : "Fr",
- "Sa" : "Sa",
+ "Su" : "日",
+ "Mo" : "一",
+ "Tu" : "二",
+ "We" : "三",
+ "Th" : "四",
+ "Fr" : "五",
+ "Sa" : "六",
"January" : "一月",
"February" : "二月",
"March" : "三月",
@@ -287,8 +338,10 @@
"Oct." : "十月",
"Nov." : "十一月",
"Dec." : "十二月",
- "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "反向代理头配置不正确,或者您正从一个受信任的代理访问ownCloud。如果你不是通过受信任的代理访问 ownCloud,这将引发一个安全问题,可能由于 ownCloud IP 地址可见导致欺骗攻击。更多信息可以查看我们的 <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>。",
- "Allow editing" : "允许编辑",
+ "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/>您是否真的要继续?",
+ "This server has no working Internet connection. 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." : "此服务器没有可用的互联网连接. 这意味着某些功能比如挂载外部存储, 更新通知以及安装第三方应用将无法工作. 远程访问文件和发送通知邮件可能也不工作. 如果您想使用所有的功能, 我们建议启用互联网连接.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "反向代理配置错误, 或者您正在通过可信的代理访问 ownCloud. 如果您不是通过可信代理访问 ownCloud, 这将是一个安全问题, 并允许攻击者通过伪装 IP 地址访问 ownCloud. 更多信息请查看我们的<a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">文档</a>.",
+ "Hide file listing" : "隐藏列出的文件",
"Sending ..." : "正在发送...",
"Email sent" : "邮件已发送",
"Send link via email" : "通过邮件发送链接",
@@ -298,18 +351,20 @@
"change" : "更改",
"delete" : "删除",
"{sharee} (at {server})" : "{sharee} (位于 {server})",
- "Share with users…" : "与用户分享...",
- "Share with users, groups or remote users…" : "与用户,组或远程用户分享...",
- "Share with users or groups…" : "与用户或组分享...",
- "Share with users or remote users…" : "与用户或远程用户分享...",
+ "Share with users…" : "分享给其他用户...",
+ "Share with users, groups or remote users…" : "分享给其他用户, 分组或外部用户...",
+ "Share with users or groups…" : "分享给其他用户或分组...",
+ "Share with users or remote users…" : "分享给其他用户或外部用户...",
"Warning" : "警告",
"Error while sending notification" : "发送通知时出现错误",
- "No search results in other folders" : "在其他文件夹中没有得到任何搜索结果",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "正在升级, 在某些环境下离开当前页面可能会中断.",
+ "Updating to {version}" : "升级到 {version}",
+ "The update was successful. There were warnings." : "更新成功. 更新过程中出现一些警告.",
+ "No search results in other folders" : "在其他文件夹内未找到任何结果",
"Two-step verification" : "两步验证",
- "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "您的帐户已启用增强安全性,请使用第二因子验证。",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "您的帐户已启用增强安全性, 请使用第二因子验证.",
"Cancel login" : "取消登录",
- "Please authenticate using the selected factor." : "请使用所选择的因素验证。",
- "An error occured while verifying the token" : "在验证令牌时出错",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "使用语法 username@example.com/owncloud 分享给其他 ownCloud 上的用户"
+ "Please authenticate using the selected factor." : "请使用所选择的方式验证.",
+ "An error occured while verifying the token" : "验证令牌时出错"
},"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 ba1d0f6b3cd..81b2e43f908 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -49,15 +49,20 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "載入頁面出錯,5 秒後重新整理",
"Saving..." : "儲存中...",
"Dismiss" : "知道了",
+ "Authentication required" : "需要認證",
"Password" : "密碼",
"Cancel" : "取消",
+ "Confirm" : "確認",
+ "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." : "重設密碼的連結已經 email 至你的信箱,如果你在一段時間內沒收到,請檢查垃圾郵件資料夾,如果還是找不到,請聯絡系統管理員。",
- "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/>您確定要繼續嗎?",
+ "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." : "無法變更密碼,請聯絡您的系統管理員",
"No" : "否",
"Yes" : "是",
+ "No files in here" : "沒有任何檔案",
"Choose" : "選擇",
"Error loading file picker template: {error}" : "載入檔案選擇器樣板出錯: {error}",
"Ok" : "好",
@@ -73,6 +78,7 @@ OC.L10N.register(
"(all selected)" : "(已全選)",
"({count} selected)" : "(已選 {count} 項)",
"Error loading file exists template" : "載入檔案存在樣板出錯",
+ "Pending" : "等候中",
"Very weak password" : "密碼強度非常弱",
"Weak password" : "密碼強度弱",
"So-so password" : "密碼強度普通",
@@ -80,6 +86,7 @@ OC.L10N.register(
"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." : "伺服器沒有網際網路連線,有些功能,像是外部儲存、更新版通知將無法運作。從遠端存取資料或是寄送 email 通知可能也無法運作。建議您設定好網際網路連線以使用所有功能。",
"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 檔案並未生效,我們強烈建議您設定您的網頁伺服器,拒絕資料目錄的公開存取,或者將您的資料目錄移出網頁伺服器根目錄。",
"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." : "\"{header}\" HTTP 標頭配置與 \"{expected}\"不一樣,這是一個潛在安全性或者隱私上的風險,因此我們建議您調整此設定",
@@ -104,6 +111,7 @@ OC.L10N.register(
"Link" : "連結",
"Password protect" : "密碼保護",
"Allow upload and editing" : "允許上傳及編輯",
+ "Allow editing" : "允許編輯",
"Email link to person" : "將連結 email 給別人",
"Send" : "寄出",
"Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}",
@@ -202,8 +210,8 @@ OC.L10N.register(
"Need help?" : "需要幫助?",
"See the documentation" : "閱讀說明文件",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "這個應用程式需要啟用 Javascript 才能正常運作,請{linkstart}啟用Javascript{linkend}然後重新整理頁面。",
- "Log out" : "登出",
"Search" : "搜尋",
+ "Log out" : "登出",
"Server side authentication failed!" : "伺服器端認證失敗!",
"Please contact your administrator." : "請聯絡系統管理員",
"An internal error occurred." : "發生內部錯誤",
@@ -297,7 +305,7 @@ OC.L10N.register(
"Oct." : "十月",
"Nov." : "十一月",
"Dec." : "十二月",
- "Allow editing" : "允許編輯",
+ "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/>您確定要繼續嗎?",
"Hide file listing" : "隱藏檔案列表",
"Sending ..." : "正在傳送…",
"Email sent" : "Email 已寄出",
@@ -322,11 +330,6 @@ OC.L10N.register(
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "您的帳號已啟用進階安全機制,請使用第二階段來認證",
"Cancel login" : "取消登入",
"Please authenticate using the selected factor." : "請以選擇的二階段方式認證",
- "An error occured while verifying the token" : "驗證 token 時發生錯誤",
- "An error occured. Please try again" : "發生錯誤,請重試",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "與其他在ownCloud上的人們分享,請使用此格式 username@example.com/owncloud",
- "not assignable" : "不可指定",
- "Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 至版本 {version} ,需要一些時間",
- "An internal error occured." : "發生內部錯誤"
+ "An error occured while verifying the token" : "驗證 token 時發生錯誤"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index d47d9f63e3a..8dd18be415a 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -47,15 +47,20 @@
"Problem loading page, reloading in 5 seconds" : "載入頁面出錯,5 秒後重新整理",
"Saving..." : "儲存中...",
"Dismiss" : "知道了",
+ "Authentication required" : "需要認證",
"Password" : "密碼",
"Cancel" : "取消",
+ "Confirm" : "確認",
+ "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." : "重設密碼的連結已經 email 至你的信箱,如果你在一段時間內沒收到,請檢查垃圾郵件資料夾,如果還是找不到,請聯絡系統管理員。",
- "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/>您確定要繼續嗎?",
+ "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." : "無法變更密碼,請聯絡您的系統管理員",
"No" : "否",
"Yes" : "是",
+ "No files in here" : "沒有任何檔案",
"Choose" : "選擇",
"Error loading file picker template: {error}" : "載入檔案選擇器樣板出錯: {error}",
"Ok" : "好",
@@ -71,6 +76,7 @@
"(all selected)" : "(已全選)",
"({count} selected)" : "(已選 {count} 項)",
"Error loading file exists template" : "載入檔案存在樣板出錯",
+ "Pending" : "等候中",
"Very weak password" : "密碼強度非常弱",
"Weak password" : "密碼強度弱",
"So-so password" : "密碼強度普通",
@@ -78,6 +84,7 @@
"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." : "伺服器沒有網際網路連線,有些功能,像是外部儲存、更新版通知將無法運作。從遠端存取資料或是寄送 email 通知可能也無法運作。建議您設定好網際網路連線以使用所有功能。",
"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 檔案並未生效,我們強烈建議您設定您的網頁伺服器,拒絕資料目錄的公開存取,或者將您的資料目錄移出網頁伺服器根目錄。",
"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." : "\"{header}\" HTTP 標頭配置與 \"{expected}\"不一樣,這是一個潛在安全性或者隱私上的風險,因此我們建議您調整此設定",
@@ -102,6 +109,7 @@
"Link" : "連結",
"Password protect" : "密碼保護",
"Allow upload and editing" : "允許上傳及編輯",
+ "Allow editing" : "允許編輯",
"Email link to person" : "將連結 email 給別人",
"Send" : "寄出",
"Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}",
@@ -200,8 +208,8 @@
"Need help?" : "需要幫助?",
"See the documentation" : "閱讀說明文件",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "這個應用程式需要啟用 Javascript 才能正常運作,請{linkstart}啟用Javascript{linkend}然後重新整理頁面。",
- "Log out" : "登出",
"Search" : "搜尋",
+ "Log out" : "登出",
"Server side authentication failed!" : "伺服器端認證失敗!",
"Please contact your administrator." : "請聯絡系統管理員",
"An internal error occurred." : "發生內部錯誤",
@@ -295,7 +303,7 @@
"Oct." : "十月",
"Nov." : "十一月",
"Dec." : "十二月",
- "Allow editing" : "允許編輯",
+ "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/>您確定要繼續嗎?",
"Hide file listing" : "隱藏檔案列表",
"Sending ..." : "正在傳送…",
"Email sent" : "Email 已寄出",
@@ -320,11 +328,6 @@
"Enhanced security has been enabled for your account. Please authenticate using a second factor." : "您的帳號已啟用進階安全機制,請使用第二階段來認證",
"Cancel login" : "取消登入",
"Please authenticate using the selected factor." : "請以選擇的二階段方式認證",
- "An error occured while verifying the token" : "驗證 token 時發生錯誤",
- "An error occured. Please try again" : "發生錯誤,請重試",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "與其他在ownCloud上的人們分享,請使用此格式 username@example.com/owncloud",
- "not assignable" : "不可指定",
- "Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 至版本 {version} ,需要一些時間",
- "An internal error occured." : "發生內部錯誤"
+ "An error occured while verifying the token" : "驗證 token 時發生錯誤"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/routes.php b/core/routes.php
index 2b8080a3b7b..5d61d58e037 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -55,10 +55,10 @@ $application->registerRoutes($this, [
['name' => 'OCJS#getConfig', 'url' => '/core/js/oc.js', 'verb' => 'GET'],
['name' => 'Preview#getPreview', 'url' => '/core/preview', 'verb' => 'GET'],
['name' => 'Preview#getPreview', 'url' => '/core/preview.png', 'verb' => 'GET'],
+ ['name' => 'Css#getCss', 'url' => '/css/{appName}/{fileName}', 'verb' => 'GET'],
],
'ocs' => [
['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'],
- ['root' => '/cloud', 'name' => 'OCS#getCurrentUser', 'url' => '/user', 'verb' => 'GET'],
['root' => '', 'name' => 'OCS#getConfig', 'url' => '/config', 'verb' => 'GET'],
['root' => '/person', 'name' => 'OCS#personCheck', 'url' => '/check', 'verb' => 'POST'],
['root' => '/identityproof', 'name' => 'OCS#getIdentityProof', 'url' => '/key/{cloudId}', 'verb' => 'GET'],
diff --git a/core/search/js/search.js b/core/search/js/search.js
index 4dd29ef917f..44a69842374 100644
--- a/core/search/js/search.js
+++ b/core/search/js/search.js
@@ -405,6 +405,10 @@ $(document).ready(function() {
OC.Search = new OCA.Search($('#searchbox'), $('#searchresults'));
});
}
+ $('#searchbox + .icon-close-white').click(function() {
+ OC.Search.clear();
+ $('#searchbox').focus();
+ });
});
/**
diff --git a/core/templates/installation.php b/core/templates/installation.php
index d3f5021821d..2f645454128 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -142,6 +142,9 @@ script('core', [
value="<?php p($_['dbhost']); ?>"
autocomplete="off" autocapitalize="off" autocorrect="off">
</p>
+ <p class="info">
+ <?php p($l->t( 'Please specify the port number along with the host name (e.g., localhost:5432).' )); ?>
+ </p>
</div>
</fieldset>
<?php endif; ?>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index 2db333c1977..4842a94897d 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -42,67 +42,71 @@
<div id="notification"></div>
</div>
<header role="banner"><div id="header">
- <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
- id="nextcloud" tabindex="1">
- <div class="logo-icon">
- <h1 class="hidden-visually">
- <?php p($theme->getName()); ?>
- </h1>
- </div>
- </a>
+ <div id="header-left">
+ <a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
+ id="nextcloud" tabindex="1">
+ <div class="logo-icon">
+ <h1 class="hidden-visually">
+ <?php p($theme->getName()); ?>
+ </h1>
+ </div>
+ </a>
- <a href="#" class="header-appname-container menutoggle" tabindex="2">
- <h1 class="header-appname">
- <?php p(!empty($_['application'])?$_['application']: $l->t('Apps')); ?>
- </h1>
- <div class="icon-caret"></div>
- </a>
+ <a href="#" class="header-appname-container menutoggle" tabindex="2">
+ <h1 class="header-appname">
+ <?php p(!empty($_['application'])?$_['application']: $l->t('Apps')); ?>
+ </h1>
+ <div class="icon-caret"></div>
+ </a>
+ </div>
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
- <div id="settings">
- <div id="expand" tabindex="6" role="link" class="menutoggle">
- <?php if ($_['enableAvatars']): ?>
- <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown'); } else { print_unescaped('" style="display: none'); } ?>">
- <?php if ($_['userAvatarSet']): ?>
- <img alt="" width="32" height="32"
- src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32, 'v' => $_['userAvatarVersion']]));?>"
- srcset="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 64, 'v' => $_['userAvatarVersion']]));?> 2x, <?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 128, 'v' => $_['userAvatarVersion']]));?> 4x"
- >
+ <div id="header-right">
+ <form class="searchbox" action="#" method="post" role="search" novalidate>
+ <label for="searchbox" class="hidden-visually">
+ <?php p($l->t('Search'));?>
+ </label>
+ <input id="searchbox" type="search" name="query"
+ value="" required
+ autocomplete="off" tabindex="5">
+ <button class="icon-close-white" type="reset"></button>
+ </form>
+ <div id="settings">
+ <div id="expand" tabindex="6" role="link" class="menutoggle">
+ <?php if ($_['enableAvatars']): ?>
+ <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown'); } else { print_unescaped('" style="display: none'); } ?>">
+ <?php if ($_['userAvatarSet']): ?>
+ <img alt="" width="32" height="32"
+ src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32, 'v' => $_['userAvatarVersion']]));?>"
+ srcset="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 64, 'v' => $_['userAvatarVersion']]));?> 2x, <?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 128, 'v' => $_['userAvatarVersion']]));?> 4x"
+ >
+ <?php endif; ?>
+ </div>
<?php endif; ?>
+ <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
+ <div class="icon-caret"></div>
+ </div>
+ <div id="expanddiv">
+ <ul>
+ <?php foreach($_['settingsnavigation'] as $entry):?>
+ <li>
+ <a href="<?php print_unescaped($entry['href']); ?>"
+ <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>>
+ <img alt="" src="<?php print_unescaped($entry['icon'] . '?v=' . $_['versionHash']); ?>">
+ <?php p($entry['name']) ?>
+ </a>
+ </li>
+ <?php endforeach; ?>
+ <li>
+ <a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>>
+ <img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg') . '?v=' . $_['versionHash']); ?>">
+ <?php p($l->t('Log out'));?>
+ </a>
+ </li>
+ </ul>
</div>
- <?php endif; ?>
- <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
- <div class="icon-caret"></div>
- </div>
- <div id="expanddiv">
- <ul>
- <?php foreach($_['settingsnavigation'] as $entry):?>
- <li>
- <a href="<?php print_unescaped($entry['href']); ?>"
- <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>>
- <img alt="" src="<?php print_unescaped($entry['icon'] . '?v=' . $_['versionHash']); ?>">
- <?php p($entry['name']) ?>
- </a>
- </li>
- <?php endforeach; ?>
- <li>
- <a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>>
- <img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg') . '?v=' . $_['versionHash']); ?>">
- <?php p($l->t('Log out'));?>
- </a>
- </li>
- </ul>
</div>
</div>
-
- <form class="searchbox" action="#" method="post" role="search" novalidate>
- <label for="searchbox" class="hidden-visually">
- <?php p($l->t('Search'));?>
- </label>
- <input id="searchbox" type="search" name="query"
- value="" required
- autocomplete="off" tabindex="5">
- </form>
</div></header>
<nav role="navigation"><div id="navigation">
@@ -147,12 +151,12 @@
</div></nav>
<div id="sudo-login-background" class="hidden"></div>
- <div id="sudo-login-form" class="hidden">
+ <form id="sudo-login-form" class="hidden">
<?php p($l->t('This action requires you to confirm your password:')); ?><br>
- <input type="password" class="question" autocomplete="off" name="question" value=" <?php /* Hack against firefox ignoring autocomplete="off" */ ?>"
+ <input type="password" class="question" autocomplete="new-password" name="question" value=" <?php /* Hack against browsers ignoring autocomplete="off" */ ?>"
placeholder="<?php p($l->t('Confirm your password')); ?>" />
<input class="confirm icon-confirm" title="<?php p($l->t('Confirm')); ?>" value="" type="submit">
- </div>
+ </form>
<div id="content-wrapper">
<div id="content" class="app-<?php p($_['appid']) ?>" role="main">
diff --git a/core/templates/login.php b/core/templates/login.php
index c200dfe366b..221242c0dcb 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -68,7 +68,6 @@ script('core', [
<input type="submit" id="submit" class="login primary icon-confirm-white" title="" value="<?php p($l->t('Log in')); ?>" disabled="disabled" />
<div class="login-additional">
- <?php if ($_['rememberLoginAllowed'] === true) : ?>
<div class="remember-login-container">
<?php if ($_['rememberLoginState'] === 0) { ?>
<input type="checkbox" name="remember_login" value="1" id="remember_login" class="checkbox checkbox--white">
@@ -77,7 +76,6 @@ script('core', [
<?php } ?>
<label for="remember_login"><?php p($l->t('Stay logged in')); ?></label>
</div>
- <?php endif; ?>
</div>
<input type="hidden" name="timezone_offset" id="timezone_offset"/>
diff --git a/core/templates/twofactorshowchallenge.php b/core/templates/twofactorshowchallenge.php
index 20b92be9520..4f3741b5dfe 100644
--- a/core/templates/twofactorshowchallenge.php
+++ b/core/templates/twofactorshowchallenge.php
@@ -3,6 +3,8 @@
/** @var $_ array */
/* @var $error boolean */
$error = $_['error'];
+/* @var $error_message string */
+$error_message = $_['error_message'];
/* @var $provider OCP\Authentication\TwoFactorAuth\IProvider */
$provider = $_['provider'];
/* @var $template string */
@@ -12,7 +14,11 @@ $template = $_['template'];
<div class="warning">
<h2 class="two-factor-header"><?php p($provider->getDisplayName()); ?></h2>
<?php if ($error): ?>
- <p><strong><?php p($l->t('Error while validating your second factor')); ?></strong></p>
+ <?php if($error_message): ?>
+ <p><strong><?php p($error_message); ?></strong></p>
+ <?php else: ?>
+ <p><strong><?php p($l->t('Error while validating your second factor')); ?></strong></p>
+ <?php endif; ?>
<?php endif; ?>
<?php print_unescaped($template); ?>
</div>
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index fe078fdd291..19bd084f76e 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -1,12 +1,14 @@
test/
src/
bower.json
+component.json
.jshintrc
.travis.yml
CHANGELOG*
Gemfile
gruntfile.js
Gruntfile.js
+Gulpfile.js
Makefile
package.json
README*
@@ -156,3 +158,17 @@ autosize/**
!autosize/dist/autosize.js
!autosize/.bower.json
!autosize/LICENCE.md
+
+#marked
+marked/bin
+marked/doc
+marked/index.js
+marked/lib
+marked/man
+
+# DOMPurity
+DOMPurify/**
+!DOMPurify/dist
+!DOMPurify/dist/purify.min.js
+!DOMPurify/.bower.json
+!DOMPurify/LICENSE \ No newline at end of file
diff --git a/core/vendor/DOMPurify/.bower.json b/core/vendor/DOMPurify/.bower.json
new file mode 100644
index 00000000000..45f4fa47258
--- /dev/null
+++ b/core/vendor/DOMPurify/.bower.json
@@ -0,0 +1,42 @@
+{
+ "name": "DOMPurify",
+ "version": "0.8.4",
+ "homepage": "https://github.com/cure53/DOMPurify",
+ "author": "Cure53 <info@cure53.de>",
+ "description": "A DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG",
+ "main": "src/purify.js",
+ "keywords": [
+ "dom",
+ "xss",
+ "cross site scripting",
+ "html",
+ "svg",
+ "mathml",
+ "sanitizer",
+ "filter",
+ "sanitize",
+ "security",
+ "secure"
+ ],
+ "license": [
+ "MPL-2.0",
+ "Apache-2.0"
+ ],
+ "ignore": [
+ "**/.*",
+ "demos",
+ "scripts",
+ "test",
+ "website"
+ ],
+ "_release": "0.8.4",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.8.4",
+ "commit": "9be8f9def3124ccf2db71b7711027b55f9b90f48"
+ },
+ "_source": "https://github.com/cure53/DOMPurify.git",
+ "_target": "^0.8.4",
+ "_originalSource": "DOMPurify",
+ "_direct": true
+} \ No newline at end of file
diff --git a/core/vendor/DOMPurify/LICENSE b/core/vendor/DOMPurify/LICENSE
new file mode 100644
index 00000000000..e099aad0f09
--- /dev/null
+++ b/core/vendor/DOMPurify/LICENSE
@@ -0,0 +1,378 @@
+DOMPurify
+Copyright 2015 Mario Heiderich
+
+DOMPurify is free software; you can redistribute it and/or modify it under the
+terms of either:
+
+a) the Apache License Version 2.0, or
+b) the Mozilla Public License Version 2.0
+
+-----------------------------------------------------------------------------
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-----------------------------------------------------------------------------
+Mozilla Public License, version 2.0
+
+1. Definitions
+
+1.1. “Contributor”
+
+ means each individual or legal entity that creates, contributes to the
+ creation of, or owns Covered Software.
+
+1.2. “Contributor Version”
+
+ means the combination of the Contributions of others (if any) used by a
+ Contributor and that particular Contributor’s Contribution.
+
+1.3. “Contribution”
+
+ means Covered Software of a particular Contributor.
+
+1.4. “Covered Software”
+
+ means Source Code Form to which the initial Contributor has attached the
+ notice in Exhibit A, the Executable Form of such Source Code Form, and
+ Modifications of such Source Code Form, in each case including portions
+ thereof.
+
+1.5. “Incompatible With Secondary Licenses”
+ means
+
+ a. that the initial Contributor has attached the notice described in
+ Exhibit B to the Covered Software; or
+
+ b. that the Covered Software was made available under the terms of version
+ 1.1 or earlier of the License, but not also under the terms of a
+ Secondary License.
+
+1.6. “Executable Form”
+
+ means any form of the work other than Source Code Form.
+
+1.7. “Larger Work”
+
+ means a work that combines Covered Software with other material, in a separate
+ file or files, that is not Covered Software.
+
+1.8. “License”
+
+ means this document.
+
+1.9. “Licensable”
+
+ means having the right to grant, to the maximum extent possible, whether at the
+ time of the initial grant or subsequently, any and all of the rights conveyed by
+ this License.
+
+1.10. “Modifications”
+
+ means any of the following:
+
+ a. any file in Source Code Form that results from an addition to, deletion
+ from, or modification of the contents of Covered Software; or
+
+ b. any new file in Source Code Form that contains any Covered Software.
+
+1.11. “Patent Claims” of a Contributor
+
+ means any patent claim(s), including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by such Contributor that
+ would be infringed, but for the grant of the License, by the making,
+ using, selling, offering for sale, having made, import, or transfer of
+ either its Contributions or its Contributor Version.
+
+1.12. “Secondary License”
+
+ means either the GNU General Public License, Version 2.0, the GNU Lesser
+ General Public License, Version 2.1, the GNU Affero General Public
+ License, Version 3.0, or any later versions of those licenses.
+
+1.13. “Source Code Form”
+
+ means the form of the work preferred for making modifications.
+
+1.14. “You” (or “Your”)
+
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, “You” includes any entity that controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, “control” means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.
+
+
+2. License Grants and Conditions
+
+2.1. Grants
+
+ Each Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ a. under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or as
+ part of a Larger Work; and
+
+ b. under Patent Claims of such Contributor to make, use, sell, offer for
+ sale, have made, import, and otherwise transfer either its Contributions
+ or its Contributor Version.
+
+2.2. Effective Date
+
+ The licenses granted in Section 2.1 with respect to any Contribution become
+ effective for each Contribution on the date the Contributor first distributes
+ such Contribution.
+
+2.3. Limitations on Grant Scope
+
+ The licenses granted in this Section 2 are the only rights granted under this
+ License. No additional rights or licenses will be implied from the distribution
+ or licensing of Covered Software under this License. Notwithstanding Section
+ 2.1(b) above, no patent license is granted by a Contributor:
+
+ a. for any code that a Contributor has removed from Covered Software; or
+
+ b. for infringements caused by: (i) Your and any other third party’s
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+ c. under Patent Claims infringed by Covered Software in the absence of its
+ Contributions.
+
+ This License does not grant any rights in the trademarks, service marks, or
+ logos of any Contributor (except as may be necessary to comply with the
+ notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+ No Contributor makes additional grants as a result of Your choice to
+ distribute the Covered Software under a subsequent version of this License
+ (see Section 10.2) or under the terms of a Secondary License (if permitted
+ under the terms of Section 3.3).
+
+2.5. Representation
+
+ Each Contributor represents that the Contributor believes its Contributions
+ are its original creation(s) or it has sufficient rights to grant the
+ rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+ This License is not intended to limit any rights You have under applicable
+ copyright doctrines of fair use, fair dealing, or other equivalents.
+
+2.7. Conditions
+
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
+ Section 2.1.
+
+
+3. Responsibilities
+
+3.1. Distribution of Source Form
+
+ All distribution of Covered Software in Source Code Form, including any
+ Modifications that You create or to which You contribute, must be under the
+ terms of this License. You must inform recipients that the Source Code Form
+ of the Covered Software is governed by the terms of this License, and how
+ they can obtain a copy of this License. You may not attempt to alter or
+ restrict the recipients’ rights in the Source Code Form.
+
+3.2. Distribution of Executable Form
+
+ If You distribute Covered Software in Executable Form then:
+
+ a. such Covered Software must also be made available in Source Code Form,
+ as described in Section 3.1, and You must inform recipients of the
+ Executable Form how they can obtain a copy of such Source Code Form by
+ reasonable means in a timely manner, at a charge no more than the cost
+ of distribution to the recipient; and
+
+ b. You may distribute such Executable Form under the terms of this License,
+ or sublicense it under different terms, provided that the license for
+ the Executable Form does not attempt to limit or alter the recipients’
+ rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+ You may create and distribute a Larger Work under terms of Your choice,
+ provided that You also comply with the requirements of this License for the
+ Covered Software. If the Larger Work is a combination of Covered Software
+ with a work governed by one or more Secondary Licenses, and the Covered
+ Software is not Incompatible With Secondary Licenses, this License permits
+ You to additionally distribute such Covered Software under the terms of
+ such Secondary License(s), so that the recipient of the Larger Work may, at
+ their option, further distribute the Covered Software under the terms of
+ either this License or such Secondary License(s).
+
+3.4. Notices
+
+ You may not remove or alter the substance of any license notices (including
+ copyright notices, patent notices, disclaimers of warranty, or limitations
+ of liability) contained within the Source Code Form of the Covered
+ Software, except that You may alter any license notices to the extent
+ required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+ You may choose to offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more recipients of Covered
+ Software. However, You may do so only on Your own behalf, and not on behalf
+ of any Contributor. You must make it absolutely clear that any such
+ warranty, support, indemnity, or liability obligation is offered by You
+ alone, and You hereby agree to indemnify every Contributor for any
+ liability incurred by such Contributor as a result of warranty, support,
+ indemnity or liability terms You offer. You may include additional
+ disclaimers of warranty and limitations of liability specific to any
+ jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+
+ If it is impossible for You to comply with any of the terms of this License
+ with respect to some or all of the Covered Software due to statute, judicial
+ order, or regulation then You must: (a) comply with the terms of this License
+ to the maximum extent possible; and (b) describe the limitations and the code
+ they affect. Such description must be placed in a text file included with all
+ distributions of the Covered Software under this License. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Termination
+
+5.1. The rights granted under this License will terminate automatically if You
+ fail to comply with any of its terms. However, if You become compliant,
+ then the rights granted under this License from a particular Contributor
+ are reinstated (a) provisionally, unless and until such Contributor
+ explicitly and finally terminates Your grants, and (b) on an ongoing basis,
+ if such Contributor fails to notify You of the non-compliance by some
+ reasonable means prior to 60 days after You have come back into compliance.
+ Moreover, Your grants from a particular Contributor are reinstated on an
+ ongoing basis if such Contributor notifies You of the non-compliance by
+ some reasonable means, this is the first time You have received notice of
+ non-compliance with this License from such Contributor, and You become
+ compliant prior to 30 days after Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+ infringement claim (excluding declaratory judgment actions, counter-claims,
+ and cross-claims) alleging that a Contributor Version directly or
+ indirectly infringes any patent, then the rights granted to You by any and
+ all Contributors for the Covered Software under Section 2.1 of this License
+ shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
+ license agreements (excluding distributors and resellers) which have been
+ validly granted by You or Your distributors under this License prior to
+ termination shall survive termination.
+
+6. Disclaimer of Warranty
+
+ Covered Software is provided under this License on an “as is” basis, without
+ warranty of any kind, either expressed, implied, or statutory, including,
+ without limitation, warranties that the Covered Software is free of defects,
+ merchantable, fit for a particular purpose or non-infringing. The entire
+ risk as to the quality and performance of the Covered Software is with You.
+ Should any Covered Software prove defective in any respect, You (not any
+ Contributor) assume the cost of any necessary servicing, repair, or
+ correction. This disclaimer of warranty constitutes an essential part of this
+ License. No use of any Covered Software is authorized under this License
+ except under this disclaimer.
+
+7. Limitation of Liability
+
+ Under no circumstances and under no legal theory, whether tort (including
+ negligence), contract, or otherwise, shall any Contributor, or anyone who
+ distributes Covered Software as permitted above, be liable to You for any
+ direct, indirect, special, incidental, or consequential damages of any
+ character including, without limitation, damages for lost profits, loss of
+ goodwill, work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses, even if such party shall have been
+ informed of the possibility of such damages. This limitation of liability
+ shall not apply to liability for death or personal injury resulting from such
+ party’s negligence to the extent applicable law prohibits such limitation.
+ Some jurisdictions do not allow the exclusion or limitation of incidental or
+ consequential damages, so this exclusion and limitation may not apply to You.
+
+8. Litigation
+
+ Any litigation relating to this License may be brought only in the courts of
+ a jurisdiction where the defendant maintains its principal place of business
+ and such litigation shall be governed by laws of that jurisdiction, without
+ reference to its conflict-of-law provisions. Nothing in this Section shall
+ prevent a party’s ability to bring cross-claims or counter-claims.
+
+9. Miscellaneous
+
+ This License represents the complete agreement concerning the subject matter
+ hereof. If any provision of this License is held to be unenforceable, such
+ provision shall be reformed only to the extent necessary to make it
+ enforceable. Any law or regulation which provides that the language of a
+ contract shall be construed against the drafter shall not be used to construe
+ this License against a Contributor.
+
+
+10. Versions of the License
+
+10.1. New Versions
+
+ Mozilla Foundation is the license steward. Except as provided in Section
+ 10.3, no one other than the license steward has the right to modify or
+ publish new versions of this License. Each version will be given a
+ distinguishing version number.
+
+10.2. Effect of New Versions
+
+ You may distribute the Covered Software under the terms of the version of
+ the License under which You originally received the Covered Software, or
+ under the terms of any subsequent version published by the license
+ steward.
+
+10.3. Modified Versions
+
+ If you create software not governed by this License, and you want to
+ create a new license for such software, you may create and use a modified
+ version of this License if you rename the license and remove any
+ references to the name of the license steward (except to note that such
+ modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
+ If You choose to distribute Source Code Form that is Incompatible With
+ Secondary Licenses under the terms of this version of the License, the
+ notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+
+ This Source Code Form is subject to the
+ terms of the Mozilla Public License, v.
+ 2.0. If a copy of the MPL was not
+ distributed with this file, You can
+ obtain one at
+ http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular file, then
+You may include the notice in a location (such as a LICENSE file in a relevant
+directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - “Incompatible With Secondary Licenses” Notice
+
+ This Source Code Form is “Incompatible
+ With Secondary Licenses”, as defined by
+ the Mozilla Public License, v. 2.0.
+
diff --git a/core/vendor/DOMPurify/dist/purify.min.js b/core/vendor/DOMPurify/dist/purify.min.js
new file mode 100644
index 00000000000..d95d80fc231
--- /dev/null
+++ b/core/vendor/DOMPurify/dist/purify.min.js
@@ -0,0 +1,2 @@
+(function(e){"use strict";var t=typeof window==="undefined"?null:window;if(typeof define==="function"&&define.amd){define(function(){return e(t)})}else if(typeof module!=="undefined"){module.exports=e(t)}else{t.DOMPurify=e(t)}})(function e(t){"use strict";var r=function(t){return e(t)};r.version="0.8.4";r.removed=[];if(!t||!t.document||t.document.nodeType!==9){r.isSupported=false;return r}var n=t.document;var a=n;var i=t.DocumentFragment;var o=t.HTMLTemplateElement;var l=t.NodeFilter;var s=t.NamedNodeMap||t.MozNamedAttrMap;var f=t.Text;var c=t.Comment;var u=t.DOMParser;if(typeof o==="function"){var d=n.createElement("template");if(d.content&&d.content.ownerDocument){n=d.content.ownerDocument}}var m=n.implementation;var p=n.createNodeIterator;var v=n.getElementsByTagName;var h=n.createDocumentFragment;var g=a.importNode;var y={};r.isSupported=typeof m.createHTMLDocument!=="undefined"&&n.documentMode!==9;var b=function(e,t){var r=t.length;while(r--){if(typeof t[r]==="string"){t[r]=t[r].toLowerCase()}e[t[r]]=true}return e};var T=function(e){var t={};var r;for(r in e){if(e.hasOwnProperty(r)){t[r]=e[r]}}return t};var x=null;var k=b({},["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr","svg","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","switch","symbol","text","textpath","title","tref","tspan","view","vkern","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmuliscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mpspace","msqrt","mystyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","#text"]);var A=null;var w=b({},["accept","action","align","alt","autocomplete","background","bgcolor","border","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","coords","datetime","default","dir","disabled","download","enctype","face","for","headers","height","hidden","high","href","hreflang","id","ismap","label","lang","list","loop","low","max","maxlength","media","method","min","multiple","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","rows","rowspan","spellcheck","scope","selected","shape","size","span","srclang","start","src","step","style","summary","tabindex","title","type","usemap","valign","value","width","xmlns","accent-height","accumulate","additivive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mode","min","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","surfacescale","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","u1","u2","unicode","values","viewbox","visibility","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","y","y1","y2","z","zoomandpan","accent","accentunder","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","display","displaystyle","fence","frame","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]);var E=null;var S=null;var M=true;var O=false;var N=false;var L=false;var D=/\{\{[\s\S]*|[\s\S]*\}\}/gm;var _=/<%[\s\S]*|[\s\S]*%>/gm;var C=false;var z=false;var R=false;var F=false;var H=true;var B=true;var W=b({},["audio","head","math","script","style","svg","video"]);var j=b({},["audio","video","img","source"]);var G=b({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]);var I=null;var q=n.createElement("form");var P=function(e){if(typeof e!=="object"){e={}}x="ALLOWED_TAGS"in e?b({},e.ALLOWED_TAGS):k;A="ALLOWED_ATTR"in e?b({},e.ALLOWED_ATTR):w;E="FORBID_TAGS"in e?b({},e.FORBID_TAGS):{};S="FORBID_ATTR"in e?b({},e.FORBID_ATTR):{};M=e.ALLOW_DATA_ATTR!==false;O=e.ALLOW_UNKNOWN_PROTOCOLS||false;N=e.SAFE_FOR_JQUERY||false;L=e.SAFE_FOR_TEMPLATES||false;C=e.WHOLE_DOCUMENT||false;z=e.RETURN_DOM||false;R=e.RETURN_DOM_FRAGMENT||false;F=e.RETURN_DOM_IMPORT||false;H=e.SANITIZE_DOM!==false;B=e.KEEP_CONTENT!==false;if(L){M=false}if(R){z=true}if(e.ADD_TAGS){if(x===k){x=T(x)}b(x,e.ADD_TAGS)}if(e.ADD_ATTR){if(A===w){A=T(A)}b(A,e.ADD_ATTR)}if(B){x["#text"]=true}if(Object&&"freeze"in Object){Object.freeze(e)}I=e};var U=function(e){r.removed.push({element:e});try{e.parentNode.removeChild(e)}catch(t){e.outerHTML=""}};var V=function(e,t){r.removed.push({attribute:t.getAttributeNode(e),from:t});t.removeAttribute(e)};var K=function(e){var t,r;try{t=(new u).parseFromString(e,"text/html")}catch(n){}if(!t||!t.documentElement){t=m.createHTMLDocument("");r=t.body;r.parentNode.removeChild(r.parentNode.firstElementChild);r.outerHTML=e}if(typeof t.getElementsByTagName==="function"){return t.getElementsByTagName(C?"html":"body")[0]}return v.call(t,C?"html":"body")[0]};var J=function(e){return p.call(e.ownerDocument||e,e,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,function(){return l.FILTER_ACCEPT},false)};var Q=function(e){if(e instanceof f||e instanceof c){return false}if(typeof e.nodeName!=="string"||typeof e.textContent!=="string"||typeof e.removeChild!=="function"||!(e.attributes instanceof s)||typeof e.removeAttribute!=="function"||typeof e.setAttribute!=="function"){return true}return false};var X=function(e){var t,n;ne("beforeSanitizeElements",e,null);if(Q(e)){U(e);return true}t=e.nodeName.toLowerCase();ne("uponSanitizeElement",e,{tagName:t,allowedTags:x});if(!x[t]||E[t]){if(B&&!W[t]&&typeof e.insertAdjacentHTML==="function"){try{e.insertAdjacentHTML("AfterEnd",e.innerHTML)}catch(a){}}U(e);return true}if(N&&!e.firstElementChild&&(!e.content||!e.content.firstElementChild)&&/</g.test(e.textContent)){r.removed.push({element:e.cloneNode()});e.innerHTML=e.textContent.replace(/</g,"&lt;")}if(L&&e.nodeType===3){n=e.textContent;n=n.replace(D," ");n=n.replace(_," ");if(e.textContent!==n){r.removed.push({element:e.cloneNode()});e.textContent=n}}ne("afterSanitizeElements",e,null);return false};var Y=/^data-[\-\w.\u00B7-\uFFFF]/;var Z=/^(?:(?:(?:f|ht)tps?|mailto|tel):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i;var $=/^(?:\w+script|data):/i;var ee=/[\x00-\x20\xA0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;var te=function(e){var a,i,o,l,s,f,c,u;ne("beforeSanitizeAttributes",e,null);f=e.attributes;if(!f){return}c={attrName:"",attrValue:"",keepAttr:true,allowedAttributes:A};u=f.length;while(u--){a=f[u];i=a.name;o=a.value;l=i.toLowerCase();c.attrName=l;c.attrValue=o;c.keepAttr=true;ne("uponSanitizeAttribute",e,c);o=c.attrValue;if(l==="name"&&e.nodeName==="IMG"&&f.id){s=f.id;f=Array.prototype.slice.apply(f);V("id",e);V(i,e);if(f.indexOf(s)>u){e.setAttribute("id",s.value)}}else{if(i==="id"){e.setAttribute(i,"")}V(i,e)}if(!c.keepAttr){continue}if(H&&(l==="id"||l==="name")&&(o in t||o in n||o in q)){continue}if(L){o=o.replace(D," ");o=o.replace(_," ")}if(M&&Y.test(l)){}else if(!A[l]||S[l]){continue}else if(G[l]){}else if(Z.test(o.replace(ee,""))){}else if(l==="src"&&o.indexOf("data:")===0&&j[e.nodeName.toLowerCase()]){}else if(O&&!$.test(o.replace(ee,""))){}else if(!o){}else{continue}try{e.setAttribute(i,o);r.removed.pop()}catch(d){}}ne("afterSanitizeAttributes",e,null)};var re=function(e){var t;var r=J(e);ne("beforeSanitizeShadowDOM",e,null);while(t=r.nextNode()){ne("uponSanitizeShadowNode",t,null);if(X(t)){continue}if(t.content instanceof i){re(t.content)}te(t)}ne("afterSanitizeShadowDOM",e,null)};var ne=function(e,t,n){if(!y[e]){return}y[e].forEach(function(e){e.call(r,t,n,I)})};r.sanitize=function(e,n){var o,l,s,f,c;if(!e){e=""}if(typeof e!=="string"){if(typeof e.toString!=="function"){throw new TypeError("toString is not a function")}else{e=e.toString()}}if(!r.isSupported){if(typeof t.toStaticHTML==="object"||typeof t.toStaticHTML==="function"){return t.toStaticHTML(e)}return e}P(n);r.removed=[];if(!z&&!C&&e.indexOf("<")===-1){return e}o=K(e);if(!o){return z?null:""}f=J(o);while(l=f.nextNode()){if(l.nodeType===3&&l===s){continue}if(X(l)){continue}if(l.content instanceof i){re(l.content)}te(l);s=l}if(z){if(R){c=h.call(o.ownerDocument);while(o.firstChild){c.appendChild(o.firstChild)}}else{c=o}if(F){c=g.call(a,c,true)}return c}return C?o.outerHTML:o.innerHTML};r.addHook=function(e,t){if(typeof t!=="function"){return}y[e]=y[e]||[];y[e].push(t)};r.removeHook=function(e){if(y[e]){y[e].pop()}};r.removeHooks=function(e){if(y[e]){y[e]=[]}};r.removeAllHooks=function(){y={}};return r});
+//# sourceMappingURL=./dist/purify.min.js.map \ No newline at end of file
diff --git a/core/vendor/marked/.bower.json b/core/vendor/marked/.bower.json
new file mode 100644
index 00000000000..058b951d4b7
--- /dev/null
+++ b/core/vendor/marked/.bower.json
@@ -0,0 +1,33 @@
+{
+ "name": "marked",
+ "version": "0.3.6",
+ "homepage": "https://github.com/chjj/marked",
+ "authors": [
+ "Christopher Jeffrey <chjjeffrey@gmail.com>"
+ ],
+ "description": "A markdown parser built for speed",
+ "keywords": [
+ "markdown",
+ "markup",
+ "html"
+ ],
+ "main": "lib/marked.js",
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "app/bower_components",
+ "test",
+ "tests"
+ ],
+ "_release": "0.3.6",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.3.6",
+ "commit": "eddec20467c2d10c7769061ee9074e268500966f"
+ },
+ "_source": "https://github.com/chjj/marked.git",
+ "_target": "0.3.6",
+ "_originalSource": "marked"
+} \ No newline at end of file
diff --git a/core/vendor/marked/LICENSE b/core/vendor/marked/LICENSE
new file mode 100644
index 00000000000..a7b812ed618
--- /dev/null
+++ b/core/vendor/marked/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2011-2014, Christopher Jeffrey (https://github.com/chjj/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/core/vendor/marked/marked.min.js b/core/vendor/marked/marked.min.js
new file mode 100644
index 00000000000..555c1dc1d9d
--- /dev/null
+++ b/core/vendor/marked/marked.min.js
@@ -0,0 +1,6 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/chjj/marked
+ */
+(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]||""});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].split(/ *\| */)}this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[2]==="="?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"hr"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"blockquote_start"});cap=cap[0].replace(/^ *> ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\d+\.) +/,"");if(~item.indexOf("\n ")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp("^ {1,"+space+"}","gm"),""):item.replace(/^ {1,4}/gm,"")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&(cap[1]==="pre"||cap[1]==="script"||cap[1]==="style"),text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */)}this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:"paragraph",text:cap[1].charAt(cap[1].length-1)==="\n"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"text",text:cap[0]});continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return this.tokens};var inline={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};inline._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;inline._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^<a /i.test(cap[0])){this.inLink=true}else if(this.inLink&&/^<\/a>/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(cap[0]):escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.text(escape(this.smartypants(cap[0])));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){if(!this.options.mangle)return text;var out="",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"<pre><code>"+(escaped?code:escape(code,true))+"\n</code></pre>"}return'<pre><code class="'+this.options.langPrefix+escape(lang,true)+'">'+(escaped?code:escape(code,true))+"\n</code></pre>\n"};Renderer.prototype.blockquote=function(quote){return"<blockquote>\n"+quote+"</blockquote>\n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"<h"+level+' id="'+this.options.headerPrefix+raw.toLowerCase().replace(/[^\w]+/g,"-")+'">'+text+"</h"+level+">\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"</"+type+">\n"};Renderer.prototype.listitem=function(text){return"<li>"+text+"</li>\n"};Renderer.prototype.paragraph=function(text){return"<p>"+text+"</p>\n"};Renderer.prototype.table=function(header,body){return"<table>\n"+"<thead>\n"+header+"</thead>\n"+"<tbody>\n"+body+"</tbody>\n"+"</table>\n"};Renderer.prototype.tablerow=function(content){return"<tr>\n"+content+"</tr>\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"</"+type+">\n"};Renderer.prototype.strong=function(text){return"<strong>"+text+"</strong>"};Renderer.prototype.em=function(text){return"<em>"+text+"</em>"};Renderer.prototype.codespan=function(text){return"<code>"+text+"</code>"};Renderer.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"};Renderer.prototype.del=function(text){return"<del>"+text+"</del>"};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0){return""}}var out='<a href="'+href+'"';if(title){out+=' title="'+title+'"'}out+=">"+text+"</a>";return out};Renderer.prototype.image=function(href,title,text){var out='<img src="'+href+'" alt="'+text+'"';if(title){out+=' title="'+title+'"'}out+=this.options.xhtml?"/>":">";return out};Renderer.prototype.text=function(text){return text};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i<this.token.header.length;i++){flags={header:true,align:this.token.align[i]};cell+=this.renderer.tablecell(this.inline.output(this.token.header[i]),{header:true,align:this.token.align[i]})}header+=this.renderer.tablerow(cell);for(i=0;i<this.token.cells.length;i++){row=this.token.cells[i];cell="";for(j=0;j<row.length;j++){cell+=this.renderer.tablecell(this.inline.output(row[j]),{header:false,align:this.token.align[j]})}body+=this.renderer.tablerow(cell)}return this.renderer.table(header,body)}case"blockquote_start":{var body="";while(this.next().type!=="blockquote_end"){body+=this.tok()}return this.renderer.blockquote(body)}case"list_start":{var body="",ordered=this.token.ordered;while(this.next().type!=="list_end"){body+=this.tok()}return this.renderer.list(body,ordered)}case"list_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.token.type==="text"?this.parseText():this.tok()}return this.renderer.listitem(body)}case"loose_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.tok()}return this.renderer.listitem(body)}case"html":{var html=!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;return this.renderer.html(html)}case"paragraph":{return this.renderer.paragraph(this.inline.output(this.token.text))}case"text":{return this.renderer.paragraph(this.parseText())}}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target){if(Object.prototype.hasOwnProperty.call(target,key)){obj[key]=target[key]}}}return obj}function marked(src,opt,callback){if(callback||typeof opt==="function"){if(!callback){callback=opt;opt=null}opt=merge({},marked.defaults,opt||{});var highlight=opt.highlight,tokens,pending,i=0;try{tokens=Lexer.lex(src,opt)}catch(e){return callback(e)}pending=tokens.length;var done=function(err){if(err){opt.highlight=highlight;return callback(err)}var out;try{out=Parser.parse(tokens,opt)}catch(e){err=e}opt.highlight=highlight;return err?callback(err):callback(null,out)};if(!highlight||highlight.length<3){return done()}delete opt.highlight;if(!pending)return done();for(;i<tokens.length;i++){(function(token){if(token.type!=="code"){return--pending||done()}return highlight(token.text,token.lang,function(err,code){if(err)return done(err);if(code==null||code===token.text){return--pending||done()}token.text=code;token.escaped=true;--pending||done()})})(tokens[i])}return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+="\nPlease report this to https://github.com/chjj/marked.";if((opt||marked.defaults).silent){return"<p>An error occured:</p><pre>"+escape(e.message+"",true)+"</pre>"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file
diff --git a/cron.php b/cron.php
index 6fdc7cb24d3..c8eed3afbe7 100644
--- a/cron.php
+++ b/cron.php
@@ -30,6 +30,13 @@
*
*/
+// Show warning if a PHP version below 5.6.0 is used
+if (version_compare(PHP_VERSION, '5.6.0') === -1) {
+ echo 'This version of Nextcloud requires at least PHP 5.6.0<br/>';
+ echo 'You are currently running ' . PHP_VERSION . '. Please update your PHP version.';
+ return;
+}
+
try {
require_once __DIR__ . '/lib/base.php';
diff --git a/lib/base.php b/lib/base.php
index 7bd14de56b6..3ba0755eaab 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -281,6 +281,7 @@ class OC {
// render error page
$template = new OC_Template('', 'update.user', 'guest');
OC_Util::addScript('maintenance-check');
+ OC_Util::addStyle('guest');
$template->printPage();
die();
}
@@ -354,6 +355,8 @@ class OC {
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 120');
+ OC_Util::addStyle('guest');
+
// render error page
$template = new OC_Template('', 'update.use-cli', 'guest');
$template->assign('productName', 'nextcloud'); // for now
@@ -373,9 +376,9 @@ class OC {
$oldTheme = $systemConfig->getValue('theme');
$systemConfig->setValue('theme', '');
- \OCP\Util::addScript('config'); // needed for web root
- \OCP\Util::addScript('update');
- \OCP\Util::addStyle('update');
+ OC_Util::addScript('config'); // needed for web root
+ OC_Util::addScript('update');
+ OC_Util::addStyle('guest');
/** @var \OC\App\AppManager $appManager */
$appManager = \OC::$server->getAppManager();
@@ -666,12 +669,6 @@ class OC {
OC\Log\ErrorHandler::register($debug);
}
- // register the stream wrappers
- stream_wrapper_register('fakedir', 'OC\Files\Stream\Dir');
- stream_wrapper_register('static', 'OC\Files\Stream\StaticStream');
- stream_wrapper_register('close', 'OC\Files\Stream\Close');
- stream_wrapper_register('quota', 'OC\Files\Stream\Quota');
-
\OC::$server->getEventLogger()->start('init_session', 'Initialize session');
OC_App::loadApps(array('session'));
if (!self::$CLI) {
@@ -711,6 +708,7 @@ class OC {
exit(1);
} else {
OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
+ OC_Util::addStyle('guest');
OC_Template::printGuestPage('', 'error', array('errors' => $errors));
exit;
}
@@ -750,9 +748,6 @@ class OC {
self::registerCacheHooks();
self::registerFilesystemHooks();
- if ($systemConfig->getValue('enable_previews', true)) {
- self::registerPreviewHooks();
- }
self::registerShareHooks();
self::registerLogRotate();
self::registerEncryptionWrapper();
@@ -791,23 +786,31 @@ class OC {
&& !\OC::$server->getTrustedDomainHelper()->isTrustedDomain($host)
&& self::$server->getConfig()->getSystemValue('installed', false)
) {
- header('HTTP/1.1 400 Bad Request');
- header('Status: 400 Bad Request');
+ // Allow access to CSS resources
+ $isScssRequest = false;
+ if(strpos($request->getPathInfo(), '/css/') === 0) {
+ $isScssRequest = true;
+ }
- \OC::$server->getLogger()->warning(
+ if (!$isScssRequest) {
+ header('HTTP/1.1 400 Bad Request');
+ header('Status: 400 Bad Request');
+
+ \OC::$server->getLogger()->warning(
'Trusted domain error. "{remoteAddress}" tried to access using "{host}" as host.',
[
'app' => 'core',
'remoteAddress' => $request->getRemoteAddress(),
'host' => $host,
]
- );
+ );
- $tmpl = new OCP\Template('core', 'untrustedDomain', 'guest');
- $tmpl->assign('domain', $host);
- $tmpl->printPage();
+ $tmpl = new OCP\Template('core', 'untrustedDomain', 'guest');
+ $tmpl->assign('domain', $host);
+ $tmpl->printPage();
- exit();
+ exit();
+ }
}
\OC::$server->getEventLogger()->end('boot');
}
@@ -881,7 +884,7 @@ class OC {
if ($systemConfig->getValue('installed', false) && $systemConfig->getValue('log_rotate_size', false) && !self::checkUpgrade(false)) {
//don't try to do this before we are properly setup
//use custom logfile path if defined, otherwise use default of nextcloud.log in data directory
- \OCP\BackgroundJob::registerJob('OC\Log\Rotate', $systemConfig->getValue('logfile', $systemConfig->getValue('datadirectory', OC::$SERVERROOT . '/data') . '/nextcloud.log'));
+ \OC::$server->getJobList()->add('OC\Log\Rotate');
}
}
@@ -895,20 +898,6 @@ class OC {
}
/**
- * register hooks for previews
- */
- public static function registerPreviewHooks() {
- OC_Hook::connect('OC_Filesystem', 'post_write', 'OC\Preview', 'post_write');
- OC_Hook::connect('OC_Filesystem', 'delete', 'OC\Preview', 'prepare_delete_files');
- OC_Hook::connect('\OCP\Versions', 'preDelete', 'OC\Preview', 'prepare_delete');
- OC_Hook::connect('\OCP\Trashbin', 'preDelete', 'OC\Preview', 'prepare_delete');
- OC_Hook::connect('OC_Filesystem', 'post_delete', 'OC\Preview', 'post_delete_files');
- OC_Hook::connect('\OCP\Versions', 'delete', 'OC\Preview', 'post_delete_versions');
- OC_Hook::connect('\OCP\Trashbin', 'delete', 'OC\Preview', 'post_delete');
- OC_Hook::connect('\OCP\Versions', 'rollback', 'OC\Preview', 'post_delete_versions');
- }
-
- /**
* register hooks for sharing
*/
public static function registerShareHooks() {
diff --git a/lib/composer/autoload.php b/lib/composer/autoload.php
index 610dbf34bca..6de0160c0b5 100644
--- a/lib/composer/autoload.php
+++ b/lib/composer/autoload.php
@@ -2,6 +2,6 @@
// autoload.php @generated by Composer
-require_once __DIR__ . '/composer' . '/autoload_real.php';
+require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c::getLoader();
diff --git a/lib/composer/composer/ClassLoader.php b/lib/composer/composer/ClassLoader.php
index ac67d302a18..4626994fd4d 100644
--- a/lib/composer/composer/ClassLoader.php
+++ b/lib/composer/composer/ClassLoader.php
@@ -55,6 +55,7 @@ class ClassLoader
private $classMap = array();
private $classMapAuthoritative = false;
private $missingClasses = array();
+ private $apcuPrefix;
public function getPrefixes()
{
@@ -272,6 +273,26 @@ class ClassLoader
}
/**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
@@ -313,11 +334,6 @@ class ClassLoader
*/
public function findFile($class)
{
- // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
- if ('\\' == $class[0]) {
- $class = substr($class, 1);
- }
-
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
@@ -325,6 +341,12 @@ class ClassLoader
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
$file = $this->findFileWithExtension($class, '.php');
@@ -333,6 +355,10 @@ class ClassLoader
$file = $this->findFileWithExtension($class, '.hh');
}
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index dafa46bc996..4a345ed7a6d 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -9,8 +9,12 @@ return array(
'OCP\\API' => $baseDir . '/lib/public/API.php',
'OCP\\Activity\\IConsumer' => $baseDir . '/lib/public/Activity/IConsumer.php',
'OCP\\Activity\\IEvent' => $baseDir . '/lib/public/Activity/IEvent.php',
+ 'OCP\\Activity\\IEventMerger' => $baseDir . '/lib/public/Activity/IEventMerger.php',
'OCP\\Activity\\IExtension' => $baseDir . '/lib/public/Activity/IExtension.php',
+ 'OCP\\Activity\\IFilter' => $baseDir . '/lib/public/Activity/IFilter.php',
'OCP\\Activity\\IManager' => $baseDir . '/lib/public/Activity/IManager.php',
+ 'OCP\\Activity\\IProvider' => $baseDir . '/lib/public/Activity/IProvider.php',
+ 'OCP\\Activity\\ISetting' => $baseDir . '/lib/public/Activity/ISetting.php',
'OCP\\App' => $baseDir . '/lib/public/App.php',
'OCP\\AppFramework\\ApiController' => $baseDir . '/lib/public/AppFramework/ApiController.php',
'OCP\\AppFramework\\App' => $baseDir . '/lib/public/AppFramework/App.php',
@@ -47,10 +51,15 @@ return array(
'OCP\\AppFramework\\QueryException' => $baseDir . '/lib/public/AppFramework/QueryException.php',
'OCP\\AppFramework\\Utility\\IControllerMethodReflector' => $baseDir . '/lib/public/AppFramework/Utility/IControllerMethodReflector.php',
'OCP\\AppFramework\\Utility\\ITimeFactory' => $baseDir . '/lib/public/AppFramework/Utility/ITimeFactory.php',
+ 'OCP\\App\\AppPathNotFoundException' => $baseDir . '/lib/public/App/AppPathNotFoundException.php',
'OCP\\App\\IAppManager' => $baseDir . '/lib/public/App/IAppManager.php',
'OCP\\App\\ManagerEvent' => $baseDir . '/lib/public/App/ManagerEvent.php',
+ 'OCP\\Authentication\\Exceptions\\CredentialsUnavailableException' => $baseDir . '/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php',
'OCP\\Authentication\\IApacheBackend' => $baseDir . '/lib/public/Authentication/IApacheBackend.php',
+ 'OCP\\Authentication\\LoginCredentials\\ICredentials' => $baseDir . '/lib/public/Authentication/LoginCredentials/ICredentials.php',
+ 'OCP\\Authentication\\LoginCredentials\\IStore' => $baseDir . '/lib/public/Authentication/LoginCredentials/IStore.php',
'OCP\\Authentication\\TwoFactorAuth\\IProvider' => $baseDir . '/lib/public/Authentication/TwoFactorAuth/IProvider.php',
+ 'OCP\\Authentication\\TwoFactorAuth\\TwoFactorException' => $baseDir . '/lib/public/Authentication/TwoFactorAuth/TwoFactorException.php',
'OCP\\AutoloadNotAllowedException' => $baseDir . '/lib/public/AutoloadNotAllowedException.php',
'OCP\\BackgroundJob' => $baseDir . '/lib/public/BackgroundJob.php',
'OCP\\BackgroundJob\\IJob' => $baseDir . '/lib/public/BackgroundJob/IJob.php',
@@ -102,6 +111,7 @@ return array(
'OCP\\Files\\Config\\IMountProvider' => $baseDir . '/lib/public/Files/Config/IMountProvider.php',
'OCP\\Files\\Config\\IMountProviderCollection' => $baseDir . '/lib/public/Files/Config/IMountProviderCollection.php',
'OCP\\Files\\Config\\IUserMountCache' => $baseDir . '/lib/public/Files/Config/IUserMountCache.php',
+ 'OCP\\Files\\EmptyFileNameException' => $baseDir . '/lib/public/Files/EmptyFileNameException.php',
'OCP\\Files\\EntityTooLargeException' => $baseDir . '/lib/public/Files/EntityTooLargeException.php',
'OCP\\Files\\File' => $baseDir . '/lib/public/Files/File.php',
'OCP\\Files\\FileInfo' => $baseDir . '/lib/public/Files/FileInfo.php',
@@ -115,6 +125,7 @@ return array(
'OCP\\Files\\IRootFolder' => $baseDir . '/lib/public/Files/IRootFolder.php',
'OCP\\Files\\InvalidCharacterInPathException' => $baseDir . '/lib/public/Files/InvalidCharacterInPathException.php',
'OCP\\Files\\InvalidContentException' => $baseDir . '/lib/public/Files/InvalidContentException.php',
+ 'OCP\\Files\\InvalidDirectoryException' => $baseDir . '/lib/public/Files/InvalidDirectoryException.php',
'OCP\\Files\\InvalidPathException' => $baseDir . '/lib/public/Files/InvalidPathException.php',
'OCP\\Files\\LockNotAcquiredException' => $baseDir . '/lib/public/Files/LockNotAcquiredException.php',
'OCP\\Files\\Mount\\IMountManager' => $baseDir . '/lib/public/Files/Mount/IMountManager.php',
@@ -123,6 +134,9 @@ return array(
'OCP\\Files\\NotEnoughSpaceException' => $baseDir . '/lib/public/Files/NotEnoughSpaceException.php',
'OCP\\Files\\NotFoundException' => $baseDir . '/lib/public/Files/NotFoundException.php',
'OCP\\Files\\NotPermittedException' => $baseDir . '/lib/public/Files/NotPermittedException.php',
+ 'OCP\\Files\\Notify\\IChange' => $baseDir . '/lib/public/Files/Notify/IChange.php',
+ 'OCP\\Files\\Notify\\INotifyHandler' => $baseDir . '/lib/public/Files/Notify/INotifyHandler.php',
+ 'OCP\\Files\\Notify\\IRenameChange' => $baseDir . '/lib/public/Files/Notify/IRenameChange.php',
'OCP\\Files\\ObjectStore\\IObjectStore' => $baseDir . '/lib/public/Files/ObjectStore/IObjectStore.php',
'OCP\\Files\\ReservedWordException' => $baseDir . '/lib/public/Files/ReservedWordException.php',
'OCP\\Files\\SimpleFS\\ISimpleFile' => $baseDir . '/lib/public/Files/SimpleFS/ISimpleFile.php',
@@ -157,7 +171,6 @@ return array(
'OCP\\IDBConnection' => $baseDir . '/lib/public/IDBConnection.php',
'OCP\\IDateTimeFormatter' => $baseDir . '/lib/public/IDateTimeFormatter.php',
'OCP\\IDateTimeZone' => $baseDir . '/lib/public/IDateTimeZone.php',
- 'OCP\\IDb' => $baseDir . '/lib/public/IDb.php',
'OCP\\IEventSource' => $baseDir . '/lib/public/IEventSource.php',
'OCP\\IGroup' => $baseDir . '/lib/public/IGroup.php',
'OCP\\IGroupManager' => $baseDir . '/lib/public/IGroupManager.php',
@@ -201,6 +214,7 @@ return array(
'OCP\\PreConditionNotMetException' => $baseDir . '/lib/public/PreConditionNotMetException.php',
'OCP\\Preview\\IProvider' => $baseDir . '/lib/public/Preview/IProvider.php',
'OCP\\Response' => $baseDir . '/lib/public/Response.php',
+ 'OCP\\RichObjectStrings\\Definitions' => $baseDir . '/lib/public/RichObjectStrings/Definitions.php',
'OCP\\RichObjectStrings\\IValidator' => $baseDir . '/lib/public/RichObjectStrings/IValidator.php',
'OCP\\RichObjectStrings\\InvalidObjectExeption' => $baseDir . '/lib/public/RichObjectStrings/InvalidObjectExeption.php',
'OCP\\Route\\IRoute' => $baseDir . '/lib/public/Route/IRoute.php',
@@ -217,6 +231,7 @@ return array(
'OCP\\Security\\ISecureRandom' => $baseDir . '/lib/public/Security/ISecureRandom.php',
'OCP\\Security\\StringUtils' => $baseDir . '/lib/public/Security/StringUtils.php',
'OCP\\Session\\Exceptions\\SessionNotAvailableException' => $baseDir . '/lib/public/Session/Exceptions/SessionNotAvailableException.php',
+ 'OCP\\Settings\\IIconSection' => $baseDir . '/lib/public/Settings/IIconSection.php',
'OCP\\Settings\\IManager' => $baseDir . '/lib/public/Settings/IManager.php',
'OCP\\Settings\\ISection' => $baseDir . '/lib/public/Settings/ISection.php',
'OCP\\Settings\\ISettings' => $baseDir . '/lib/public/Settings/ISettings.php',
@@ -247,13 +262,17 @@ return array(
'OCP\\WorkflowEngine\\ICheck' => $baseDir . '/lib/public/WorkflowEngine/ICheck.php',
'OCP\\WorkflowEngine\\IManager' => $baseDir . '/lib/public/WorkflowEngine/IManager.php',
'OCP\\WorkflowEngine\\IOperation' => $baseDir . '/lib/public/WorkflowEngine/IOperation.php',
+ 'OC\\Accounts\\AccountManager' => $baseDir . '/lib/private/Accounts/AccountManager.php',
+ 'OC\\Accounts\\Hooks' => $baseDir . '/lib/private/Accounts/Hooks.php',
'OC\\Activity\\Event' => $baseDir . '/lib/private/Activity/Event.php',
+ 'OC\\Activity\\EventMerger' => $baseDir . '/lib/private/Activity/EventMerger.php',
+ 'OC\\Activity\\LegacyFilter' => $baseDir . '/lib/private/Activity/LegacyFilter.php',
+ 'OC\\Activity\\LegacySetting' => $baseDir . '/lib/private/Activity/LegacySetting.php',
'OC\\Activity\\Manager' => $baseDir . '/lib/private/Activity/Manager.php',
'OC\\AllConfig' => $baseDir . '/lib/private/AllConfig.php',
'OC\\AppConfig' => $baseDir . '/lib/private/AppConfig.php',
'OC\\AppFramework\\App' => $baseDir . '/lib/private/AppFramework/App.php',
'OC\\AppFramework\\Core\\API' => $baseDir . '/lib/private/AppFramework/Core/API.php',
- 'OC\\AppFramework\\Db\\Db' => $baseDir . '/lib/private/AppFramework/Db/Db.php',
'OC\\AppFramework\\DependencyInjection\\DIContainer' => $baseDir . '/lib/private/AppFramework/DependencyInjection/DIContainer.php',
'OC\\AppFramework\\Http' => $baseDir . '/lib/private/AppFramework/Http.php',
'OC\\AppFramework\\Http\\Dispatcher' => $baseDir . '/lib/private/AppFramework/Http/Dispatcher.php',
@@ -308,6 +327,8 @@ return array(
'OC\\Authentication\\Exceptions\\PasswordlessTokenException' => $baseDir . '/lib/private/Authentication/Exceptions/PasswordlessTokenException.php',
'OC\\Authentication\\Exceptions\\TwoFactorAuthRequiredException' => $baseDir . '/lib/private/Authentication/Exceptions/TwoFactorAuthRequiredException.php',
'OC\\Authentication\\Exceptions\\UserAlreadyLoggedInException' => $baseDir . '/lib/private/Authentication/Exceptions/UserAlreadyLoggedInException.php',
+ 'OC\\Authentication\\LoginCredentials\\Credentials' => $baseDir . '/lib/private/Authentication/LoginCredentials/Credentials.php',
+ 'OC\\Authentication\\LoginCredentials\\Store' => $baseDir . '/lib/private/Authentication/LoginCredentials/Store.php',
'OC\\Authentication\\Token\\DefaultToken' => $baseDir . '/lib/private/Authentication/Token/DefaultToken.php',
'OC\\Authentication\\Token\\DefaultTokenCleanupJob' => $baseDir . '/lib/private/Authentication/Token/DefaultTokenCleanupJob.php',
'OC\\Authentication\\Token\\DefaultTokenMapper' => $baseDir . '/lib/private/Authentication/Token/DefaultTokenMapper.php',
@@ -409,6 +430,7 @@ return array(
'OC\\Core\\Command\\User\\ResetPassword' => $baseDir . '/core/Command/User/ResetPassword.php',
'OC\\Core\\Command\\User\\Setting' => $baseDir . '/core/Command/User/Setting.php',
'OC\\Core\\Controller\\AvatarController' => $baseDir . '/core/Controller/AvatarController.php',
+ 'OC\\Core\\Controller\\CssController' => $baseDir . '/core/Controller/CssController.php',
'OC\\Core\\Controller\\LoginController' => $baseDir . '/core/Controller/LoginController.php',
'OC\\Core\\Controller\\LostController' => $baseDir . '/core/Controller/LostController.php',
'OC\\Core\\Controller\\OCJSController' => $baseDir . '/core/Controller/OCJSController.php',
@@ -513,10 +535,15 @@ return array(
'OC\\Files\\Node\\NonExistingFile' => $baseDir . '/lib/private/Files/Node/NonExistingFile.php',
'OC\\Files\\Node\\NonExistingFolder' => $baseDir . '/lib/private/Files/Node/NonExistingFolder.php',
'OC\\Files\\Node\\Root' => $baseDir . '/lib/private/Files/Node/Root.php',
+ 'OC\\Files\\Notify\\Change' => $baseDir . '/lib/private/Files/Notify/Change.php',
+ 'OC\\Files\\Notify\\RenameChange' => $baseDir . '/lib/private/Files/Notify/RenameChange.php',
'OC\\Files\\ObjectStore\\HomeObjectStoreStorage' => $baseDir . '/lib/private/Files/ObjectStore/HomeObjectStoreStorage.php',
'OC\\Files\\ObjectStore\\Mapper' => $baseDir . '/lib/private/Files/ObjectStore/Mapper.php',
'OC\\Files\\ObjectStore\\NoopScanner' => $baseDir . '/lib/private/Files/ObjectStore/NoopScanner.php',
'OC\\Files\\ObjectStore\\ObjectStoreStorage' => $baseDir . '/lib/private/Files/ObjectStore/ObjectStoreStorage.php',
+ 'OC\\Files\\ObjectStore\\S3' => $baseDir . '/lib/private/Files/ObjectStore/S3.php',
+ 'OC\\Files\\ObjectStore\\S3ConnectionTrait' => $baseDir . '/lib/private/Files/ObjectStore/S3ConnectionTrait.php',
+ 'OC\\Files\\ObjectStore\\StorageObjectStore' => $baseDir . '/lib/private/Files/ObjectStore/StorageObjectStore.php',
'OC\\Files\\ObjectStore\\Swift' => $baseDir . '/lib/private/Files/ObjectStore/Swift.php',
'OC\\Files\\SimpleFS\\SimpleFile' => $baseDir . '/lib/private/Files/SimpleFS/SimpleFile.php',
'OC\\Files\\SimpleFS\\SimpleFolder' => $baseDir . '/lib/private/Files/SimpleFS/SimpleFolder.php',
@@ -539,11 +566,8 @@ return array(
'OC\\Files\\Storage\\Wrapper\\PermissionsMask' => $baseDir . '/lib/private/Files/Storage/Wrapper/PermissionsMask.php',
'OC\\Files\\Storage\\Wrapper\\Quota' => $baseDir . '/lib/private/Files/Storage/Wrapper/Quota.php',
'OC\\Files\\Storage\\Wrapper\\Wrapper' => $baseDir . '/lib/private/Files/Storage/Wrapper/Wrapper.php',
- 'OC\\Files\\Stream\\Close' => $baseDir . '/lib/private/Files/Stream/Close.php',
- 'OC\\Files\\Stream\\Dir' => $baseDir . '/lib/private/Files/Stream/Dir.php',
'OC\\Files\\Stream\\Encryption' => $baseDir . '/lib/private/Files/Stream/Encryption.php',
'OC\\Files\\Stream\\Quota' => $baseDir . '/lib/private/Files/Stream/Quota.php',
- 'OC\\Files\\Stream\\StaticStream' => $baseDir . '/lib/private/Files/Stream/StaticStream.php',
'OC\\Files\\Type\\Detection' => $baseDir . '/lib/private/Files/Type/Detection.php',
'OC\\Files\\Type\\Loader' => $baseDir . '/lib/private/Files/Type/Loader.php',
'OC\\Files\\Type\\TemplateManager' => $baseDir . '/lib/private/Files/Type/TemplateManager.php',
@@ -593,7 +617,6 @@ return array(
'OC\\Log\\Syslog' => $baseDir . '/lib/private/Log/Syslog.php',
'OC\\Mail\\Mailer' => $baseDir . '/lib/private/Mail/Mailer.php',
'OC\\Mail\\Message' => $baseDir . '/lib/private/Mail/Message.php',
- 'OC\\Memcache\\APC' => $baseDir . '/lib/private/Memcache/APC.php',
'OC\\Memcache\\APCu' => $baseDir . '/lib/private/Memcache/APCu.php',
'OC\\Memcache\\ArrayCache' => $baseDir . '/lib/private/Memcache/ArrayCache.php',
'OC\\Memcache\\CADTrait' => $baseDir . '/lib/private/Memcache/CADTrait.php',
@@ -615,11 +638,9 @@ return array(
'OC\\Notification\\Notification' => $baseDir . '/lib/private/Notification/Notification.php',
'OC\\OCS\\CoreCapabilities' => $baseDir . '/lib/private/OCS/CoreCapabilities.php',
'OC\\OCS\\Exception' => $baseDir . '/lib/private/OCS/Exception.php',
- 'OC\\OCS\\Person' => $baseDir . '/lib/private/OCS/Person.php',
'OC\\OCS\\PrivateData' => $baseDir . '/lib/private/OCS/PrivateData.php',
'OC\\OCS\\Provider' => $baseDir . '/lib/private/OCS/Provider.php',
'OC\\OCS\\Result' => $baseDir . '/lib/private/OCS/Result.php',
- 'OC\\Preview' => $baseDir . '/lib/private/Preview.php',
'OC\\PreviewManager' => $baseDir . '/lib/private/PreviewManager.php',
'OC\\PreviewNotAvailableException' => $baseDir . '/lib/private/PreviewNotAvailableException.php',
'OC\\Preview\\BMP' => $baseDir . '/lib/private/Preview/BMP.php',
@@ -655,7 +676,6 @@ return array(
'OC\\Repair' => $baseDir . '/lib/private/Repair.php',
'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php',
'OC\\Repair\\AssetCache' => $baseDir . '/lib/private/Repair/AssetCache.php',
- 'OC\\Repair\\AvatarPermissions' => $baseDir . '/lib/private/Repair/AvatarPermissions.php',
'OC\\Repair\\CleanTags' => $baseDir . '/lib/private/Repair/CleanTags.php',
'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php',
'OC\\Repair\\DropOldJobs' => $baseDir . '/lib/private/Repair/DropOldJobs.php',
@@ -663,15 +683,17 @@ return array(
'OC\\Repair\\FillETags' => $baseDir . '/lib/private/Repair/FillETags.php',
'OC\\Repair\\InnoDB' => $baseDir . '/lib/private/Repair/InnoDB.php',
'OC\\Repair\\MoveUpdaterStepFile' => $baseDir . '/lib/private/Repair/MoveUpdaterStepFile.php',
+ 'OC\\Repair\\NC11\\CleanPreviews' => $baseDir . '/lib/private/Repair/NC11/CleanPreviews.php',
+ 'OC\\Repair\\NC11\\CleanPreviewsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php',
+ 'OC\\Repair\\NC11\\FixMountStorages' => $baseDir . '/lib/private/Repair/NC11/FixMountStorages.php',
'OC\\Repair\\NC11\\MoveAvatars' => $baseDir . '/lib/private/Repair/NC11/MoveAvatars.php',
- 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php',
+ 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php',
'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php',
'OC\\Repair\\Preview' => $baseDir . '/lib/private/Repair/Preview.php',
'OC\\Repair\\RemoveGetETagEntries' => $baseDir . '/lib/private/Repair/RemoveGetETagEntries.php',
'OC\\Repair\\RemoveOldShares' => $baseDir . '/lib/private/Repair/RemoveOldShares.php',
'OC\\Repair\\RemoveRootShares' => $baseDir . '/lib/private/Repair/RemoveRootShares.php',
'OC\\Repair\\RepairInvalidShares' => $baseDir . '/lib/private/Repair/RepairInvalidShares.php',
- 'OC\\Repair\\RepairLegacyStorages' => $baseDir . '/lib/private/Repair/RepairLegacyStorages.php',
'OC\\Repair\\RepairMimeTypes' => $baseDir . '/lib/private/Repair/RepairMimeTypes.php',
'OC\\Repair\\RepairUnmergedShares' => $baseDir . '/lib/private/Repair/RepairUnmergedShares.php',
'OC\\Repair\\SearchLuceneTables' => $baseDir . '/lib/private/Repair/SearchLuceneTables.php',
@@ -702,6 +724,9 @@ return array(
'OC\\Security\\CredentialsManager' => $baseDir . '/lib/private/Security/CredentialsManager.php',
'OC\\Security\\Crypto' => $baseDir . '/lib/private/Security/Crypto.php',
'OC\\Security\\Hasher' => $baseDir . '/lib/private/Security/Hasher.php',
+ '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\\SecureRandom' => $baseDir . '/lib/private/Security/SecureRandom.php',
'OC\\Security\\TrustedDomainHelper' => $baseDir . '/lib/private/Security/TrustedDomainHelper.php',
'OC\\Server' => $baseDir . '/lib/private/Server.php',
@@ -715,8 +740,8 @@ return array(
'OC\\Session\\Session' => $baseDir . '/lib/private/Session/Session.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\\Logging' => $baseDir . '/lib/private/Settings/Admin/Logging.php',
'OC\\Settings\\Admin\\Server' => $baseDir . '/lib/private/Settings/Admin/Server.php',
+ 'OC\\Settings\\Admin\\ServerDevNotice' => $baseDir . '/lib/private/Settings/Admin/ServerDevNotice.php',
'OC\\Settings\\Admin\\Sharing' => $baseDir . '/lib/private/Settings/Admin/Sharing.php',
'OC\\Settings\\Admin\\TipsTricks' => $baseDir . '/lib/private/Settings/Admin/TipsTricks.php',
'OC\\Settings\\Application' => $baseDir . '/settings/Application.php',
@@ -730,9 +755,11 @@ return array(
'OC\\Settings\\Controller\\GroupsController' => $baseDir . '/settings/Controller/GroupsController.php',
'OC\\Settings\\Controller\\LogSettingsController' => $baseDir . '/settings/Controller/LogSettingsController.php',
'OC\\Settings\\Controller\\MailSettingsController' => $baseDir . '/settings/Controller/MailSettingsController.php',
+ '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\\Manager' => $baseDir . '/lib/private/Settings/Manager.php',
+ 'OC\\Settings\\Mapper' => $baseDir . '/lib/private/Settings/Mapper.php',
'OC\\Settings\\Middleware\\SubadminMiddleware' => $baseDir . '/settings/Middleware/SubadminMiddleware.php',
'OC\\Settings\\RemoveOrphaned' => $baseDir . '/lib/private/Settings/RemoveOrphaned.php',
'OC\\Settings\\Section' => $baseDir . '/lib/private/Settings/Section.php',
@@ -774,6 +801,7 @@ return array(
'OC\\Template\\JSResourceLocator' => $baseDir . '/lib/private/Template/JSResourceLocator.php',
'OC\\Template\\ResourceLocator' => $baseDir . '/lib/private/Template/ResourceLocator.php',
'OC\\Template\\ResourceNotFoundException' => $baseDir . '/lib/private/Template/ResourceNotFoundException.php',
+ 'OC\\Template\\SCSSCacher' => $baseDir . '/lib/private/Template/SCSSCacher.php',
'OC\\Template\\TemplateFileLocator' => $baseDir . '/lib/private/Template/TemplateFileLocator.php',
'OC\\URLGenerator' => $baseDir . '/lib/private/URLGenerator.php',
'OC\\Updater' => $baseDir . '/lib/private/Updater.php',
diff --git a/lib/composer/composer/autoload_real.php b/lib/composer/composer/autoload_real.php
index 43d67606954..b9f89d16ad7 100644
--- a/lib/composer/composer/autoload_real.php
+++ b/lib/composer/composer/autoload_real.php
@@ -23,7 +23,7 @@ class ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c', 'loadClassLoader'));
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 5b8356785bc..f8d360fec4b 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -39,8 +39,12 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\API' => __DIR__ . '/../../..' . '/lib/public/API.php',
'OCP\\Activity\\IConsumer' => __DIR__ . '/../../..' . '/lib/public/Activity/IConsumer.php',
'OCP\\Activity\\IEvent' => __DIR__ . '/../../..' . '/lib/public/Activity/IEvent.php',
+ 'OCP\\Activity\\IEventMerger' => __DIR__ . '/../../..' . '/lib/public/Activity/IEventMerger.php',
'OCP\\Activity\\IExtension' => __DIR__ . '/../../..' . '/lib/public/Activity/IExtension.php',
+ 'OCP\\Activity\\IFilter' => __DIR__ . '/../../..' . '/lib/public/Activity/IFilter.php',
'OCP\\Activity\\IManager' => __DIR__ . '/../../..' . '/lib/public/Activity/IManager.php',
+ 'OCP\\Activity\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Activity/IProvider.php',
+ 'OCP\\Activity\\ISetting' => __DIR__ . '/../../..' . '/lib/public/Activity/ISetting.php',
'OCP\\App' => __DIR__ . '/../../..' . '/lib/public/App.php',
'OCP\\AppFramework\\ApiController' => __DIR__ . '/../../..' . '/lib/public/AppFramework/ApiController.php',
'OCP\\AppFramework\\App' => __DIR__ . '/../../..' . '/lib/public/AppFramework/App.php',
@@ -77,10 +81,15 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\AppFramework\\QueryException' => __DIR__ . '/../../..' . '/lib/public/AppFramework/QueryException.php',
'OCP\\AppFramework\\Utility\\IControllerMethodReflector' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Utility/IControllerMethodReflector.php',
'OCP\\AppFramework\\Utility\\ITimeFactory' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Utility/ITimeFactory.php',
+ 'OCP\\App\\AppPathNotFoundException' => __DIR__ . '/../../..' . '/lib/public/App/AppPathNotFoundException.php',
'OCP\\App\\IAppManager' => __DIR__ . '/../../..' . '/lib/public/App/IAppManager.php',
'OCP\\App\\ManagerEvent' => __DIR__ . '/../../..' . '/lib/public/App/ManagerEvent.php',
+ 'OCP\\Authentication\\Exceptions\\CredentialsUnavailableException' => __DIR__ . '/../../..' . '/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php',
'OCP\\Authentication\\IApacheBackend' => __DIR__ . '/../../..' . '/lib/public/Authentication/IApacheBackend.php',
+ 'OCP\\Authentication\\LoginCredentials\\ICredentials' => __DIR__ . '/../../..' . '/lib/public/Authentication/LoginCredentials/ICredentials.php',
+ 'OCP\\Authentication\\LoginCredentials\\IStore' => __DIR__ . '/../../..' . '/lib/public/Authentication/LoginCredentials/IStore.php',
'OCP\\Authentication\\TwoFactorAuth\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Authentication/TwoFactorAuth/IProvider.php',
+ 'OCP\\Authentication\\TwoFactorAuth\\TwoFactorException' => __DIR__ . '/../../..' . '/lib/public/Authentication/TwoFactorAuth/TwoFactorException.php',
'OCP\\AutoloadNotAllowedException' => __DIR__ . '/../../..' . '/lib/public/AutoloadNotAllowedException.php',
'OCP\\BackgroundJob' => __DIR__ . '/../../..' . '/lib/public/BackgroundJob.php',
'OCP\\BackgroundJob\\IJob' => __DIR__ . '/../../..' . '/lib/public/BackgroundJob/IJob.php',
@@ -132,6 +141,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Files\\Config\\IMountProvider' => __DIR__ . '/../../..' . '/lib/public/Files/Config/IMountProvider.php',
'OCP\\Files\\Config\\IMountProviderCollection' => __DIR__ . '/../../..' . '/lib/public/Files/Config/IMountProviderCollection.php',
'OCP\\Files\\Config\\IUserMountCache' => __DIR__ . '/../../..' . '/lib/public/Files/Config/IUserMountCache.php',
+ 'OCP\\Files\\EmptyFileNameException' => __DIR__ . '/../../..' . '/lib/public/Files/EmptyFileNameException.php',
'OCP\\Files\\EntityTooLargeException' => __DIR__ . '/../../..' . '/lib/public/Files/EntityTooLargeException.php',
'OCP\\Files\\File' => __DIR__ . '/../../..' . '/lib/public/Files/File.php',
'OCP\\Files\\FileInfo' => __DIR__ . '/../../..' . '/lib/public/Files/FileInfo.php',
@@ -145,6 +155,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Files\\IRootFolder' => __DIR__ . '/../../..' . '/lib/public/Files/IRootFolder.php',
'OCP\\Files\\InvalidCharacterInPathException' => __DIR__ . '/../../..' . '/lib/public/Files/InvalidCharacterInPathException.php',
'OCP\\Files\\InvalidContentException' => __DIR__ . '/../../..' . '/lib/public/Files/InvalidContentException.php',
+ 'OCP\\Files\\InvalidDirectoryException' => __DIR__ . '/../../..' . '/lib/public/Files/InvalidDirectoryException.php',
'OCP\\Files\\InvalidPathException' => __DIR__ . '/../../..' . '/lib/public/Files/InvalidPathException.php',
'OCP\\Files\\LockNotAcquiredException' => __DIR__ . '/../../..' . '/lib/public/Files/LockNotAcquiredException.php',
'OCP\\Files\\Mount\\IMountManager' => __DIR__ . '/../../..' . '/lib/public/Files/Mount/IMountManager.php',
@@ -153,6 +164,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Files\\NotEnoughSpaceException' => __DIR__ . '/../../..' . '/lib/public/Files/NotEnoughSpaceException.php',
'OCP\\Files\\NotFoundException' => __DIR__ . '/../../..' . '/lib/public/Files/NotFoundException.php',
'OCP\\Files\\NotPermittedException' => __DIR__ . '/../../..' . '/lib/public/Files/NotPermittedException.php',
+ 'OCP\\Files\\Notify\\IChange' => __DIR__ . '/../../..' . '/lib/public/Files/Notify/IChange.php',
+ 'OCP\\Files\\Notify\\INotifyHandler' => __DIR__ . '/../../..' . '/lib/public/Files/Notify/INotifyHandler.php',
+ 'OCP\\Files\\Notify\\IRenameChange' => __DIR__ . '/../../..' . '/lib/public/Files/Notify/IRenameChange.php',
'OCP\\Files\\ObjectStore\\IObjectStore' => __DIR__ . '/../../..' . '/lib/public/Files/ObjectStore/IObjectStore.php',
'OCP\\Files\\ReservedWordException' => __DIR__ . '/../../..' . '/lib/public/Files/ReservedWordException.php',
'OCP\\Files\\SimpleFS\\ISimpleFile' => __DIR__ . '/../../..' . '/lib/public/Files/SimpleFS/ISimpleFile.php',
@@ -187,7 +201,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\IDBConnection' => __DIR__ . '/../../..' . '/lib/public/IDBConnection.php',
'OCP\\IDateTimeFormatter' => __DIR__ . '/../../..' . '/lib/public/IDateTimeFormatter.php',
'OCP\\IDateTimeZone' => __DIR__ . '/../../..' . '/lib/public/IDateTimeZone.php',
- 'OCP\\IDb' => __DIR__ . '/../../..' . '/lib/public/IDb.php',
'OCP\\IEventSource' => __DIR__ . '/../../..' . '/lib/public/IEventSource.php',
'OCP\\IGroup' => __DIR__ . '/../../..' . '/lib/public/IGroup.php',
'OCP\\IGroupManager' => __DIR__ . '/../../..' . '/lib/public/IGroupManager.php',
@@ -231,6 +244,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\PreConditionNotMetException' => __DIR__ . '/../../..' . '/lib/public/PreConditionNotMetException.php',
'OCP\\Preview\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Preview/IProvider.php',
'OCP\\Response' => __DIR__ . '/../../..' . '/lib/public/Response.php',
+ 'OCP\\RichObjectStrings\\Definitions' => __DIR__ . '/../../..' . '/lib/public/RichObjectStrings/Definitions.php',
'OCP\\RichObjectStrings\\IValidator' => __DIR__ . '/../../..' . '/lib/public/RichObjectStrings/IValidator.php',
'OCP\\RichObjectStrings\\InvalidObjectExeption' => __DIR__ . '/../../..' . '/lib/public/RichObjectStrings/InvalidObjectExeption.php',
'OCP\\Route\\IRoute' => __DIR__ . '/../../..' . '/lib/public/Route/IRoute.php',
@@ -247,6 +261,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Security\\ISecureRandom' => __DIR__ . '/../../..' . '/lib/public/Security/ISecureRandom.php',
'OCP\\Security\\StringUtils' => __DIR__ . '/../../..' . '/lib/public/Security/StringUtils.php',
'OCP\\Session\\Exceptions\\SessionNotAvailableException' => __DIR__ . '/../../..' . '/lib/public/Session/Exceptions/SessionNotAvailableException.php',
+ 'OCP\\Settings\\IIconSection' => __DIR__ . '/../../..' . '/lib/public/Settings/IIconSection.php',
'OCP\\Settings\\IManager' => __DIR__ . '/../../..' . '/lib/public/Settings/IManager.php',
'OCP\\Settings\\ISection' => __DIR__ . '/../../..' . '/lib/public/Settings/ISection.php',
'OCP\\Settings\\ISettings' => __DIR__ . '/../../..' . '/lib/public/Settings/ISettings.php',
@@ -277,13 +292,17 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\WorkflowEngine\\ICheck' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/ICheck.php',
'OCP\\WorkflowEngine\\IManager' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IManager.php',
'OCP\\WorkflowEngine\\IOperation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IOperation.php',
+ 'OC\\Accounts\\AccountManager' => __DIR__ . '/../../..' . '/lib/private/Accounts/AccountManager.php',
+ 'OC\\Accounts\\Hooks' => __DIR__ . '/../../..' . '/lib/private/Accounts/Hooks.php',
'OC\\Activity\\Event' => __DIR__ . '/../../..' . '/lib/private/Activity/Event.php',
+ 'OC\\Activity\\EventMerger' => __DIR__ . '/../../..' . '/lib/private/Activity/EventMerger.php',
+ 'OC\\Activity\\LegacyFilter' => __DIR__ . '/../../..' . '/lib/private/Activity/LegacyFilter.php',
+ 'OC\\Activity\\LegacySetting' => __DIR__ . '/../../..' . '/lib/private/Activity/LegacySetting.php',
'OC\\Activity\\Manager' => __DIR__ . '/../../..' . '/lib/private/Activity/Manager.php',
'OC\\AllConfig' => __DIR__ . '/../../..' . '/lib/private/AllConfig.php',
'OC\\AppConfig' => __DIR__ . '/../../..' . '/lib/private/AppConfig.php',
'OC\\AppFramework\\App' => __DIR__ . '/../../..' . '/lib/private/AppFramework/App.php',
'OC\\AppFramework\\Core\\API' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Core/API.php',
- 'OC\\AppFramework\\Db\\Db' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Db/Db.php',
'OC\\AppFramework\\DependencyInjection\\DIContainer' => __DIR__ . '/../../..' . '/lib/private/AppFramework/DependencyInjection/DIContainer.php',
'OC\\AppFramework\\Http' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Http.php',
'OC\\AppFramework\\Http\\Dispatcher' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Http/Dispatcher.php',
@@ -338,6 +357,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Authentication\\Exceptions\\PasswordlessTokenException' => __DIR__ . '/../../..' . '/lib/private/Authentication/Exceptions/PasswordlessTokenException.php',
'OC\\Authentication\\Exceptions\\TwoFactorAuthRequiredException' => __DIR__ . '/../../..' . '/lib/private/Authentication/Exceptions/TwoFactorAuthRequiredException.php',
'OC\\Authentication\\Exceptions\\UserAlreadyLoggedInException' => __DIR__ . '/../../..' . '/lib/private/Authentication/Exceptions/UserAlreadyLoggedInException.php',
+ 'OC\\Authentication\\LoginCredentials\\Credentials' => __DIR__ . '/../../..' . '/lib/private/Authentication/LoginCredentials/Credentials.php',
+ 'OC\\Authentication\\LoginCredentials\\Store' => __DIR__ . '/../../..' . '/lib/private/Authentication/LoginCredentials/Store.php',
'OC\\Authentication\\Token\\DefaultToken' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/DefaultToken.php',
'OC\\Authentication\\Token\\DefaultTokenCleanupJob' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/DefaultTokenCleanupJob.php',
'OC\\Authentication\\Token\\DefaultTokenMapper' => __DIR__ . '/../../..' . '/lib/private/Authentication/Token/DefaultTokenMapper.php',
@@ -439,6 +460,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Core\\Command\\User\\ResetPassword' => __DIR__ . '/../../..' . '/core/Command/User/ResetPassword.php',
'OC\\Core\\Command\\User\\Setting' => __DIR__ . '/../../..' . '/core/Command/User/Setting.php',
'OC\\Core\\Controller\\AvatarController' => __DIR__ . '/../../..' . '/core/Controller/AvatarController.php',
+ 'OC\\Core\\Controller\\CssController' => __DIR__ . '/../../..' . '/core/Controller/CssController.php',
'OC\\Core\\Controller\\LoginController' => __DIR__ . '/../../..' . '/core/Controller/LoginController.php',
'OC\\Core\\Controller\\LostController' => __DIR__ . '/../../..' . '/core/Controller/LostController.php',
'OC\\Core\\Controller\\OCJSController' => __DIR__ . '/../../..' . '/core/Controller/OCJSController.php',
@@ -543,10 +565,15 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Files\\Node\\NonExistingFile' => __DIR__ . '/../../..' . '/lib/private/Files/Node/NonExistingFile.php',
'OC\\Files\\Node\\NonExistingFolder' => __DIR__ . '/../../..' . '/lib/private/Files/Node/NonExistingFolder.php',
'OC\\Files\\Node\\Root' => __DIR__ . '/../../..' . '/lib/private/Files/Node/Root.php',
+ 'OC\\Files\\Notify\\Change' => __DIR__ . '/../../..' . '/lib/private/Files/Notify/Change.php',
+ 'OC\\Files\\Notify\\RenameChange' => __DIR__ . '/../../..' . '/lib/private/Files/Notify/RenameChange.php',
'OC\\Files\\ObjectStore\\HomeObjectStoreStorage' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/HomeObjectStoreStorage.php',
'OC\\Files\\ObjectStore\\Mapper' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/Mapper.php',
'OC\\Files\\ObjectStore\\NoopScanner' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/NoopScanner.php',
'OC\\Files\\ObjectStore\\ObjectStoreStorage' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/ObjectStoreStorage.php',
+ 'OC\\Files\\ObjectStore\\S3' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/S3.php',
+ 'OC\\Files\\ObjectStore\\S3ConnectionTrait' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/S3ConnectionTrait.php',
+ 'OC\\Files\\ObjectStore\\StorageObjectStore' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/StorageObjectStore.php',
'OC\\Files\\ObjectStore\\Swift' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/Swift.php',
'OC\\Files\\SimpleFS\\SimpleFile' => __DIR__ . '/../../..' . '/lib/private/Files/SimpleFS/SimpleFile.php',
'OC\\Files\\SimpleFS\\SimpleFolder' => __DIR__ . '/../../..' . '/lib/private/Files/SimpleFS/SimpleFolder.php',
@@ -569,11 +596,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Files\\Storage\\Wrapper\\PermissionsMask' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/Wrapper/PermissionsMask.php',
'OC\\Files\\Storage\\Wrapper\\Quota' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/Wrapper/Quota.php',
'OC\\Files\\Storage\\Wrapper\\Wrapper' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/Wrapper/Wrapper.php',
- 'OC\\Files\\Stream\\Close' => __DIR__ . '/../../..' . '/lib/private/Files/Stream/Close.php',
- 'OC\\Files\\Stream\\Dir' => __DIR__ . '/../../..' . '/lib/private/Files/Stream/Dir.php',
'OC\\Files\\Stream\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Files/Stream/Encryption.php',
'OC\\Files\\Stream\\Quota' => __DIR__ . '/../../..' . '/lib/private/Files/Stream/Quota.php',
- 'OC\\Files\\Stream\\StaticStream' => __DIR__ . '/../../..' . '/lib/private/Files/Stream/StaticStream.php',
'OC\\Files\\Type\\Detection' => __DIR__ . '/../../..' . '/lib/private/Files/Type/Detection.php',
'OC\\Files\\Type\\Loader' => __DIR__ . '/../../..' . '/lib/private/Files/Type/Loader.php',
'OC\\Files\\Type\\TemplateManager' => __DIR__ . '/../../..' . '/lib/private/Files/Type/TemplateManager.php',
@@ -623,7 +647,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Log\\Syslog' => __DIR__ . '/../../..' . '/lib/private/Log/Syslog.php',
'OC\\Mail\\Mailer' => __DIR__ . '/../../..' . '/lib/private/Mail/Mailer.php',
'OC\\Mail\\Message' => __DIR__ . '/../../..' . '/lib/private/Mail/Message.php',
- 'OC\\Memcache\\APC' => __DIR__ . '/../../..' . '/lib/private/Memcache/APC.php',
'OC\\Memcache\\APCu' => __DIR__ . '/../../..' . '/lib/private/Memcache/APCu.php',
'OC\\Memcache\\ArrayCache' => __DIR__ . '/../../..' . '/lib/private/Memcache/ArrayCache.php',
'OC\\Memcache\\CADTrait' => __DIR__ . '/../../..' . '/lib/private/Memcache/CADTrait.php',
@@ -645,11 +668,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Notification\\Notification' => __DIR__ . '/../../..' . '/lib/private/Notification/Notification.php',
'OC\\OCS\\CoreCapabilities' => __DIR__ . '/../../..' . '/lib/private/OCS/CoreCapabilities.php',
'OC\\OCS\\Exception' => __DIR__ . '/../../..' . '/lib/private/OCS/Exception.php',
- 'OC\\OCS\\Person' => __DIR__ . '/../../..' . '/lib/private/OCS/Person.php',
'OC\\OCS\\PrivateData' => __DIR__ . '/../../..' . '/lib/private/OCS/PrivateData.php',
'OC\\OCS\\Provider' => __DIR__ . '/../../..' . '/lib/private/OCS/Provider.php',
'OC\\OCS\\Result' => __DIR__ . '/../../..' . '/lib/private/OCS/Result.php',
- 'OC\\Preview' => __DIR__ . '/../../..' . '/lib/private/Preview.php',
'OC\\PreviewManager' => __DIR__ . '/../../..' . '/lib/private/PreviewManager.php',
'OC\\PreviewNotAvailableException' => __DIR__ . '/../../..' . '/lib/private/PreviewNotAvailableException.php',
'OC\\Preview\\BMP' => __DIR__ . '/../../..' . '/lib/private/Preview/BMP.php',
@@ -685,7 +706,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Repair' => __DIR__ . '/../../..' . '/lib/private/Repair.php',
'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php',
'OC\\Repair\\AssetCache' => __DIR__ . '/../../..' . '/lib/private/Repair/AssetCache.php',
- 'OC\\Repair\\AvatarPermissions' => __DIR__ . '/../../..' . '/lib/private/Repair/AvatarPermissions.php',
'OC\\Repair\\CleanTags' => __DIR__ . '/../../..' . '/lib/private/Repair/CleanTags.php',
'OC\\Repair\\Collation' => __DIR__ . '/../../..' . '/lib/private/Repair/Collation.php',
'OC\\Repair\\DropOldJobs' => __DIR__ . '/../../..' . '/lib/private/Repair/DropOldJobs.php',
@@ -693,15 +713,17 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Repair\\FillETags' => __DIR__ . '/../../..' . '/lib/private/Repair/FillETags.php',
'OC\\Repair\\InnoDB' => __DIR__ . '/../../..' . '/lib/private/Repair/InnoDB.php',
'OC\\Repair\\MoveUpdaterStepFile' => __DIR__ . '/../../..' . '/lib/private/Repair/MoveUpdaterStepFile.php',
+ 'OC\\Repair\\NC11\\CleanPreviews' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/CleanPreviews.php',
+ 'OC\\Repair\\NC11\\CleanPreviewsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php',
+ 'OC\\Repair\\NC11\\FixMountStorages' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/FixMountStorages.php',
'OC\\Repair\\NC11\\MoveAvatars' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatars.php',
- 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php',
+ 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php',
'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php',
'OC\\Repair\\Preview' => __DIR__ . '/../../..' . '/lib/private/Repair/Preview.php',
'OC\\Repair\\RemoveGetETagEntries' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveGetETagEntries.php',
'OC\\Repair\\RemoveOldShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveOldShares.php',
'OC\\Repair\\RemoveRootShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveRootShares.php',
'OC\\Repair\\RepairInvalidShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairInvalidShares.php',
- 'OC\\Repair\\RepairLegacyStorages' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairLegacyStorages.php',
'OC\\Repair\\RepairMimeTypes' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairMimeTypes.php',
'OC\\Repair\\RepairUnmergedShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairUnmergedShares.php',
'OC\\Repair\\SearchLuceneTables' => __DIR__ . '/../../..' . '/lib/private/Repair/SearchLuceneTables.php',
@@ -732,6 +754,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Security\\CredentialsManager' => __DIR__ . '/../../..' . '/lib/private/Security/CredentialsManager.php',
'OC\\Security\\Crypto' => __DIR__ . '/../../..' . '/lib/private/Security/Crypto.php',
'OC\\Security\\Hasher' => __DIR__ . '/../../..' . '/lib/private/Security/Hasher.php',
+ '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\\SecureRandom' => __DIR__ . '/../../..' . '/lib/private/Security/SecureRandom.php',
'OC\\Security\\TrustedDomainHelper' => __DIR__ . '/../../..' . '/lib/private/Security/TrustedDomainHelper.php',
'OC\\Server' => __DIR__ . '/../../..' . '/lib/private/Server.php',
@@ -745,8 +770,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Session\\Session' => __DIR__ . '/../../..' . '/lib/private/Session/Session.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\\Logging' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Logging.php',
'OC\\Settings\\Admin\\Server' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Server.php',
+ 'OC\\Settings\\Admin\\ServerDevNotice' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/ServerDevNotice.php',
'OC\\Settings\\Admin\\Sharing' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Sharing.php',
'OC\\Settings\\Admin\\TipsTricks' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/TipsTricks.php',
'OC\\Settings\\Application' => __DIR__ . '/../../..' . '/settings/Application.php',
@@ -760,9 +785,11 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Settings\\Controller\\GroupsController' => __DIR__ . '/../../..' . '/settings/Controller/GroupsController.php',
'OC\\Settings\\Controller\\LogSettingsController' => __DIR__ . '/../../..' . '/settings/Controller/LogSettingsController.php',
'OC\\Settings\\Controller\\MailSettingsController' => __DIR__ . '/../../..' . '/settings/Controller/MailSettingsController.php',
+ '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\\Manager' => __DIR__ . '/../../..' . '/lib/private/Settings/Manager.php',
+ 'OC\\Settings\\Mapper' => __DIR__ . '/../../..' . '/lib/private/Settings/Mapper.php',
'OC\\Settings\\Middleware\\SubadminMiddleware' => __DIR__ . '/../../..' . '/settings/Middleware/SubadminMiddleware.php',
'OC\\Settings\\RemoveOrphaned' => __DIR__ . '/../../..' . '/lib/private/Settings/RemoveOrphaned.php',
'OC\\Settings\\Section' => __DIR__ . '/../../..' . '/lib/private/Settings/Section.php',
@@ -804,6 +831,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Template\\JSResourceLocator' => __DIR__ . '/../../..' . '/lib/private/Template/JSResourceLocator.php',
'OC\\Template\\ResourceLocator' => __DIR__ . '/../../..' . '/lib/private/Template/ResourceLocator.php',
'OC\\Template\\ResourceNotFoundException' => __DIR__ . '/../../..' . '/lib/private/Template/ResourceNotFoundException.php',
+ 'OC\\Template\\SCSSCacher' => __DIR__ . '/../../..' . '/lib/private/Template/SCSSCacher.php',
'OC\\Template\\TemplateFileLocator' => __DIR__ . '/../../..' . '/lib/private/Template/TemplateFileLocator.php',
'OC\\URLGenerator' => __DIR__ . '/../../..' . '/lib/private/URLGenerator.php',
'OC\\Updater' => __DIR__ . '/../../..' . '/lib/private/Updater.php',
diff --git a/lib/l10n/bg_BG.js b/lib/l10n/bg_BG.js
new file mode 100644
index 00000000000..955d4e68742
--- /dev/null
+++ b/lib/l10n/bg_BG.js
@@ -0,0 +1,177 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "Неуспешен опит за запис в \"config\" папката!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Това може да бъде решено единствено като разрешиш на уеб сървъра да пише в config папката.",
+ "See %s" : "Вижте %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в config папката %s.",
+ "Sample configuration detected" : "Открита е примерна конфигурация",
+ "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" : "Усетено беше че примерната конфигурация е копирана. Това може да развли инсталацията ти и не се поддържа. Моля, прочети документацията преди да правиш промени на config.php",
+ "%1$s and %2$s" : "%1$s и %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s и %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s и %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s и %5$s",
+ "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
+ "PHP with a version lower than %s is required." : "Необходим е PHP с версия по-ниска от %s.",
+ "Following databases are supported: %s" : "Следните бази данни са поддържани: %s",
+ "The command line tool %s could not be found" : "Конзолната команда %s не може да бъде намерена",
+ "The library %s is not available." : "Библиотеката %s не е налична",
+ "Library %s with a version higher than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-висока от %s - налична версия %s. ",
+ "Library %s with a version lower than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-ниска от %s - налична версия %s. ",
+ "Following platforms are supported: %s" : "Поддържани са следните платформи: %s",
+ "Unknown filetype" : "Непознат тип файл",
+ "Invalid image" : "Невалидно изображение.",
+ "today" : "днес",
+ "yesterday" : "вчера",
+ "_%n day ago_::_%n days ago_" : ["преди %n ден","преди %n дни"],
+ "last month" : "миналия месец",
+ "_%n month ago_::_%n months ago_" : ["преди %n месец","преди %n месеца"],
+ "last year" : "миналата година",
+ "_%n year ago_::_%n years ago_" : ["преди %n година","преди %n години"],
+ "_%n hour ago_::_%n hours ago_" : ["преди %n час","преди %n часа"],
+ "_%n minute ago_::_%n minutes ago_" : ["преди %n минута","преди %n минути"],
+ "seconds ago" : "преди секунди",
+ "File name contains at least one invalid character" : "Името на файла съдържа поне един невалиден символ",
+ "File name is too long" : "Името на файла е твърде дълго",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Настройки на сървъра",
+ "Sharing" : "Споделяне",
+ "Additional settings" : "Допълнителни настройки",
+ "%s enter the database username and name." : "%s въведете потребителско име и име за базата данни",
+ "%s enter the database username." : "%s въведете потребител за базата данни.",
+ "%s enter the database name." : "%s въведи име на базата данни.",
+ "%s you may not use dots in the database name" : "%s, не може да ползваш точки в името на базата данни.",
+ "Oracle username and/or password not valid" : "Невалидно Oracle потребителско име и/или парола.",
+ "DB Error: \"%s\"" : "Грешка в базата данни: \"%s\".",
+ "Offending command was: \"%s\"" : "Проблемната команда беше: \"%s\".",
+ "You need to enter either an existing account or the administrator." : "Необходимо е да въведеш съществуващ профил или като администратор.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Проблемната команда беше: \"%s\", име: %s, парола: %s.",
+ "PostgreSQL username and/or password not valid" : "Невалидно PostgreSQL потребителско име и/или парола.",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвайте го на свой собствен риск!",
+ "For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля, помисли дали не бихте желали да използваште GNU/Linux сървър.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Моля, премахтене настройката за open_basedir от вашия php.ini или преминете към 64-битово PHP.",
+ "Set an admin username." : "Задайте потребителско име за администратор.",
+ "Set an admin password." : "Задай парола за администратор.",
+ "Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s",
+ "%s shared »%s« with you" : "%s сподели »%s« с теб",
+ "%s via %s" : "%s чрез %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Неуспешно споделяне на %s , защото сървъра не позволява споделяне от тип $i.",
+ "Sharing %s failed, because the file does not exist" : "Неуспешно споделяне на %s, защото файлът не съществува.",
+ "You are not allowed to share %s" : "Не ти е разрешено да споделяш %s.",
+ "Sharing %s failed, because the user %s does not exist" : "Неуспешно споделяне на %s, защото потребител %s не съществува.",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Неуспешно споделяне на %s, защото %s не е член никоя от групите, в които е %s.",
+ "Sharing %s failed, because this item is already shared with %s" : "Неуспешно споделяне на %s, защото това съдържание е вече споделено с %s.",
+ "Sharing %s failed, because the group %s does not exist" : "Неупешно споделяне на %s, защото групата %s не съществува.",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Неуспешно споделяне на %s, защото %s не е член на групата %s.",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Трябва да зададеш парола, за да създадеш общодостъпен линк за споделяне, само защитени с пароли линкове са разрешени.",
+ "Sharing %s failed, because sharing with links is not allowed" : "Неуспешно споделяне на %s, защото споделянето посредством връзки не е разрешено.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Неуспешно споделяне на на %s, не може бъде намерено %s. Може би сървъра в момента е недостъпен.",
+ "Share type %s is not valid for %s" : "Споделянето на тип %s не валидно за %s.",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Неуспешна промяна на правата за достъп за %s, защото промените надвишават правата на достъп дадени на %s.",
+ "Setting permissions for %s failed, because the item was not found" : "Неуспешна промяна на правата за достъп за %s, защото съдържанието не е открито.",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Неуспешно задаване на дата на изтичане. Споделни папки или файлове не могат да изтичат по-късно от %s след като са били споделени",
+ "Cannot set expiration date. Expiration date is in the past" : "Неуспешно задаване на дата на изтичане. Датата на изтичане е в миналото",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Споделянето на сървърния %s трябва да поддържа OCP\\Share_Backend интерфейс.",
+ "Sharing backend %s not found" : "Споделянето на сървърния %s не е открито.",
+ "Sharing backend for %s not found" : "Споделянето на сървъра за %s не е открито.",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Неуспешно споделяне на %s, защото промените надвишават правата на достъп дадени на %s.",
+ "Sharing %s failed, because resharing is not allowed" : "Неуспешно споделяне на %s, защото повторно споделяне не е разрешено.",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Неуспешно споделяне на %s, защото не е открит първоизточникът на %s, за да бъде споделяне по сървъра.",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Неуспешно споделяне на %s, защото файлът не може да бъде намерен в кеша.",
+ "Could not find category \"%s\"" : "Невъзможно откриване на категорията \"%s\".",
+ "Sunday" : "неделя",
+ "Monday" : "понеделник",
+ "Tuesday" : "вторник",
+ "Wednesday" : "сряда",
+ "Thursday" : "четвъртък",
+ "Friday" : "петък",
+ "Saturday" : "събота",
+ "Sun." : "нед",
+ "Mon." : "пон",
+ "Tue." : "вт",
+ "Wed." : "ср",
+ "Thu." : "чет",
+ "Fri." : "пет",
+ "Sat." : "съб",
+ "Su" : "нд",
+ "Mo" : "пн",
+ "We" : "ср",
+ "Th" : "чт",
+ "Fr" : "пт",
+ "Sa" : "сб",
+ "January" : "януари",
+ "February" : "февруару",
+ "March" : "март",
+ "April" : "април",
+ "May" : "май",
+ "June" : "юни",
+ "July" : "юли",
+ "August" : "август",
+ "September" : "септември",
+ "October" : "октомври",
+ "November" : "ноември",
+ "December" : "декември",
+ "Jan." : "яну",
+ "Feb." : "фев",
+ "Mar." : "мар",
+ "Apr." : "апр",
+ "May." : "май",
+ "Jun." : "юни",
+ "Jul." : "юли",
+ "Aug." : "авг",
+ "Sep." : "сеп",
+ "Oct." : "окт",
+ "Nov." : "ное",
+ "Dec." : "дек",
+ "Apps" : "Приложения",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Потребителските имена може да съдържат следните знаци: \"a-z\", \"A-Z\", \"0-9\" и \"_.@-'\"",
+ "A valid username must be provided" : "Трябва да въведете валидно потребителско.",
+ "Username contains whitespace at the beginning or at the end" : "Потребителското име започва или завършва с интервал.",
+ "A valid password must be provided" : "Трябва да въведете валидна парола.",
+ "The username is already being used" : "Потребителското име е вече заето.",
+ "Help" : "Помощ",
+ "Personal" : "Лични",
+ "Users" : "Потребители",
+ "Admin" : "Админ",
+ "No app name specified" : "Не е зададено име на преложението",
+ "a safe home for all your data" : "безопасен дом за всички ваши данни",
+ "Can't read file" : "Файлът не може да бъде прочетен",
+ "Application is not enabled" : "Приложението не е включено",
+ "Authentication error" : "Проблем с идентификацията",
+ "Token expired. Please reload page." : "Изтекла сесия. Моля, презареди страницата.",
+ "Unknown user" : "Непознат потребител",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Липсват инсталирани драйвери за бази данни(sqlite, mysql или postgresql).",
+ "Cannot write into \"config\" directory" : "Неуспешен опит за запис в \"config\" папката.",
+ "Cannot write into \"apps\" directory" : "Писането в папка приложения не е възможно",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в app папката %s или като изключи магазина за приложения в config файла.",
+ "Cannot create \"data\" directory (%s)" : "Неуспешен опит за създаване на \"data\" папката (%s).",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Правата за достъп обикновено могат да бъдат оправени когато %s даде права на уеб сървъра да пише в root папката %s.",
+ "Setting locale to %s failed" : "Неуспешно задаване на %s като настройка език-държава.",
+ "Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.",
+ "Please ask your server administrator to install the module." : "Моля, помолете вашия администратор да инсталира модула.",
+ "PHP module %s not installed." : "PHP модулът %s не е инсталиран.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Това може да се дължи на cache/accelerator като Zend OPache или eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP модулите са инсталирани, но все още се обявяват като липсващи?",
+ "Please ask your server administrator to restart the web server." : "Моля, поискай от своя администратор да рестартира уеб сървъра.",
+ "PostgreSQL >= 9 required" : "Изисква се PostgreSQL >= 9",
+ "Please upgrade your database version" : "Моля, обнови базата данни.",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Моля, променете правата за достъп на 0770, за да не може директорията да бъде видяна от други потребители.",
+ "Data directory (%s) is readable by other users" : "Data папката (%s) може да бъде разгледана от други потребители",
+ "Data directory (%s) is invalid" : "Data папката (%s) e невалидна",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Моля, увери се, че data папката съдържа файл \".ocdata\" в себе си.",
+ "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\".",
+ "App directory already exists" : "Папката на приложението вече съществува.",
+ "Can't create app folder. Please fix permissions. %s" : "Папката не може да бъде създадена. Моля, коригирайте правата. %s",
+ "No source specified when installing app" : "Не е посочен източник при инсталацията на приложението.",
+ "No href specified when installing app from http" : "Липсва съдържанието на връзката за инсталиране на приложението",
+ "No path specified when installing app from local file" : "Не е зададен пътя до локалния файл за инсталиране на приложението.",
+ "Archives of type %s are not supported" : "Архиви от тип %s не се подържат",
+ "Failed to open archive when installing app" : "Неуспешно отваряне на архив по време на инсталацията на приложението.",
+ "App does not provide an info.xml file" : "Приложенението не съдържа файла info.xml",
+ "App can't be installed because of not allowed code in the App" : "Приложението няма да бъде инсталирано, защото съдържа неразрешен код.",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Приложението няма да бъде инсталирано, защото съдържа <shipped>true</shipped>, таг който не е разрешен за не shiped приложения.",
+ "Recommended" : "Препоръчано",
+ "Storage not available" : "Хранилището не е налично"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/bg_BG.json b/lib/l10n/bg_BG.json
new file mode 100644
index 00000000000..1f2bcdf9d33
--- /dev/null
+++ b/lib/l10n/bg_BG.json
@@ -0,0 +1,175 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "Неуспешен опит за запис в \"config\" папката!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Това може да бъде решено единствено като разрешиш на уеб сървъра да пише в config папката.",
+ "See %s" : "Вижте %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в config папката %s.",
+ "Sample configuration detected" : "Открита е примерна конфигурация",
+ "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" : "Усетено беше че примерната конфигурация е копирана. Това може да развли инсталацията ти и не се поддържа. Моля, прочети документацията преди да правиш промени на config.php",
+ "%1$s and %2$s" : "%1$s и %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s и %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s и %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s и %5$s",
+ "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
+ "PHP with a version lower than %s is required." : "Необходим е PHP с версия по-ниска от %s.",
+ "Following databases are supported: %s" : "Следните бази данни са поддържани: %s",
+ "The command line tool %s could not be found" : "Конзолната команда %s не може да бъде намерена",
+ "The library %s is not available." : "Библиотеката %s не е налична",
+ "Library %s with a version higher than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-висока от %s - налична версия %s. ",
+ "Library %s with a version lower than %s is required - available version %s." : "Необходима е библиотеката %s с версия по-ниска от %s - налична версия %s. ",
+ "Following platforms are supported: %s" : "Поддържани са следните платформи: %s",
+ "Unknown filetype" : "Непознат тип файл",
+ "Invalid image" : "Невалидно изображение.",
+ "today" : "днес",
+ "yesterday" : "вчера",
+ "_%n day ago_::_%n days ago_" : ["преди %n ден","преди %n дни"],
+ "last month" : "миналия месец",
+ "_%n month ago_::_%n months ago_" : ["преди %n месец","преди %n месеца"],
+ "last year" : "миналата година",
+ "_%n year ago_::_%n years ago_" : ["преди %n година","преди %n години"],
+ "_%n hour ago_::_%n hours ago_" : ["преди %n час","преди %n часа"],
+ "_%n minute ago_::_%n minutes ago_" : ["преди %n минута","преди %n минути"],
+ "seconds ago" : "преди секунди",
+ "File name contains at least one invalid character" : "Името на файла съдържа поне един невалиден символ",
+ "File name is too long" : "Името на файла е твърде дълго",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Настройки на сървъра",
+ "Sharing" : "Споделяне",
+ "Additional settings" : "Допълнителни настройки",
+ "%s enter the database username and name." : "%s въведете потребителско име и име за базата данни",
+ "%s enter the database username." : "%s въведете потребител за базата данни.",
+ "%s enter the database name." : "%s въведи име на базата данни.",
+ "%s you may not use dots in the database name" : "%s, не може да ползваш точки в името на базата данни.",
+ "Oracle username and/or password not valid" : "Невалидно Oracle потребителско име и/или парола.",
+ "DB Error: \"%s\"" : "Грешка в базата данни: \"%s\".",
+ "Offending command was: \"%s\"" : "Проблемната команда беше: \"%s\".",
+ "You need to enter either an existing account or the administrator." : "Необходимо е да въведеш съществуващ профил или като администратор.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Проблемната команда беше: \"%s\", име: %s, парола: %s.",
+ "PostgreSQL username and/or password not valid" : "Невалидно PostgreSQL потребителско име и/или парола.",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвайте го на свой собствен риск!",
+ "For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля, помисли дали не бихте желали да използваште GNU/Linux сървър.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Моля, премахтене настройката за open_basedir от вашия php.ini или преминете към 64-битово PHP.",
+ "Set an admin username." : "Задайте потребителско име за администратор.",
+ "Set an admin password." : "Задай парола за администратор.",
+ "Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s",
+ "%s shared »%s« with you" : "%s сподели »%s« с теб",
+ "%s via %s" : "%s чрез %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Неуспешно споделяне на %s , защото сървъра не позволява споделяне от тип $i.",
+ "Sharing %s failed, because the file does not exist" : "Неуспешно споделяне на %s, защото файлът не съществува.",
+ "You are not allowed to share %s" : "Не ти е разрешено да споделяш %s.",
+ "Sharing %s failed, because the user %s does not exist" : "Неуспешно споделяне на %s, защото потребител %s не съществува.",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Неуспешно споделяне на %s, защото %s не е член никоя от групите, в които е %s.",
+ "Sharing %s failed, because this item is already shared with %s" : "Неуспешно споделяне на %s, защото това съдържание е вече споделено с %s.",
+ "Sharing %s failed, because the group %s does not exist" : "Неупешно споделяне на %s, защото групата %s не съществува.",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Неуспешно споделяне на %s, защото %s не е член на групата %s.",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Трябва да зададеш парола, за да създадеш общодостъпен линк за споделяне, само защитени с пароли линкове са разрешени.",
+ "Sharing %s failed, because sharing with links is not allowed" : "Неуспешно споделяне на %s, защото споделянето посредством връзки не е разрешено.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Неуспешно споделяне на на %s, не може бъде намерено %s. Може би сървъра в момента е недостъпен.",
+ "Share type %s is not valid for %s" : "Споделянето на тип %s не валидно за %s.",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Неуспешна промяна на правата за достъп за %s, защото промените надвишават правата на достъп дадени на %s.",
+ "Setting permissions for %s failed, because the item was not found" : "Неуспешна промяна на правата за достъп за %s, защото съдържанието не е открито.",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Неуспешно задаване на дата на изтичане. Споделни папки или файлове не могат да изтичат по-късно от %s след като са били споделени",
+ "Cannot set expiration date. Expiration date is in the past" : "Неуспешно задаване на дата на изтичане. Датата на изтичане е в миналото",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Споделянето на сървърния %s трябва да поддържа OCP\\Share_Backend интерфейс.",
+ "Sharing backend %s not found" : "Споделянето на сървърния %s не е открито.",
+ "Sharing backend for %s not found" : "Споделянето на сървъра за %s не е открито.",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Неуспешно споделяне на %s, защото промените надвишават правата на достъп дадени на %s.",
+ "Sharing %s failed, because resharing is not allowed" : "Неуспешно споделяне на %s, защото повторно споделяне не е разрешено.",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Неуспешно споделяне на %s, защото не е открит първоизточникът на %s, за да бъде споделяне по сървъра.",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Неуспешно споделяне на %s, защото файлът не може да бъде намерен в кеша.",
+ "Could not find category \"%s\"" : "Невъзможно откриване на категорията \"%s\".",
+ "Sunday" : "неделя",
+ "Monday" : "понеделник",
+ "Tuesday" : "вторник",
+ "Wednesday" : "сряда",
+ "Thursday" : "четвъртък",
+ "Friday" : "петък",
+ "Saturday" : "събота",
+ "Sun." : "нед",
+ "Mon." : "пон",
+ "Tue." : "вт",
+ "Wed." : "ср",
+ "Thu." : "чет",
+ "Fri." : "пет",
+ "Sat." : "съб",
+ "Su" : "нд",
+ "Mo" : "пн",
+ "We" : "ср",
+ "Th" : "чт",
+ "Fr" : "пт",
+ "Sa" : "сб",
+ "January" : "януари",
+ "February" : "февруару",
+ "March" : "март",
+ "April" : "април",
+ "May" : "май",
+ "June" : "юни",
+ "July" : "юли",
+ "August" : "август",
+ "September" : "септември",
+ "October" : "октомври",
+ "November" : "ноември",
+ "December" : "декември",
+ "Jan." : "яну",
+ "Feb." : "фев",
+ "Mar." : "мар",
+ "Apr." : "апр",
+ "May." : "май",
+ "Jun." : "юни",
+ "Jul." : "юли",
+ "Aug." : "авг",
+ "Sep." : "сеп",
+ "Oct." : "окт",
+ "Nov." : "ное",
+ "Dec." : "дек",
+ "Apps" : "Приложения",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Потребителските имена може да съдържат следните знаци: \"a-z\", \"A-Z\", \"0-9\" и \"_.@-'\"",
+ "A valid username must be provided" : "Трябва да въведете валидно потребителско.",
+ "Username contains whitespace at the beginning or at the end" : "Потребителското име започва или завършва с интервал.",
+ "A valid password must be provided" : "Трябва да въведете валидна парола.",
+ "The username is already being used" : "Потребителското име е вече заето.",
+ "Help" : "Помощ",
+ "Personal" : "Лични",
+ "Users" : "Потребители",
+ "Admin" : "Админ",
+ "No app name specified" : "Не е зададено име на преложението",
+ "a safe home for all your data" : "безопасен дом за всички ваши данни",
+ "Can't read file" : "Файлът не може да бъде прочетен",
+ "Application is not enabled" : "Приложението не е включено",
+ "Authentication error" : "Проблем с идентификацията",
+ "Token expired. Please reload page." : "Изтекла сесия. Моля, презареди страницата.",
+ "Unknown user" : "Непознат потребител",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Липсват инсталирани драйвери за бази данни(sqlite, mysql или postgresql).",
+ "Cannot write into \"config\" directory" : "Неуспешен опит за запис в \"config\" папката.",
+ "Cannot write into \"apps\" directory" : "Писането в папка приложения не е възможно",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в app папката %s или като изключи магазина за приложения в config файла.",
+ "Cannot create \"data\" directory (%s)" : "Неуспешен опит за създаване на \"data\" папката (%s).",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Правата за достъп обикновено могат да бъдат оправени когато %s даде права на уеб сървъра да пише в root папката %s.",
+ "Setting locale to %s failed" : "Неуспешно задаване на %s като настройка език-държава.",
+ "Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.",
+ "Please ask your server administrator to install the module." : "Моля, помолете вашия администратор да инсталира модула.",
+ "PHP module %s not installed." : "PHP модулът %s не е инсталиран.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Това може да се дължи на cache/accelerator като Zend OPache или eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP модулите са инсталирани, но все още се обявяват като липсващи?",
+ "Please ask your server administrator to restart the web server." : "Моля, поискай от своя администратор да рестартира уеб сървъра.",
+ "PostgreSQL >= 9 required" : "Изисква се PostgreSQL >= 9",
+ "Please upgrade your database version" : "Моля, обнови базата данни.",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Моля, променете правата за достъп на 0770, за да не може директорията да бъде видяна от други потребители.",
+ "Data directory (%s) is readable by other users" : "Data папката (%s) може да бъде разгледана от други потребители",
+ "Data directory (%s) is invalid" : "Data папката (%s) e невалидна",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Моля, увери се, че data папката съдържа файл \".ocdata\" в себе си.",
+ "Could not obtain lock type %d on \"%s\"." : "Неуспешен опит за ексклузивен достъп от типa %d върху \"%s\".",
+ "App directory already exists" : "Папката на приложението вече съществува.",
+ "Can't create app folder. Please fix permissions. %s" : "Папката не може да бъде създадена. Моля, коригирайте правата. %s",
+ "No source specified when installing app" : "Не е посочен източник при инсталацията на приложението.",
+ "No href specified when installing app from http" : "Липсва съдържанието на връзката за инсталиране на приложението",
+ "No path specified when installing app from local file" : "Не е зададен пътя до локалния файл за инсталиране на приложението.",
+ "Archives of type %s are not supported" : "Архиви от тип %s не се подържат",
+ "Failed to open archive when installing app" : "Неуспешно отваряне на архив по време на инсталацията на приложението.",
+ "App does not provide an info.xml file" : "Приложенението не съдържа файла info.xml",
+ "App can't be installed because of not allowed code in the App" : "Приложението няма да бъде инсталирано, защото съдържа неразрешен код.",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Приложението няма да бъде инсталирано, защото съдържа <shipped>true</shipped>, таг който не е разрешен за не shiped приложения.",
+ "Recommended" : "Препоръчано",
+ "Storage not available" : "Хранилището не е налично"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js
index 9d879da5219..ff0b5705cea 100644
--- a/lib/l10n/cs_CZ.js
+++ b/lib/l10n/cs_CZ.js
@@ -8,6 +8,10 @@ OC.L10N.register(
"The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Soubory aplikace %$1s nebyly řádně nahrazeny. Ujistěte se, že je to verze kompatibilní se serverem.",
"Sample configuration detected" : "Byla detekována vzorová konfigurace",
"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" : "Pravděpodobně byla zkopírována konfigurační nastavení ze vzorových souborů. Toto není podporováno a může poškodit vaši instalaci. Nahlédněte prosím do dokumentace před prováděním změn v souboru config.php",
+ "%1$s and %2$s" : "%1$s a %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s a %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s a %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s a %5$s",
"PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
"PHP with a version lower than %s is required." : "Je vyžadováno PHP ve verzi nižší než %s.",
"%sbit or higher PHP required." : "Je vyžadováno PHP %sbit nebo vyšší.",
@@ -224,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Doporučené",
"Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows není podporována",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost server migrovat.",
- "Storage not available" : "Úložiště není dostupné",
- "ownCloud %s or higher is required." : "Vyžadován ownCloud %s nebo vyšší.",
- "ownCloud %s or lower is required." : "Vyžadován ownCloud %s nebo nižší.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Aplikaci \"%s\" nelze nainstalovat, protože není kompatibilní s touto verzí Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Aplikaci nelze nainstalovat, protože není kompatibilní s touto verzí Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Aplikace nemůže být nainstalována, protože verze uvedená v info.xml/version nesouhlasí s verzí hlášenou z úložiště aplikací.",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tip: Aktualizaci můžete urychlit manuálním spuštěním následujícího SQL příkazu: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost migrovat server jako takový. Linuxové balíčky i jednoduše použitelné obrazy virtuálních strojů lze nalézt na <a href=\"%s\">%s</a>. Pro migraci stávajících instalací na Linux můžete nalézt tipy a migrační skript v <a href=\"%s\">naší dokumentaci</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\">nastavením přístupových práv webového serveru pro zápis do kořenového adresáře</a>."
+ "Storage not available" : "Úložiště není dostupné"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json
index 97a1242aeef..ae66663d49c 100644
--- a/lib/l10n/cs_CZ.json
+++ b/lib/l10n/cs_CZ.json
@@ -6,6 +6,10 @@
"The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Soubory aplikace %$1s nebyly řádně nahrazeny. Ujistěte se, že je to verze kompatibilní se serverem.",
"Sample configuration detected" : "Byla detekována vzorová konfigurace",
"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" : "Pravděpodobně byla zkopírována konfigurační nastavení ze vzorových souborů. Toto není podporováno a může poškodit vaši instalaci. Nahlédněte prosím do dokumentace před prováděním změn v souboru config.php",
+ "%1$s and %2$s" : "%1$s a %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s a %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s a %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s a %5$s",
"PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
"PHP with a version lower than %s is required." : "Je vyžadováno PHP ve verzi nižší než %s.",
"%sbit or higher PHP required." : "Je vyžadováno PHP %sbit nebo vyšší.",
@@ -222,14 +226,6 @@
"Recommended" : "Doporučené",
"Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows není podporována",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost server migrovat.",
- "Storage not available" : "Úložiště není dostupné",
- "ownCloud %s or higher is required." : "Vyžadován ownCloud %s nebo vyšší.",
- "ownCloud %s or lower is required." : "Vyžadován ownCloud %s nebo nižší.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Aplikaci \"%s\" nelze nainstalovat, protože není kompatibilní s touto verzí Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Aplikaci nelze nainstalovat, protože není kompatibilní s touto verzí Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Aplikace nemůže být nainstalována, protože verze uvedená v info.xml/version nesouhlasí s verzí hlášenou z úložiště aplikací.",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tip: Aktualizaci můžete urychlit manuálním spuštěním následujícího SQL příkazu: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost migrovat server jako takový. Linuxové balíčky i jednoduše použitelné obrazy virtuálních strojů lze nalézt na <a href=\"%s\">%s</a>. Pro migraci stávajících instalací na Linux můžete nalézt tipy a migrační skript v <a href=\"%s\">naší dokumentaci</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\">nastavením přístupových práv webového serveru pro zápis do kořenového adresáře</a>."
+ "Storage not available" : "Úložiště není dostupné"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index f5f30f70768..79a8ee25510 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Empfohlen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehein Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren.",
- "Storage not available" : "Speicher nicht verfügbar",
- "ownCloud %s or higher is required." : "ownCloud %s oder höher ist erforderlich.",
- "ownCloud %s or lower is required." : "ownCloud %s oder niedriger ist erforderlich.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Die App kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kann nicht installiert werden, da die in info.xml/version angegebene Version von der vom App-Store berichteten abweicht",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: Du kannst die Aktualisierung beschleunigen indem Du folgenden SQL-Befehl manuell ausführst: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehe Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren. Finde Linux-Pakete sowie einfach bereitzustellende Images für virtuelle Maschinen unter <a href=\"%s\">%s</a>. Zur Migration existierender Installationen auf Linux findest du in unserer <a href=\"%s\">our Dokumentation</a> einige Tipps und Migrationsscripts.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>."
+ "Storage not available" : "Speicher nicht verfügbar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index f3bf892579e..180680c2b97 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -226,14 +226,6 @@
"Recommended" : "Empfohlen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehein Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren.",
- "Storage not available" : "Speicher nicht verfügbar",
- "ownCloud %s or higher is required." : "ownCloud %s oder höher ist erforderlich.",
- "ownCloud %s or lower is required." : "ownCloud %s oder niedriger ist erforderlich.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Die App kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kann nicht installiert werden, da die in info.xml/version angegebene Version von der vom App-Store berichteten abweicht",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: Du kannst die Aktualisierung beschleunigen indem Du folgenden SQL-Befehl manuell ausführst: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehe Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren. Finde Linux-Pakete sowie einfach bereitzustellende Images für virtuelle Maschinen unter <a href=\"%s\">%s</a>. Zur Migration existierender Installationen auf Linux findest du in unserer <a href=\"%s\">our Dokumentation</a> einige Tipps und Migrationsscripts.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>."
+ "Storage not available" : "Speicher nicht verfügbar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index db3c63c2a32..794e2648b2b 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -53,7 +53,7 @@ OC.L10N.register(
"%s enter the database username." : "%s geben Sie den Datenbank-Benutzernamen an.",
"%s enter the database name." : "%s geben Sie den Datenbank-Namen an.",
"%s you may not use dots in the database name" : "%s Der Datenbank-Name darf keine Punkte enthalten",
- "Oracle connection could not be established" : "Die Oracle-Verbindung konnte nicht aufgebaut werden.",
+ "Oracle connection could not be established" : "Die Oracle-Verbindung konnte nicht hergestellt werden.",
"Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig",
"DB Error: \"%s\"" : "DB-Fehler: „%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: „%s“",
@@ -65,7 +65,7 @@ OC.L10N.register(
"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." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und open_basedir in der Datei php.ini konfiguriert worden ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Bitte entfernen Sie die open_basedir-Einstellung in Ihrer php.ini oder wechseln Sie zu 64-Bit-PHP.",
"Set an admin username." : "Einen Administrator-Benutzernamen setzen.",
- "Set an admin password." : "Setze Administrator Passwort",
+ "Set an admin password." : "Ein Administrator-Passwort setzen.",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.",
"Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID",
"%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt",
@@ -153,7 +153,7 @@ OC.L10N.register(
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Nur die folgenden Zeichen sind im Benutzernamen erlaubt: „a-z“, „A-Z“, „0-9“, and „_.@-'“",
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"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 angegeben werden",
+ "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",
@@ -167,17 +167,17 @@ OC.L10N.register(
"App '%s' could not be installed!" : "'%s' - App konnte nicht installiert werden!",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, da die folgenden Abhängigkeiten nicht erfüllt sind: %s",
"a safe home for all your data" : "ein sicherer Ort für all Ihre Daten",
- "File is currently busy, please try again later" : "Die Datei ist zur Zeit in Benutzung, bitte versuchen Sie es später noch einmal",
+ "File is currently busy, please try again later" : "Die Datei ist in Benutzung, bitte versuchen Sie es später noch einmal",
"Can't read file" : "Datei kann nicht gelesen werden",
"Application is not enabled" : "Die Anwendung ist nicht aktiviert",
"Authentication error" : "Authentifizierungsfehler",
"Token expired. Please reload page." : "Token abgelaufen. Bitte laden Sie die Seite neu.",
"Unknown user" : "Unbekannter Benutzer",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MYSQL oder PostgreSQL) installiert.",
- "Cannot write into \"config\" directory" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich",
- "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich",
+ "Cannot write into \"config\" directory" : "Schreiben in das „config“-Verzeichnis ist nicht möglich",
+ "Cannot write into \"apps\" directory" : "Schreiben in das „apps“-Verzeichnis ist nicht möglich",
"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.",
- "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.",
"Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen",
@@ -217,7 +217,7 @@ OC.L10N.register(
"No path specified when installing app from local file" : "Bei der Installation der Applikation aus einer lokalen Datei wurde kein Pfad angegeben",
"Archives of type %s are not supported" : "Archive des Typs %s werden nicht unterstützt.",
"Failed to open archive when installing app" : "Das Archiv konnte bei der Installation der Applikation nicht geöffnet werden",
- "App does not provide an info.xml file" : "Die Applikation enthält keine info.xml Datei",
+ "App does not provide an info.xml file" : "Die Anwendung enthält keine info.xml Datei",
"App cannot be installed because appinfo file cannot be read." : "Die Anwendung kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur konnte nicht überprüft werden. Bitte kontaktieren Sie den App Entwickler und überprüfen Sie Ihren Administrationsbereich.",
"App can't be installed because of not allowed code in the App" : "Die App kann nicht installiert werden, weil sie unerlaubten Code enthält",
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Empfohlen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie in Betracht einen Linux Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren.",
- "Storage not available" : "Speicher nicht verfügbar",
- "ownCloud %s or higher is required." : "ownCloud %s oder neuer erforderlich",
- "ownCloud %s or lower is required." : "ownCloud %s oder älter erforderlich",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Die App kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kann nicht installiert werden, da die in info.xml/version angegebene Version von der vom App-Store berichteten abweicht",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: Sie können die Aktualisierung beschleunigen indem Sie folgenden SQL-Befehl manuell ausführen: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren. Finden Sie Linux-Pakete sowie einfach bereitzustellende Images für virtuelle Maschinen unter <a href=\"%s\">%s</a>. Zur Migration existierender Installationen auf Linux finden Sie in unserer <a href=\"%s\">unserer Dokumentation</a> einige Tipps und Migrationsscripts.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" > Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>."
+ "Storage not available" : "Speicher nicht verfügbar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index 1df6854ae9b..6228b9645ac 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -51,7 +51,7 @@
"%s enter the database username." : "%s geben Sie den Datenbank-Benutzernamen an.",
"%s enter the database name." : "%s geben Sie den Datenbank-Namen an.",
"%s you may not use dots in the database name" : "%s Der Datenbank-Name darf keine Punkte enthalten",
- "Oracle connection could not be established" : "Die Oracle-Verbindung konnte nicht aufgebaut werden.",
+ "Oracle connection could not be established" : "Die Oracle-Verbindung konnte nicht hergestellt werden.",
"Oracle username and/or password not valid" : "Oracle-Benutzername und/oder -Passwort ungültig",
"DB Error: \"%s\"" : "DB-Fehler: „%s“",
"Offending command was: \"%s\"" : "Fehlerhafter Befehl war: „%s“",
@@ -63,7 +63,7 @@
"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." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und open_basedir in der Datei php.ini konfiguriert worden ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Bitte entfernen Sie die open_basedir-Einstellung in Ihrer php.ini oder wechseln Sie zu 64-Bit-PHP.",
"Set an admin username." : "Einen Administrator-Benutzernamen setzen.",
- "Set an admin password." : "Setze Administrator Passwort",
+ "Set an admin password." : "Ein Administrator-Passwort setzen.",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.",
"Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID",
"%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt",
@@ -151,7 +151,7 @@
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Nur die folgenden Zeichen sind im Benutzernamen erlaubt: „a-z“, „A-Z“, „0-9“, and „_.@-'“",
"A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden",
"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 angegeben werden",
+ "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",
@@ -165,17 +165,17 @@
"App '%s' could not be installed!" : "'%s' - App konnte nicht installiert werden!",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, da die folgenden Abhängigkeiten nicht erfüllt sind: %s",
"a safe home for all your data" : "ein sicherer Ort für all Ihre Daten",
- "File is currently busy, please try again later" : "Die Datei ist zur Zeit in Benutzung, bitte versuchen Sie es später noch einmal",
+ "File is currently busy, please try again later" : "Die Datei ist in Benutzung, bitte versuchen Sie es später noch einmal",
"Can't read file" : "Datei kann nicht gelesen werden",
"Application is not enabled" : "Die Anwendung ist nicht aktiviert",
"Authentication error" : "Authentifizierungsfehler",
"Token expired. Please reload page." : "Token abgelaufen. Bitte laden Sie die Seite neu.",
"Unknown user" : "Unbekannter Benutzer",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Keine Datenbanktreiber (SQLite, MYSQL oder PostgreSQL) installiert.",
- "Cannot write into \"config\" directory" : "Das Schreiben in das „config“-Verzeichnis ist nicht möglich",
- "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich",
+ "Cannot write into \"config\" directory" : "Schreiben in das „config“-Verzeichnis ist nicht möglich",
+ "Cannot write into \"apps\" directory" : "Schreiben in das „apps“-Verzeichnis ist nicht möglich",
"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.",
- "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
+ "Cannot create \"data\" directory (%s)" : "Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.",
"Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen",
@@ -215,7 +215,7 @@
"No path specified when installing app from local file" : "Bei der Installation der Applikation aus einer lokalen Datei wurde kein Pfad angegeben",
"Archives of type %s are not supported" : "Archive des Typs %s werden nicht unterstützt.",
"Failed to open archive when installing app" : "Das Archiv konnte bei der Installation der Applikation nicht geöffnet werden",
- "App does not provide an info.xml file" : "Die Applikation enthält keine info.xml Datei",
+ "App does not provide an info.xml file" : "Die Anwendung enthält keine info.xml Datei",
"App cannot be installed because appinfo file cannot be read." : "Die Anwendung kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur konnte nicht überprüft werden. Bitte kontaktieren Sie den App Entwickler und überprüfen Sie Ihren Administrationsbereich.",
"App can't be installed because of not allowed code in the App" : "Die App kann nicht installiert werden, weil sie unerlaubten Code enthält",
@@ -226,14 +226,6 @@
"Recommended" : "Empfohlen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie in Betracht einen Linux Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren.",
- "Storage not available" : "Speicher nicht verfügbar",
- "ownCloud %s or higher is required." : "ownCloud %s oder neuer erforderlich",
- "ownCloud %s or lower is required." : "ownCloud %s oder älter erforderlich",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Die App kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kann nicht installiert werden, da die in info.xml/version angegebene Version von der vom App-Store berichteten abweicht",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: Sie können die Aktualisierung beschleunigen indem Sie folgenden SQL-Befehl manuell ausführen: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren. Finden Sie Linux-Pakete sowie einfach bereitzustellende Images für virtuelle Maschinen unter <a href=\"%s\">%s</a>. Zur Migration existierender Installationen auf Linux finden Sie in unserer <a href=\"%s\">unserer Dokumentation</a> einige Tipps und Migrationsscripts.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" > Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>."
+ "Storage not available" : "Speicher nicht verfügbar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 6119a9cebb1..80756b58b5c 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Recomendado",
"Microsoft Windows Platform is not supported" : "La plataforma Microsoft Windows no está soportada",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Ejecutar el servidor Nextcloud en la plataforma MIcrosoft Windows no está soportado. Sugerimos usar un servidor Linux en una máquina virtual si no existe la opción de migrar el propio servidor.",
- "Storage not available" : "Almacenamiento no disponible",
- "ownCloud %s or higher is required." : "Se necesita la versión %s o superior.",
- "ownCloud %s or lower is required." : "Se necesita la versión %s o inferior.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "La aplicación \"%s\" no se puede instalar porque no es compatible con esta versión de Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "La aplicación no se puede instalar porque no es compatible con esta versión de Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "La App no se puede instalar debido a que la versión de info.xml no es la misma que la versión informada por la app store.",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Truco: Se puede acelerar la actualización ejecutando este comando SQL de forma manual: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Ejecutar el servidor Nextcloud en la plataforma Microsoft Windows no está soportado. Sugerimos usar una servidor Linux en una máquina virtual si no existe la opción de migrar el propio servidor. Se encuentran paquetes, así como imágenes en de máquina virtual fáciles de desplegar en <a href=\"%s\">%s</a>. Para migrar instalaciones existentes a Linux se pueden encontrar algunas pistas y un script de migración en <a href=\"%s\">nuestra documentación</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Esto normalmente puede arreglarse <a href=\"%s\" target=\"_blank\">dando al servidor web acceso de escritura al directorio raíz</a>."
+ "Storage not available" : "Almacenamiento no disponible"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index 0f9d83569b7..2ea8a94e8dd 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -226,14 +226,6 @@
"Recommended" : "Recomendado",
"Microsoft Windows Platform is not supported" : "La plataforma Microsoft Windows no está soportada",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Ejecutar el servidor Nextcloud en la plataforma MIcrosoft Windows no está soportado. Sugerimos usar un servidor Linux en una máquina virtual si no existe la opción de migrar el propio servidor.",
- "Storage not available" : "Almacenamiento no disponible",
- "ownCloud %s or higher is required." : "Se necesita la versión %s o superior.",
- "ownCloud %s or lower is required." : "Se necesita la versión %s o inferior.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "La aplicación \"%s\" no se puede instalar porque no es compatible con esta versión de Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "La aplicación no se puede instalar porque no es compatible con esta versión de Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "La App no se puede instalar debido a que la versión de info.xml no es la misma que la versión informada por la app store.",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Truco: Se puede acelerar la actualización ejecutando este comando SQL de forma manual: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Ejecutar el servidor Nextcloud en la plataforma Microsoft Windows no está soportado. Sugerimos usar una servidor Linux en una máquina virtual si no existe la opción de migrar el propio servidor. Se encuentran paquetes, así como imágenes en de máquina virtual fáciles de desplegar en <a href=\"%s\">%s</a>. Para migrar instalaciones existentes a Linux se pueden encontrar algunas pistas y un script de migración en <a href=\"%s\">nuestra documentación</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Esto normalmente puede arreglarse <a href=\"%s\" target=\"_blank\">dando al servidor web acceso de escritura al directorio raíz</a>."
+ "Storage not available" : "Almacenamiento no disponible"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index c938c8e8ab7..96d77556deb 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -57,7 +57,7 @@ OC.L10N.register(
"Oracle username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base Oracle non valide(s)",
"DB Error: \"%s\"" : "Erreur de la base de données : \"%s\"",
"Offending command was: \"%s\"" : "La requête en cause est : \"%s\"",
- "You need to enter either an existing account or the administrator." : "Vous devez spécifier le nom d'un compte existant, ou celui de l'administrateur.",
+ "You need to enter either an existing account or the administrator." : "Vous devez indiquer un compte existant ou celui de l'administrateur.",
"Offending command was: \"%s\", name: %s, password: %s" : "La requête en cause est : \"%s\", nom : %s, mot de passe : %s",
"PostgreSQL username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base PostgreSQL non valide(s)",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X n'est pas pris en charge et %s ne fonctionnera pas correctement sur cette plate-forme. Son utilisation est à vos risques et périls !",
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Recommandée",
"Microsoft Windows Platform is not supported" : "La plate-forme Microsoft Windows n'est pas prise en charge.",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'exécution de Nextcloud Server sur une plateforme Microsoft Windows n'est pas supportée. Nous suggérons d'utilier un serveur Linux dans une machine virtuelle si vous n'avez pas la possibilité de migrer le serveur lui-même.",
- "Storage not available" : "Support de stockage non disponible",
- "ownCloud %s or higher is required." : "Nextcloud %s ou supérieur est requis.",
- "ownCloud %s or lower is required." : "Nextcloud %s ou inférieur est requis.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "L'application \"%s\" ne peut être installée car elle n'est pas compatible avec cette version de Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "L'application ne peut être installée car elle n'est pas compatible avec cette version de Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "L'application ne peut être installée car la version dans info.xml/version n'est pas la même que la version signalée sur l'app store",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Aide : Vous pouvez accélérer la mise à jour en exécutant manuellement la commande SQL suivante : ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Exécuter Nextcloud Server sur une plateforme Microsoft Windows n'est pas supporté. Nous vous suggérons d'utiliser un serveur Linux dans une machine virtuelle si vous n'avez pas l'option de migrer votre serveur. Trouver les paquets Linux aussi facilement que de déployer une image de machine virtuelle sur <a href=\"%s\">%s</a>. Pour migrer vos installations existantes sur Linux, vous pouvez trouver plein d'astuces et un script de migration sur <a href=\"%s\">notre documentation</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu en <a href=\"%s\" target=\"_blank\">donnant les accès en écriture dans le répertoire root</a>."
+ "Storage not available" : "Support de stockage non disponible"
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index 09e0cfb9c46..a9b89108b70 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -55,7 +55,7 @@
"Oracle username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base Oracle non valide(s)",
"DB Error: \"%s\"" : "Erreur de la base de données : \"%s\"",
"Offending command was: \"%s\"" : "La requête en cause est : \"%s\"",
- "You need to enter either an existing account or the administrator." : "Vous devez spécifier le nom d'un compte existant, ou celui de l'administrateur.",
+ "You need to enter either an existing account or the administrator." : "Vous devez indiquer un compte existant ou celui de l'administrateur.",
"Offending command was: \"%s\", name: %s, password: %s" : "La requête en cause est : \"%s\", nom : %s, mot de passe : %s",
"PostgreSQL username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base PostgreSQL non valide(s)",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X n'est pas pris en charge et %s ne fonctionnera pas correctement sur cette plate-forme. Son utilisation est à vos risques et périls !",
@@ -226,14 +226,6 @@
"Recommended" : "Recommandée",
"Microsoft Windows Platform is not supported" : "La plate-forme Microsoft Windows n'est pas prise en charge.",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'exécution de Nextcloud Server sur une plateforme Microsoft Windows n'est pas supportée. Nous suggérons d'utilier un serveur Linux dans une machine virtuelle si vous n'avez pas la possibilité de migrer le serveur lui-même.",
- "Storage not available" : "Support de stockage non disponible",
- "ownCloud %s or higher is required." : "Nextcloud %s ou supérieur est requis.",
- "ownCloud %s or lower is required." : "Nextcloud %s ou inférieur est requis.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "L'application \"%s\" ne peut être installée car elle n'est pas compatible avec cette version de Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "L'application ne peut être installée car elle n'est pas compatible avec cette version de Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "L'application ne peut être installée car la version dans info.xml/version n'est pas la même que la version signalée sur l'app store",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Aide : Vous pouvez accélérer la mise à jour en exécutant manuellement la commande SQL suivante : ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Exécuter Nextcloud Server sur une plateforme Microsoft Windows n'est pas supporté. Nous vous suggérons d'utiliser un serveur Linux dans une machine virtuelle si vous n'avez pas l'option de migrer votre serveur. Trouver les paquets Linux aussi facilement que de déployer une image de machine virtuelle sur <a href=\"%s\">%s</a>. Pour migrer vos installations existantes sur Linux, vous pouvez trouver plein d'astuces et un script de migration sur <a href=\"%s\">notre documentation</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu en <a href=\"%s\" target=\"_blank\">donnant les accès en écriture dans le répertoire root</a>."
+ "Storage not available" : "Support de stockage non disponible"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js
index b38cc75a14b..1ca8068cf77 100644
--- a/lib/l10n/hu_HU.js
+++ b/lib/l10n/hu_HU.js
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Ajánlott",
"Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben.",
- "Storage not available" : "A tároló elérhetetlen.",
- "ownCloud %s or higher is required." : "ownCloud %s vagy újabb szükséges.",
- "ownCloud %s or lower is required." : "ownCloud %s vagy régebbi szükséges.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "\"%s\" alkalmazás nem telepíthető, mert nem kompatibilis az Nextcloud ezen verziójával",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Az alkalmazás nem telepíthető, mert nem kompatibilis az Nextcloud ezen verziójával",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml/version részben tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: A következő SQL parancs segítségével manuálisan felgyorsíthatod a frissítést: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben. Linux csomagokat és könnyen üzembe helyezhető virtuális gép képfájlokat itt találhatsz: <a href=\"%s\">%s</a>. Létező telepítések Linux migrációjához tippeket és migrációs szkriptet a <a href=\"%s\">dokumentációban</a> találhatsz.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\">a webszervernek írási jogosultságot adsz a root könyvtárra</a>."
+ "Storage not available" : "A tároló elérhetetlen."
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json
index 8ff08b4f6da..a3f22bc7d5b 100644
--- a/lib/l10n/hu_HU.json
+++ b/lib/l10n/hu_HU.json
@@ -226,14 +226,6 @@
"Recommended" : "Ajánlott",
"Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben.",
- "Storage not available" : "A tároló elérhetetlen.",
- "ownCloud %s or higher is required." : "ownCloud %s vagy újabb szükséges.",
- "ownCloud %s or lower is required." : "ownCloud %s vagy régebbi szükséges.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "\"%s\" alkalmazás nem telepíthető, mert nem kompatibilis az Nextcloud ezen verziójával",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Az alkalmazás nem telepíthető, mert nem kompatibilis az Nextcloud ezen verziójával",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml/version részben tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: A következő SQL parancs segítségével manuálisan felgyorsíthatod a frissítést: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben. Linux csomagokat és könnyen üzembe helyezhető virtuális gép képfájlokat itt találhatsz: <a href=\"%s\">%s</a>. Létező telepítések Linux migrációjához tippeket és migrációs szkriptet a <a href=\"%s\">dokumentációban</a> találhatsz.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\">a webszervernek írási jogosultságot adsz a root könyvtárra</a>."
+ "Storage not available" : "A tároló elérhetetlen."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index c52328211f8..d061ef50683 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Consigliata",
"Microsoft Windows Platform is not supported" : "La piattaforma Microsoft Windows non è supportata",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'esecuzione del server Nextcloud sulla piattaforma Microsoft Windows. Ti consigliamo di utilizzare un server Linux in una macchina virtuale.",
- "Storage not available" : "Archiviazione non disponibile",
- "ownCloud %s or higher is required." : "È richiesta la versione %s o successiva di ownCloud.",
- "ownCloud %s or lower is required." : "È richiesta la versione %s o precedente di ownCloud.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "L'applicazione \"%s\" non può essere installata perché non è compatibile con questa versione di Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "L'applicazione non può essere installata perché non è compatibile con questa versione di Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "L'applicazione non può essere installata poiché la versione nel file info.xml/version non è la stessa riportata dall'app store",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Suggerimento: puoi eseguire più velocemente l'aggiornamento eseguendo questa istruzione SQL: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "L'esecuzione del server Nextcloud sulla piattaforma Microsoft Windows non è supportato. Ti consigliamo di utilizzare un server Linux in una macchina virtuale se non hai la possibilità di migrare il server. Trovare i pacchetti per Linux è facile quanto attivare immagini di macchine virtuali su <a href=\"%s\">%s</a>. Per migrare installazioni esistenti su Linux, puoi trovare alcuni consigli e uno script di migrazione nella <a href=\"%s\">nostra documentazione</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\">fornendo al server web accesso in scrittura alla cartella radice</a>."
+ "Storage not available" : "Archiviazione non disponibile"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index 4d1455e8dab..2ed1ebfe337 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -226,14 +226,6 @@
"Recommended" : "Consigliata",
"Microsoft Windows Platform is not supported" : "La piattaforma Microsoft Windows non è supportata",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'esecuzione del server Nextcloud sulla piattaforma Microsoft Windows. Ti consigliamo di utilizzare un server Linux in una macchina virtuale.",
- "Storage not available" : "Archiviazione non disponibile",
- "ownCloud %s or higher is required." : "È richiesta la versione %s o successiva di ownCloud.",
- "ownCloud %s or lower is required." : "È richiesta la versione %s o precedente di ownCloud.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "L'applicazione \"%s\" non può essere installata perché non è compatibile con questa versione di Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "L'applicazione non può essere installata perché non è compatibile con questa versione di Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "L'applicazione non può essere installata poiché la versione nel file info.xml/version non è la stessa riportata dall'app store",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Suggerimento: puoi eseguire più velocemente l'aggiornamento eseguendo questa istruzione SQL: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "L'esecuzione del server Nextcloud sulla piattaforma Microsoft Windows non è supportato. Ti consigliamo di utilizzare un server Linux in una macchina virtuale se non hai la possibilità di migrare il server. Trovare i pacchetti per Linux è facile quanto attivare immagini di macchine virtuali su <a href=\"%s\">%s</a>. Per migrare installazioni esistenti su Linux, puoi trovare alcuni consigli e uno script di migrazione nella <a href=\"%s\">nostra documentazione</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\">fornendo al server web accesso in scrittura alla cartella radice</a>."
+ "Storage not available" : "Archiviazione non disponibile"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index bea58917a4c..5ce196ffbbb 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "おすすめ",
"Microsoft Windows Platform is not supported" : "Microsoft Windows プラットフォームはサポートしていません。",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "マイクロソフト Windowsプラットフォーム上での Nextcloudの動作をサポートしていません。サーバー丸ごと移行する方式をとれない場合は仮想マシンで Linux を動かすことをお勧めします。",
- "Storage not available" : "ストレージが利用できません",
- "ownCloud %s or higher is required." : "ownCloud %s 以上が必要です",
- "ownCloud %s or lower is required." : "ownCloud %s 以下が必要です",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "\"%s\" アプリはこのバージョンのNextcloudと互換性がないためインストールできません。",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "このバージョンのNextcloudと互換性がないため、アプリケーションをインストールできません",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "info.xml/version のバージョンがアプリストアのバージョンと合っていないため、アプリはインストールされません",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "ヒント:次のSQLコマンドを手動で実行すると、アップグレードを高速化できます: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Microsoft WindowsプラットフォームでのNextcloud Serverの実行はサポートされていません。サーバー自体を移行するオプションがない場合は、仮想マシンでLinuxサーバーを使用することをお勧めします。 <a href=\"%s\"> %s </a>でLinuxパッケージを見つけたり、簡単に仮想マシンイメージを展開したりできます。既存のインストールをLinuxに移行するには、<a href=\"%s\">こちらのドキュメント</a>にいくつかのヒントと移行スクリプトがあります。",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "多くの場合、<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">Webサーバーのルートディレクトリに書き込み権限を与える</a>ことで解決できます。"
+ "Storage not available" : "ストレージが利用できません"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index c62bf1bae85..31d6ccd6b84 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -226,14 +226,6 @@
"Recommended" : "おすすめ",
"Microsoft Windows Platform is not supported" : "Microsoft Windows プラットフォームはサポートしていません。",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "マイクロソフト Windowsプラットフォーム上での Nextcloudの動作をサポートしていません。サーバー丸ごと移行する方式をとれない場合は仮想マシンで Linux を動かすことをお勧めします。",
- "Storage not available" : "ストレージが利用できません",
- "ownCloud %s or higher is required." : "ownCloud %s 以上が必要です",
- "ownCloud %s or lower is required." : "ownCloud %s 以下が必要です",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "\"%s\" アプリはこのバージョンのNextcloudと互換性がないためインストールできません。",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "このバージョンのNextcloudと互換性がないため、アプリケーションをインストールできません",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "info.xml/version のバージョンがアプリストアのバージョンと合っていないため、アプリはインストールされません",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "ヒント:次のSQLコマンドを手動で実行すると、アップグレードを高速化できます: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Microsoft WindowsプラットフォームでのNextcloud Serverの実行はサポートされていません。サーバー自体を移行するオプションがない場合は、仮想マシンでLinuxサーバーを使用することをお勧めします。 <a href=\"%s\"> %s </a>でLinuxパッケージを見つけたり、簡単に仮想マシンイメージを展開したりできます。既存のインストールをLinuxに移行するには、<a href=\"%s\">こちらのドキュメント</a>にいくつかのヒントと移行スクリプトがあります。",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "多くの場合、<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">Webサーバーのルートディレクトリに書き込み権限を与える</a>ことで解決できます。"
+ "Storage not available" : "ストレージが利用できません"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/nb_NO.js b/lib/l10n/nb_NO.js
index 934aa02a1e1..0fcaa03b246 100644
--- a/lib/l10n/nb_NO.js
+++ b/lib/l10n/nb_NO.js
@@ -5,8 +5,13 @@ OC.L10N.register(
"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",
"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.",
+ "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" : "Eksempelkonfigurasjon 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 eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
+ "%1$s and %2$s" : "%1$s og %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s og %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s og %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s og %5$s",
"PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"PHP with a version lower than %s is required." : "PHP med en versjon lavere enn %s kreves.",
"%sbit or higher PHP required." : "%sbit eller høyere PHP kreves",
@@ -20,6 +25,7 @@ OC.L10N.register(
"Server version %s or lower is required." : "Tjenerversjon %s eller lavere kreves.",
"Unknown filetype" : "Ukjent filtype",
"Invalid image" : "Ugyldig bilde",
+ "Avatar image is not square" : "Avatarbilde er ikke firkantet",
"today" : "i dag",
"yesterday" : "i går",
"_%n day ago_::_%n days ago_" : ["%n dag siden","%n dager siden"],
@@ -222,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Anbefalt",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-plattform støttes ikke",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere tjeneren selv.",
- "Storage not available" : "Lagringsplass ikke tilgjengelig",
- "ownCloud %s or higher is required." : "Nextcloud %s eller høyere er påkrevd.",
- "ownCloud %s or lower is required." : "Nextcloud %s eller lavere er påkrevd.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Appen \"%s\" kan ikke installeres da den ikke er kompatibel med denne versjonen av Nextcloud",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Appen kan ikke installeres da den ikke er kompatibel med denne versjonen av Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml/version ikke er den samme som versjonen som rapporteres fra app-butikken",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Hint: Du kan øke hastigheten på oppgraderingen ved å kjøre denne SQL kommandoen manuelt: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere selve tjeneren. Finn Linuxpakker og virtuelle maskiner på <a href=\"%s\">%s</a>. For å migrere eksisterende installasjon til Linux kan du finne gode tips og migreringsskript i vår <a href=\"%s\">dokumentasjon</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">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>."
+ "Storage not available" : "Lagringsplass ikke tilgjengelig"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/nb_NO.json b/lib/l10n/nb_NO.json
index 13f38ee540a..5e745167303 100644
--- a/lib/l10n/nb_NO.json
+++ b/lib/l10n/nb_NO.json
@@ -3,8 +3,13 @@
"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",
"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.",
+ "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" : "Eksempelkonfigurasjon 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 eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
+ "%1$s and %2$s" : "%1$s og %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s og %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s og %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s og %5$s",
"PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"PHP with a version lower than %s is required." : "PHP med en versjon lavere enn %s kreves.",
"%sbit or higher PHP required." : "%sbit eller høyere PHP kreves",
@@ -18,6 +23,7 @@
"Server version %s or lower is required." : "Tjenerversjon %s eller lavere kreves.",
"Unknown filetype" : "Ukjent filtype",
"Invalid image" : "Ugyldig bilde",
+ "Avatar image is not square" : "Avatarbilde er ikke firkantet",
"today" : "i dag",
"yesterday" : "i går",
"_%n day ago_::_%n days ago_" : ["%n dag siden","%n dager siden"],
@@ -220,14 +226,6 @@
"Recommended" : "Anbefalt",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-plattform støttes ikke",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere tjeneren selv.",
- "Storage not available" : "Lagringsplass ikke tilgjengelig",
- "ownCloud %s or higher is required." : "Nextcloud %s eller høyere er påkrevd.",
- "ownCloud %s or lower is required." : "Nextcloud %s eller lavere er påkrevd.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Appen \"%s\" kan ikke installeres da den ikke er kompatibel med denne versjonen av Nextcloud",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Appen kan ikke installeres da den ikke er kompatibel med denne versjonen av Nextcloud",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml/version ikke er den samme som versjonen som rapporteres fra app-butikken",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Hint: Du kan øke hastigheten på oppgraderingen ved å kjøre denne SQL kommandoen manuelt: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere selve tjeneren. Finn Linuxpakker og virtuelle maskiner på <a href=\"%s\">%s</a>. For å migrere eksisterende installasjon til Linux kan du finne gode tips og migreringsskript i vår <a href=\"%s\">dokumentasjon</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">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>."
+ "Storage not available" : "Lagringsplass ikke tilgjengelig"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index 6b1edec0eda..07569958fe6 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Aanbevolen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows Platform wordt niet ondersteund",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Het draaien van Nextcloud server op het Microsoft Windows platform wordt niet ondersteund. We adviseren je om een Linux server op een virtuele server te gebruiken als je geen mogelijkheid hebt om een server zelf te migreren.",
- "Storage not available" : "Opslag niet beschikbaar",
- "ownCloud %s or higher is required." : "ownCloud %s of hoger vereist.",
- "ownCloud %s or lower is required." : "ownCloud %s of lager vereist.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "App \"%s\" kan niet worden geïnstalleerd, omdat deze niet compatible is met deze versie van Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "App kan niet worden geïnstalleerd, omdat deze niet compatible is met deze versie van Nextcloud.",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "De app kan niet worden geïnstalleerd, omdat de versie in info.xml/version niet dezelfde is als de versie zoals die in de app store staat vermeld",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Hint: Je kunt de upgrade versnellen door dit SQL commando handmatig uit te voeren: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Het draaien van Nextcloud server op het Microsoft Windows platform wordt niet ondersteund. We adviseren je om een Linux server op een virtuele server te gebruiken als je geen mogelijkheid hebt om een server zelf te migreren. Je vind Linux packages en handig installeerbare virtual machine images op <a href=\"%s\">%s</a>. Voor het migreren van bestaande installaties naar Linux vind je tips en een migratiescript in <a href=\"%s\">onze documentatie</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dit kan hersteld worden door <a href=\"%s\" target=\"_blank\">de webserver schrijfrechten te geven op de hoofddirectory</a>."
+ "Storage not available" : "Opslag niet beschikbaar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index 006aa5121c3..3478dcdfa98 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -226,14 +226,6 @@
"Recommended" : "Aanbevolen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows Platform wordt niet ondersteund",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Het draaien van Nextcloud server op het Microsoft Windows platform wordt niet ondersteund. We adviseren je om een Linux server op een virtuele server te gebruiken als je geen mogelijkheid hebt om een server zelf te migreren.",
- "Storage not available" : "Opslag niet beschikbaar",
- "ownCloud %s or higher is required." : "ownCloud %s of hoger vereist.",
- "ownCloud %s or lower is required." : "ownCloud %s of lager vereist.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "App \"%s\" kan niet worden geïnstalleerd, omdat deze niet compatible is met deze versie van Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "App kan niet worden geïnstalleerd, omdat deze niet compatible is met deze versie van Nextcloud.",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "De app kan niet worden geïnstalleerd, omdat de versie in info.xml/version niet dezelfde is als de versie zoals die in de app store staat vermeld",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Hint: Je kunt de upgrade versnellen door dit SQL commando handmatig uit te voeren: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Het draaien van Nextcloud server op het Microsoft Windows platform wordt niet ondersteund. We adviseren je om een Linux server op een virtuele server te gebruiken als je geen mogelijkheid hebt om een server zelf te migreren. Je vind Linux packages en handig installeerbare virtual machine images op <a href=\"%s\">%s</a>. Voor het migreren van bestaande installaties naar Linux vind je tips en een migratiescript in <a href=\"%s\">onze documentatie</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dit kan hersteld worden door <a href=\"%s\" target=\"_blank\">de webserver schrijfrechten te geven op de hoofddirectory</a>."
+ "Storage not available" : "Opslag niet beschikbaar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index c71ffa473b3..39ced184a0f 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -22,13 +22,13 @@ OC.L10N.register(
"Avatar image is not square" : "Obraz awataru nie jest kwadratowy",
"today" : "dziś",
"yesterday" : "wczoraj",
- "_%n day ago_::_%n days ago_" : ["%d dzień temu","%n dni temu","%n dni temu"],
+ "_%n day ago_::_%n days ago_" : ["%d dzień temu","%n dni temu","%n dni temu","%n dni temu"],
"last month" : "w zeszłym miesiącu",
- "_%n month ago_::_%n months ago_" : ["%n miesiąc temu","%n miesięcy temu","%n miesięcy temu"],
+ "_%n month ago_::_%n months ago_" : ["%n miesiąc temu","%n miesięcy temu","%n miesięcy temu","%n miesięcy temu"],
"last year" : "w zeszłym roku",
- "_%n year ago_::_%n years ago_" : ["%n rok temu","%n lata temu","%n lat temu"],
- "_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu"],
- "_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu"],
+ "_%n year ago_::_%n years ago_" : ["%n rok temu","%n lata temu","%n lat temu","%n lat temu"],
+ "_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu","%n godzin temu"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu","%n minut temu"],
"seconds ago" : "sekund temu",
"Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł z id: %s nie istnieje. Należy go włączyć w ustawieniach aplikacji lub skontaktować się z administratorem.",
"File name is a reserved word" : "Nazwa pliku jest zarezerwowana",
@@ -82,6 +82,7 @@ OC.L10N.register(
"Sharing %s failed, because resharing is not allowed" : "Współdzielenie %s nie powiodło się, ponieważ ponowne współdzielenie nie jest dozwolone",
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Współdzielenie %s nie powiodło się, ponieważ zaplecze współdzielenia dla %s nie mogło znaleźć jego źródła",
"Sharing %s failed, because the file could not be found in the file cache" : "Współdzielenie %s nie powiodło się, ponieważ plik nie może zostać odnaleziony w buforze plików",
+ "Cannot increase permissions of %s" : "Nie można zwiększyć uprawnienia %s",
"Expiration date is in the past" : "Data ważności jest przeszła",
"Could not find category \"%s\"" : "Nie można odnaleźć kategorii \"%s\"",
"Sunday" : "Niedziela",
@@ -184,10 +185,6 @@ OC.L10N.register(
"Logging" : "Logowanie",
"Recommended" : "Polecane",
"Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows nie jest wspierana",
- "Storage not available" : "Pamięć nie dostępna",
- "ownCloud %s or higher is required." : "ownCloud %s lub wyższe jest wymagane.",
- "ownCloud %s or lower is required." : "ownCloud %s lub niższe jest wymagane.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Aplikacja \"%s\" nie może być zainstalowana ponieważ nie jest kompatybilna z tą wersją Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Aplikacja nie może być zainstalowana ponieważ nie jest kompatybilna z tą wersją Nextcloud."
+ "Storage not available" : "Pamięć nie dostępna"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index 1a4160b95c4..22b595e87d4 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -20,13 +20,13 @@
"Avatar image is not square" : "Obraz awataru nie jest kwadratowy",
"today" : "dziś",
"yesterday" : "wczoraj",
- "_%n day ago_::_%n days ago_" : ["%d dzień temu","%n dni temu","%n dni temu"],
+ "_%n day ago_::_%n days ago_" : ["%d dzień temu","%n dni temu","%n dni temu","%n dni temu"],
"last month" : "w zeszłym miesiącu",
- "_%n month ago_::_%n months ago_" : ["%n miesiąc temu","%n miesięcy temu","%n miesięcy temu"],
+ "_%n month ago_::_%n months ago_" : ["%n miesiąc temu","%n miesięcy temu","%n miesięcy temu","%n miesięcy temu"],
"last year" : "w zeszłym roku",
- "_%n year ago_::_%n years ago_" : ["%n rok temu","%n lata temu","%n lat temu"],
- "_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu"],
- "_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu"],
+ "_%n year ago_::_%n years ago_" : ["%n rok temu","%n lata temu","%n lat temu","%n lat temu"],
+ "_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu","%n godzin temu"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu","%n minut temu"],
"seconds ago" : "sekund temu",
"Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł z id: %s nie istnieje. Należy go włączyć w ustawieniach aplikacji lub skontaktować się z administratorem.",
"File name is a reserved word" : "Nazwa pliku jest zarezerwowana",
@@ -80,6 +80,7 @@
"Sharing %s failed, because resharing is not allowed" : "Współdzielenie %s nie powiodło się, ponieważ ponowne współdzielenie nie jest dozwolone",
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Współdzielenie %s nie powiodło się, ponieważ zaplecze współdzielenia dla %s nie mogło znaleźć jego źródła",
"Sharing %s failed, because the file could not be found in the file cache" : "Współdzielenie %s nie powiodło się, ponieważ plik nie może zostać odnaleziony w buforze plików",
+ "Cannot increase permissions of %s" : "Nie można zwiększyć uprawnienia %s",
"Expiration date is in the past" : "Data ważności jest przeszła",
"Could not find category \"%s\"" : "Nie można odnaleźć kategorii \"%s\"",
"Sunday" : "Niedziela",
@@ -182,10 +183,6 @@
"Logging" : "Logowanie",
"Recommended" : "Polecane",
"Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows nie jest wspierana",
- "Storage not available" : "Pamięć nie dostępna",
- "ownCloud %s or higher is required." : "ownCloud %s lub wyższe jest wymagane.",
- "ownCloud %s or lower is required." : "ownCloud %s lub niższe jest wymagane.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Aplikacja \"%s\" nie może być zainstalowana ponieważ nie jest kompatybilna z tą wersją Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Aplikacja nie może być zainstalowana ponieważ nie jest kompatybilna z tą wersją Nextcloud."
+ "Storage not available" : "Pamięć nie dostępna"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index 23635f5d47e..5a55bd7a02b 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -228,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Recomendado",
"Microsoft Windows Platform is not supported" : "Plataforma Microsoft Windows não é suportada",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "O Servidor Nextcloud não possui suporte para execução na plataforma Microsoft Windows. Sugerimos que use um servidor Linux em uma máquina virtual, caso não seja possível migrar o servidor.",
- "Storage not available" : "Armazanamento não disponível",
- "ownCloud %s or higher is required." : "OwnCloud %s ou mais recente é necessário",
- "ownCloud %s or lower is required." : "ownCloud %s ou menor é necessário",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "App '%s\" não pode ser instalado por não ser compatível com a versão",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "App não pode ser instalado pois não é compatível com a versão",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App não pode ser instalado porque a versão em info.xml/version não é a mesma versão reportada na app store",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Dica: voce pode acelerar seu upgrade executando um comando SQL: ALTERTABLE %s ADD COLUMN checksun varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Não é possível rodar nosso serviço em plataformas Microsoft, sugerimos um Linux em máquina virtual. É possível achar pacotes Linux e é bem fácil fazer dfeply das imagens virtuais em <a href=\"%s\"> %s</a>. Para migrar instalações existentes e achar algumas dicas de script acesse <a href=\"%s\">nossa documentação</a>",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Isso pode ser corrigido usando <a href=\"%s\" target=\"_blank\"> fornecendo acesso de escrita ao webserver no diretório root</a>"
+ "Storage not available" : "Armazanamento não disponível"
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index e51fc04a66f..2e9db1e93bc 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -226,14 +226,6 @@
"Recommended" : "Recomendado",
"Microsoft Windows Platform is not supported" : "Plataforma Microsoft Windows não é suportada",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "O Servidor Nextcloud não possui suporte para execução na plataforma Microsoft Windows. Sugerimos que use um servidor Linux em uma máquina virtual, caso não seja possível migrar o servidor.",
- "Storage not available" : "Armazanamento não disponível",
- "ownCloud %s or higher is required." : "OwnCloud %s ou mais recente é necessário",
- "ownCloud %s or lower is required." : "ownCloud %s ou menor é necessário",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "App '%s\" não pode ser instalado por não ser compatível com a versão",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "App não pode ser instalado pois não é compatível com a versão",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App não pode ser instalado porque a versão em info.xml/version não é a mesma versão reportada na app store",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Dica: voce pode acelerar seu upgrade executando um comando SQL: ALTERTABLE %s ADD COLUMN checksun varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Não é possível rodar nosso serviço em plataformas Microsoft, sugerimos um Linux em máquina virtual. É possível achar pacotes Linux e é bem fácil fazer dfeply das imagens virtuais em <a href=\"%s\"> %s</a>. Para migrar instalações existentes e achar algumas dicas de script acesse <a href=\"%s\">nossa documentação</a>",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Isso pode ser corrigido usando <a href=\"%s\" target=\"_blank\"> fornecendo acesso de escrita ao webserver no diretório root</a>"
+ "Storage not available" : "Armazanamento não disponível"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index 3904d0f86d1..869ec6055f2 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -5,8 +5,13 @@ OC.L10N.register(
"This can usually be fixed by giving the webserver write access to the config directory" : "Обычно это можно исправить, предоставив веб-серверу права на запись в каталог конфигурации",
"See %s" : "Смотрите %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Обычно это можно исправить %sпредоставив веб-серверу права на запись в каталоге конфигурации%s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Файлы приложения %$1s не заменены корректно. Проверьте что его версия совместима с версией сервера.",
"Sample configuration detected" : "Обнаружена конфигурация из примера",
"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" : "Была обнаружена конфигурация из примера. Такая конфигурация не поддерживается и может повредить вашей системе. Прочтите документацию перед внесением изменений в файл config.php",
+ "%1$s and %2$s" : "%1$s и %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s и %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s и %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s и %5$s",
"PHP %s or higher is required." : "Требуется PHP %s или выше",
"PHP with a version lower than %s is required." : "Требуется версия PHP ниже %s.",
"%sbit or higher PHP required." : "Требуется PHP с разрядностью %s бит или более.",
@@ -206,7 +211,7 @@ OC.L10N.register(
"4-byte characters are not supported in file names" : "4-х байтовые символы в имени файлов не допускаются",
"App directory already exists" : "Каталог приложения уже существует",
"Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог приложения. Исправьте права доступа. %s",
- "Archive does not contain a directory named %s" : "Архив не содержит папки с именем %s",
+ "Archive does not contain a directory named %s" : "Архив не содержит каталога с именем %s",
"No source specified when installing app" : "Не указан источник при установке приложения",
"No href specified when installing app from http" : "Не указан атрибут href при установке приложения через http",
"No path specified when installing app from local file" : "Не указан путь при установке приложения из локального файла",
@@ -223,14 +228,6 @@ OC.L10N.register(
"Recommended" : "Рекомендовано",
"Microsoft Windows Platform is not supported" : "Платформа Microsoft Windows не поддерживается",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Работа Nextcloud Server на платформе Microsoft Windows не поддерживается. Мы рекомендуем использовать Linux в качестве виртуальный машины, если у вас нет возможности перевести сам сервер.",
- "Storage not available" : "Хранилище недоступно",
- "ownCloud %s or higher is required." : "Требуется NextCloud версии %s или выше.",
- "ownCloud %s or lower is required." : "Требуется NextCloud версии %s или ниже.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Приложение \"%s\" не может быть установлено, так как оно несовместимо с этой версией Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Приложение не может быть установлено, так как оно несовместимо с этой версией Nextcloud.",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Приложение не может быть установлено, поскольку версия в файле info.xml/version не совпадает с версией, заявленной в магазине приложений",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Совет: вы можете ускорить процесс обновления, выполнив SQL-запрос самостоятельно: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Nextcloud Server на платформе Microsoft Windows не поддерживается. Если у вас нет возможности установить на сервер Linux, рекомендуем воспользоваться виртуальной машиной. Соответствующие пакеты можно найти на странице <a href=\"%s\">%s</a>. Для переноса на Linux уже имеющейся установки некоторые советы и рекомендации есть в <a href=\"%s\">нашей документации</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Как правило, это можно исправить, <a href=\"%s\" target=\"_blank\">предоставив веб-серверу права на запись в корневой каталог</a>."
+ "Storage not available" : "Хранилище недоступно"
},
"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/lib/l10n/ru.json b/lib/l10n/ru.json
index a64f3c29c98..92ea68f8ac7 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -3,8 +3,13 @@
"This can usually be fixed by giving the webserver write access to the config directory" : "Обычно это можно исправить, предоставив веб-серверу права на запись в каталог конфигурации",
"See %s" : "Смотрите %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Обычно это можно исправить %sпредоставив веб-серверу права на запись в каталоге конфигурации%s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Файлы приложения %$1s не заменены корректно. Проверьте что его версия совместима с версией сервера.",
"Sample configuration detected" : "Обнаружена конфигурация из примера",
"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" : "Была обнаружена конфигурация из примера. Такая конфигурация не поддерживается и может повредить вашей системе. Прочтите документацию перед внесением изменений в файл config.php",
+ "%1$s and %2$s" : "%1$s и %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s и %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s и %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s и %5$s",
"PHP %s or higher is required." : "Требуется PHP %s или выше",
"PHP with a version lower than %s is required." : "Требуется версия PHP ниже %s.",
"%sbit or higher PHP required." : "Требуется PHP с разрядностью %s бит или более.",
@@ -204,7 +209,7 @@
"4-byte characters are not supported in file names" : "4-х байтовые символы в имени файлов не допускаются",
"App directory already exists" : "Каталог приложения уже существует",
"Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог приложения. Исправьте права доступа. %s",
- "Archive does not contain a directory named %s" : "Архив не содержит папки с именем %s",
+ "Archive does not contain a directory named %s" : "Архив не содержит каталога с именем %s",
"No source specified when installing app" : "Не указан источник при установке приложения",
"No href specified when installing app from http" : "Не указан атрибут href при установке приложения через http",
"No path specified when installing app from local file" : "Не указан путь при установке приложения из локального файла",
@@ -221,14 +226,6 @@
"Recommended" : "Рекомендовано",
"Microsoft Windows Platform is not supported" : "Платформа Microsoft Windows не поддерживается",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Работа Nextcloud Server на платформе Microsoft Windows не поддерживается. Мы рекомендуем использовать Linux в качестве виртуальный машины, если у вас нет возможности перевести сам сервер.",
- "Storage not available" : "Хранилище недоступно",
- "ownCloud %s or higher is required." : "Требуется NextCloud версии %s или выше.",
- "ownCloud %s or lower is required." : "Требуется NextCloud версии %s или ниже.",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Приложение \"%s\" не может быть установлено, так как оно несовместимо с этой версией Nextcloud.",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "Приложение не может быть установлено, так как оно несовместимо с этой версией Nextcloud.",
- "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Приложение не может быть установлено, поскольку версия в файле info.xml/version не совпадает с версией, заявленной в магазине приложений",
- "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Совет: вы можете ускорить процесс обновления, выполнив SQL-запрос самостоятельно: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
- "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Nextcloud Server на платформе Microsoft Windows не поддерживается. Если у вас нет возможности установить на сервер Linux, рекомендуем воспользоваться виртуальной машиной. Соответствующие пакеты можно найти на странице <a href=\"%s\">%s</a>. Для переноса на Linux уже имеющейся установки некоторые советы и рекомендации есть в <a href=\"%s\">нашей документации</a>.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Как правило, это можно исправить, <a href=\"%s\" target=\"_blank\">предоставив веб-серверу права на запись в корневой каталог</a>."
+ "Storage not available" : "Хранилище недоступно"
},"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/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js
new file mode 100644
index 00000000000..0e4854cdef0
--- /dev/null
+++ b/lib/l10n/sk_SK.js
@@ -0,0 +1,215 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "Nie je možné zapisovat do priečinka \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "To je zvyčajne možné opraviť tým, že udelíte webovému serveru oprávnenie na zápis do priečinka s konfiguráciou.",
+ "See %s" : "Pozri %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis k adresáru s konfiguráciou%s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Súbory aplikácie %$1s nebolo možné úspešne nahradiť. Uistite sa, že verzia je kompatibilná s verziou servera.",
+ "Sample configuration detected" : "Detekovaná bola vzorová konfigurácia",
+ "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" : "Zistilo sa, že konfigurácia bola skopírovaná zo vzorových súborov. Takáto konfigurácia nie je podporovaná a môže poškodiť vašu inštaláciu. Prečítajte si dokumentáciu pred vykonaním zmien v config.php",
+ "PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
+ "PHP with a version lower than %s is required." : "PHP je vyžadované vo vyššej verzii ako %s.",
+ "Following databases are supported: %s" : "Podporované sú tieto databázy: %s",
+ "The command line tool %s could not be found" : "Nástroj príkazového riadka %s nebol nájdený",
+ "The library %s is not available." : "Knižnica %s je nedostupná.",
+ "Library %s with a version higher than %s is required - available version %s." : "Požadovaná je knižnica %s vo vyššej verzii ako %s - dostupná verzia %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Požadovaná je knižnica %s v nižšej verzii ako %s - dostupná verzia %s.",
+ "Following platforms are supported: %s" : "Podporované sú nasledovné systémy: %s",
+ "Server version %s or higher is required." : "Je vyžadovaná verzia servera %s alebo vyššia.",
+ "Server version %s or lower is required." : "Je vyžadovaná verzia servera %s alebo nižšia.",
+ "Unknown filetype" : "Neznámy typ súboru",
+ "Invalid image" : "Chybný obrázok",
+ "today" : "dnes",
+ "yesterday" : "včera",
+ "_%n day ago_::_%n days ago_" : ["včera","pred %n dňami","pred %n dňami"],
+ "last month" : "minulý mesiac",
+ "_%n month ago_::_%n months ago_" : ["pred %n mesiacom","pred %n mesiacmi","pred %n mesiacmi"],
+ "last year" : "minulý rok",
+ "_%n year ago_::_%n years ago_" : ["vlani","pred %n rokmi","pred %n rokmi"],
+ "_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
+ "_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
+ "seconds ago" : "pred sekundami",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povoľte ho prosím vo vašom nastavení aplikácií alebo konaktujte správcu.",
+ "File name is a reserved word" : "Názov súboru je rezervované slovo.",
+ "File name contains at least one invalid character" : "Názov súboru obsahuje nepovolené znaky.",
+ "File name is too long" : "Meno súboru je veľmi dlhé.",
+ "Dot files are not allowed" : "Názov súboru začínajúci bodkou nie je povolený.",
+ "Empty filename is not allowed" : "Prázdny názov súboru nie je povolený",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Nastavenia servera",
+ "Sharing" : "Sprístupnenie",
+ "Encryption" : "Šifrovanie",
+ "Additional settings" : "Ďalšie nastavenia",
+ "Tips & tricks" : "Tipy a triky",
+ "%s enter the database username." : "Zadajte používateľské meno %s databázy.",
+ "%s enter the database name." : "Zadajte názov databázy pre %s databázy.",
+ "%s you may not use dots in the database name" : "V názve databázy %s nemôžete používať bodky",
+ "Oracle connection could not be established" : "Nie je možné pripojiť sa k Oracle",
+ "Oracle username and/or password not valid" : "Používateľské meno a/alebo heslo pre Oracle databázu je neplatné",
+ "DB Error: \"%s\"" : "Chyba DB: \"%s\"",
+ "Offending command was: \"%s\"" : "Podozrivý príkaz bol: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Musíte zadať jestvujúci účet alebo administrátora.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Podozrivý príkaz bol: \"%s\", meno: %s, heslo: %s",
+ "PostgreSQL username and/or password not valid" : "Používateľské meno a/alebo heslo pre PostgreSQL databázu je neplatné",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie je podporovaný a %s nebude správne fungovať na tejto platforme. Použite ho na vlastné riziko!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Pre dosiahnutie najlepších výsledkov, prosím zvážte použitie GNU/Linux servera.",
+ "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." : "Zdá sa, že táto inštancia %s beží v 32-bitovom prostredí PHP a v php.ini bola nastavená voľba open_basedir. To bude zdrojom problémov so súbormi väčšími ako 4GB a dôrazne sa neodporúča.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Prosím, odstráňte nastavenie open_basedir vo vašom php.ini alebo prejdite na 64-bit PHP.",
+ "Set an admin username." : "Zadajte používateľské meno administrátora.",
+ "Set an admin password." : "Zadajte heslo administrátora.",
+ "Can't create or write into the data directory %s" : "Nemožno vytvoriť alebo zapisovať do priečinka dát %s",
+ "Invalid Federated Cloud ID" : "Neplatné združené Cloud ID",
+ "%s shared »%s« with you" : "%s vám sprístupnil »%s«",
+ "%s via %s" : "%s cez %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Sprístupnenie %s zlyhalo, backend nepodporuje typ sprístupnenia %i",
+ "Sharing %s failed, because the file does not exist" : "Nie je možné sprístupniť %s, súbor neexistuje",
+ "You are not allowed to share %s" : "Nemôžete sprístupniť %s",
+ "Sharing %s failed, because you can not share with yourself" : "Sprístupnenie %s zlyhalo, nieje možné sprístupniť obsah so sebou samým",
+ "Sharing %s failed, because the user %s does not exist" : "Sprístupnenie %s zlyhalo, používateľ %s neexistuje",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Sprístupnenie %s zlyhalo, používateľ %s nie je členom žiadnej skupiny spoločnej s používateľom %s",
+ "Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Sprístupnenie %s zlyhalo, táto položka už je používateľovi %s prístupná",
+ "Sharing %s failed, because the group %s does not exist" : "Sprístupnenie %s zlyhalo, skupina %s neexistuje",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Sprístupnenie %s zlyhalo, %s nie je členom skupiny %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Musíte zadať heslo ak chcete vytvoriť verejný odkaz, lebo iba odkazy chránené heslom sú povolené",
+ "Sharing %s failed, because sharing with links is not allowed" : "%s nie je možné sprístupniť, sprístupnenie prostredníctvom odkazu nie je povolené",
+ "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sprístupňovanie %s zlyhalo, nepodarilo sa nájsť %s, možno je server dočasne nedostupný.",
+ "Share type %s is not valid for %s" : "Typ sprístupnenia %s nie je možný pre %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavenie povolení pre %s zlyhalo, pretože povolenia prekračujú povolenia udelené %s",
+ "Setting permissions for %s failed, because the item was not found" : "Nastavenie povolení pre %s zlyhalo, pretože položka sa nenašla",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Sprístupnenie nemôže byť ukončené skôr, ako po %s dňoch.",
+ "Cannot set expiration date. Expiration date is in the past" : "Nie je možné nastaviť dátum konca platnosti. Dátum konca platnosti je v minulosti.",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "Nemožno vymazať čas expirácie. Pri sprístupnení je čas exspirácie vyžadovaný.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Backend pre sprístupnenie %s musí implementovať rozhranie OCP\\Share_Backend",
+ "Sharing backend %s not found" : "Backend sprístupnenia %s nebol nájdený",
+ "Sharing backend for %s not found" : "Backend sprístupnenia pre %s nebol nájdený",
+ "Sharing failed, because the user %s is the original sharer" : "Sprístupnenie zlyhalo, pretože používateľ %s je pôvodný spoločný používateľ",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Sprístupnenie %s zlyhalo, pretože povolenia prekračujú povolenia udelené %s",
+ "Sharing %s failed, because resharing is not allowed" : "Nie je možné sprístupniť %s ďalším osobám",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Sprístupnenie %s zlyhalo, backend nenašiel zdrojový %s",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Sprístupnenie %s zlyhalo, pretože súbor sa nenachádza vo vyrovnávacej pamäti súborov",
+ "Expiration date is in the past" : "Dátum konca platnosti je v minulosti",
+ "Cannot set expiration date more than %s days in the future" : "Nie je možné nastaviť dátum konca platnosti viac ako %s dní v budúcnosti",
+ "Could not find category \"%s\"" : "Nemožno nájsť danú kategóriu \"%s\"",
+ "Sunday" : "Nedeľa",
+ "Monday" : "Pondelok",
+ "Tuesday" : "Utorok",
+ "Wednesday" : "Streda",
+ "Thursday" : "Štvrtok",
+ "Friday" : "Piatok",
+ "Saturday" : "Sobota",
+ "Sun." : "Ned.",
+ "Mon." : "Pon.",
+ "Tue." : "Uto.",
+ "Wed." : "Str.",
+ "Thu." : "Štv.",
+ "Fri." : "Pia.",
+ "Sat." : "Sob.",
+ "Su" : "Ne",
+ "Mo" : "Po",
+ "Tu" : "Ut",
+ "We" : "St",
+ "Th" : "Št",
+ "Fr" : "Pi",
+ "Sa" : "So",
+ "January" : "Január",
+ "February" : "Február",
+ "March" : "Marec",
+ "April" : "Apríl",
+ "May" : "Máj",
+ "June" : "Jún",
+ "July" : "Júl",
+ "August" : "August",
+ "September" : "September",
+ "October" : "Október",
+ "November" : "November",
+ "December" : "December",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Apr.",
+ "May." : "Máj.",
+ "Jun." : "Jún.",
+ "Jul." : "Júl.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dec.",
+ "Apps" : "Aplikácie",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "V mene používateľa je možné použiť iba nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
+ "A valid username must be provided" : "Musíte zadať platné používateľské meno",
+ "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ý",
+ "Help" : "Pomoc",
+ "Personal" : "Osobné",
+ "Users" : "Používatelia",
+ "Admin" : "Administrátor",
+ "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",
+ "App '%s' could not be installed!" : "Aplikáciu '%s' nebolo možné nainštalovať!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikáciu \"%s\" nie je možné inštalovať, pretože nie sú splnené nasledovné závislosti: %s",
+ "a safe home for all your data" : "bezpečný domov pre všetky vaše dáta",
+ "File is currently busy, please try again later" : "Súbor sa práve používa, skúste prosím neskôr",
+ "Can't read file" : "Nemožno čítať súbor.",
+ "Application is not enabled" : "Aplikácia nie je zapnutá",
+ "Authentication error" : "Chyba autentifikácie",
+ "Token expired. Please reload page." : "Token vypršal. Obnovte, prosím, stránku.",
+ "Unknown user" : "Neznámy používateľ",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Ovládače databázy (sqlite, mysql, alebo postgresql) nie sú nainštalované.",
+ "Cannot write into \"config\" directory" : "Nie je možné zapisovať do priečinka \"config\"",
+ "Cannot write into \"apps\" directory" : "Nie je možné zapisovať do priečinka \"apps\"",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Toto je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis do priečinka aplikácií %s alebo vypnete obchod s aplikáciami v konfiguračnom súbore.",
+ "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "To je zvyčajne možné opraviť tým <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">že udelíte webovému serveru oprávnenie na zápis do koreňového priečinka</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.",
+ "Setting locale to %s failed" : "Nastavenie locale na %s zlyhalo",
+ "Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.",
+ "Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.",
+ "PHP module %s not installed." : "PHP modul %s nie je nainštalovaný.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Voľba PHP „%s“ nie je nastavená na „%s“.",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Použitím týchto nastavení v php.ini dovolí Nextcloudu sa znova spustiť",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload je nastavený na \"%s\", namiesto predpokladanej hodnoty \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Oprava problému spočíva v nastavení <code>mbstring.func_overload</code> na <code>0</code> vo vašom php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Vyžadovaná verzia libxml2 je 2.7.0 a vyššia. Momentálne je nainštalovaná verzia %s.",
+ "To fix this issue update your libxml2 version and restart your web server." : "Pre vyriešenie tohto problému aktualizujte prosím verziu libxml2 a reštartujte webový server.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je zjavne nastavené, aby odstraňovalo bloky vloženej dokumentácie. To zneprístupní niekoľko základných aplikácií.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "To je pravdepodobne spôsobené cache/akcelerátorom ako napr. Zend OPcache alebo eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP moduly boli nainštalované, ale stále sa tvária, že chýbajú?",
+ "Please ask your server administrator to restart the web server." : "Prosím, požiadajte administrátora vášho servera o reštartovanie webového servera.",
+ "PostgreSQL >= 9 required" : "Vyžadované PostgreSQL >= 9",
+ "Please upgrade your database version" : "Prosím, aktualizujte verziu svojej databázy",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Prosím, zmeňte oprávnenia na 0770, aby tento priečinok nemohli ostatní používatelia otvoriť.",
+ "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom",
+ "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta",
+ "Check the value of \"datadirectory\" in your configuration" : "Skontrolujte hodnotu \"datadirectory\" vo vašej konfigurácii",
+ "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Prosím, skontrolujte, či priečinok dát obsahuje súbor \".ocdata\".",
+ "Could not obtain lock type %d on \"%s\"." : "Nepodarilo sa získať zámok typu %d na „%s“.",
+ "4-byte characters are not supported in file names" : "V názve súbou nie sú podporované 4-bajtové znaky.",
+ "App directory already exists" : "Aplikačný priečinok už existuje",
+ "Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
+ "Archive does not contain a directory named %s" : "Archív neobsahuje priečinok zvaný %s",
+ "No source specified when installing app" : "Nešpecifikovaný zdroj pri inštalácii aplikácie",
+ "No href specified when installing app from http" : "Nešpecifikovaný atribút \"href\" pri inštalácii aplikácie pomocou protokolu \"http\"",
+ "No path specified when installing app from local file" : "Nešpecifikovaná cesta pri inštalácii aplikácie z lokálneho súboru",
+ "Archives of type %s are not supported" : "Tento typ archívu %s nie je podporovaný",
+ "Failed to open archive when installing app" : "Zlyhanie pri otváraní archívu počas inštalácie aplikácie",
+ "App does not provide an info.xml file" : "Aplikácia neposkytuje súbor info.xml",
+ "App cannot be installed because appinfo file cannot be read." : "Aplikáciu nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nebolo možné skontrolovať podpis aplikácie. Kontaktujte prosím vývojára aplikácie a skontrolujte administrátorské nastavenia.",
+ "App can't be installed because of not allowed code in the App" : "Aplikácia nemôže byť nainštalovaná pre nepovolený kód v aplikácii",
+ "App can't be installed because it is not compatible with this version of the server" : "Aplikácia nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikácia nemôže byť nainštalovaná pretože obsahuje značku<shipped>true</shipped>, ktorá nie je povolená pre nedodávané aplikácie",
+ "Recommended" : "Odporúčané",
+ "Microsoft Windows Platform is not supported" : "Microsoft Windows platforma nieje podporovaná",
+ "Storage not available" : "Úložisko nie je dostupné"
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json
new file mode 100644
index 00000000000..ddd42d62b8e
--- /dev/null
+++ b/lib/l10n/sk_SK.json
@@ -0,0 +1,213 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "Nie je možné zapisovat do priečinka \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "To je zvyčajne možné opraviť tým, že udelíte webovému serveru oprávnenie na zápis do priečinka s konfiguráciou.",
+ "See %s" : "Pozri %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis k adresáru s konfiguráciou%s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Súbory aplikácie %$1s nebolo možné úspešne nahradiť. Uistite sa, že verzia je kompatibilná s verziou servera.",
+ "Sample configuration detected" : "Detekovaná bola vzorová konfigurácia",
+ "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" : "Zistilo sa, že konfigurácia bola skopírovaná zo vzorových súborov. Takáto konfigurácia nie je podporovaná a môže poškodiť vašu inštaláciu. Prečítajte si dokumentáciu pred vykonaním zmien v config.php",
+ "PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
+ "PHP with a version lower than %s is required." : "PHP je vyžadované vo vyššej verzii ako %s.",
+ "Following databases are supported: %s" : "Podporované sú tieto databázy: %s",
+ "The command line tool %s could not be found" : "Nástroj príkazového riadka %s nebol nájdený",
+ "The library %s is not available." : "Knižnica %s je nedostupná.",
+ "Library %s with a version higher than %s is required - available version %s." : "Požadovaná je knižnica %s vo vyššej verzii ako %s - dostupná verzia %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Požadovaná je knižnica %s v nižšej verzii ako %s - dostupná verzia %s.",
+ "Following platforms are supported: %s" : "Podporované sú nasledovné systémy: %s",
+ "Server version %s or higher is required." : "Je vyžadovaná verzia servera %s alebo vyššia.",
+ "Server version %s or lower is required." : "Je vyžadovaná verzia servera %s alebo nižšia.",
+ "Unknown filetype" : "Neznámy typ súboru",
+ "Invalid image" : "Chybný obrázok",
+ "today" : "dnes",
+ "yesterday" : "včera",
+ "_%n day ago_::_%n days ago_" : ["včera","pred %n dňami","pred %n dňami"],
+ "last month" : "minulý mesiac",
+ "_%n month ago_::_%n months ago_" : ["pred %n mesiacom","pred %n mesiacmi","pred %n mesiacmi"],
+ "last year" : "minulý rok",
+ "_%n year ago_::_%n years ago_" : ["vlani","pred %n rokmi","pred %n rokmi"],
+ "_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
+ "_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
+ "seconds ago" : "pred sekundami",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povoľte ho prosím vo vašom nastavení aplikácií alebo konaktujte správcu.",
+ "File name is a reserved word" : "Názov súboru je rezervované slovo.",
+ "File name contains at least one invalid character" : "Názov súboru obsahuje nepovolené znaky.",
+ "File name is too long" : "Meno súboru je veľmi dlhé.",
+ "Dot files are not allowed" : "Názov súboru začínajúci bodkou nie je povolený.",
+ "Empty filename is not allowed" : "Prázdny názov súboru nie je povolený",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Nastavenia servera",
+ "Sharing" : "Sprístupnenie",
+ "Encryption" : "Šifrovanie",
+ "Additional settings" : "Ďalšie nastavenia",
+ "Tips & tricks" : "Tipy a triky",
+ "%s enter the database username." : "Zadajte používateľské meno %s databázy.",
+ "%s enter the database name." : "Zadajte názov databázy pre %s databázy.",
+ "%s you may not use dots in the database name" : "V názve databázy %s nemôžete používať bodky",
+ "Oracle connection could not be established" : "Nie je možné pripojiť sa k Oracle",
+ "Oracle username and/or password not valid" : "Používateľské meno a/alebo heslo pre Oracle databázu je neplatné",
+ "DB Error: \"%s\"" : "Chyba DB: \"%s\"",
+ "Offending command was: \"%s\"" : "Podozrivý príkaz bol: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Musíte zadať jestvujúci účet alebo administrátora.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Podozrivý príkaz bol: \"%s\", meno: %s, heslo: %s",
+ "PostgreSQL username and/or password not valid" : "Používateľské meno a/alebo heslo pre PostgreSQL databázu je neplatné",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie je podporovaný a %s nebude správne fungovať na tejto platforme. Použite ho na vlastné riziko!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Pre dosiahnutie najlepších výsledkov, prosím zvážte použitie GNU/Linux servera.",
+ "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." : "Zdá sa, že táto inštancia %s beží v 32-bitovom prostredí PHP a v php.ini bola nastavená voľba open_basedir. To bude zdrojom problémov so súbormi väčšími ako 4GB a dôrazne sa neodporúča.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Prosím, odstráňte nastavenie open_basedir vo vašom php.ini alebo prejdite na 64-bit PHP.",
+ "Set an admin username." : "Zadajte používateľské meno administrátora.",
+ "Set an admin password." : "Zadajte heslo administrátora.",
+ "Can't create or write into the data directory %s" : "Nemožno vytvoriť alebo zapisovať do priečinka dát %s",
+ "Invalid Federated Cloud ID" : "Neplatné združené Cloud ID",
+ "%s shared »%s« with you" : "%s vám sprístupnil »%s«",
+ "%s via %s" : "%s cez %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Sprístupnenie %s zlyhalo, backend nepodporuje typ sprístupnenia %i",
+ "Sharing %s failed, because the file does not exist" : "Nie je možné sprístupniť %s, súbor neexistuje",
+ "You are not allowed to share %s" : "Nemôžete sprístupniť %s",
+ "Sharing %s failed, because you can not share with yourself" : "Sprístupnenie %s zlyhalo, nieje možné sprístupniť obsah so sebou samým",
+ "Sharing %s failed, because the user %s does not exist" : "Sprístupnenie %s zlyhalo, používateľ %s neexistuje",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Sprístupnenie %s zlyhalo, používateľ %s nie je členom žiadnej skupiny spoločnej s používateľom %s",
+ "Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Sprístupnenie %s zlyhalo, táto položka už je používateľovi %s prístupná",
+ "Sharing %s failed, because the group %s does not exist" : "Sprístupnenie %s zlyhalo, skupina %s neexistuje",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Sprístupnenie %s zlyhalo, %s nie je členom skupiny %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Musíte zadať heslo ak chcete vytvoriť verejný odkaz, lebo iba odkazy chránené heslom sú povolené",
+ "Sharing %s failed, because sharing with links is not allowed" : "%s nie je možné sprístupniť, sprístupnenie prostredníctvom odkazu nie je povolené",
+ "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sprístupňovanie %s zlyhalo, nepodarilo sa nájsť %s, možno je server dočasne nedostupný.",
+ "Share type %s is not valid for %s" : "Typ sprístupnenia %s nie je možný pre %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Nastavenie povolení pre %s zlyhalo, pretože povolenia prekračujú povolenia udelené %s",
+ "Setting permissions for %s failed, because the item was not found" : "Nastavenie povolení pre %s zlyhalo, pretože položka sa nenašla",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Sprístupnenie nemôže byť ukončené skôr, ako po %s dňoch.",
+ "Cannot set expiration date. Expiration date is in the past" : "Nie je možné nastaviť dátum konca platnosti. Dátum konca platnosti je v minulosti.",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "Nemožno vymazať čas expirácie. Pri sprístupnení je čas exspirácie vyžadovaný.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Backend pre sprístupnenie %s musí implementovať rozhranie OCP\\Share_Backend",
+ "Sharing backend %s not found" : "Backend sprístupnenia %s nebol nájdený",
+ "Sharing backend for %s not found" : "Backend sprístupnenia pre %s nebol nájdený",
+ "Sharing failed, because the user %s is the original sharer" : "Sprístupnenie zlyhalo, pretože používateľ %s je pôvodný spoločný používateľ",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Sprístupnenie %s zlyhalo, pretože povolenia prekračujú povolenia udelené %s",
+ "Sharing %s failed, because resharing is not allowed" : "Nie je možné sprístupniť %s ďalším osobám",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Sprístupnenie %s zlyhalo, backend nenašiel zdrojový %s",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Sprístupnenie %s zlyhalo, pretože súbor sa nenachádza vo vyrovnávacej pamäti súborov",
+ "Expiration date is in the past" : "Dátum konca platnosti je v minulosti",
+ "Cannot set expiration date more than %s days in the future" : "Nie je možné nastaviť dátum konca platnosti viac ako %s dní v budúcnosti",
+ "Could not find category \"%s\"" : "Nemožno nájsť danú kategóriu \"%s\"",
+ "Sunday" : "Nedeľa",
+ "Monday" : "Pondelok",
+ "Tuesday" : "Utorok",
+ "Wednesday" : "Streda",
+ "Thursday" : "Štvrtok",
+ "Friday" : "Piatok",
+ "Saturday" : "Sobota",
+ "Sun." : "Ned.",
+ "Mon." : "Pon.",
+ "Tue." : "Uto.",
+ "Wed." : "Str.",
+ "Thu." : "Štv.",
+ "Fri." : "Pia.",
+ "Sat." : "Sob.",
+ "Su" : "Ne",
+ "Mo" : "Po",
+ "Tu" : "Ut",
+ "We" : "St",
+ "Th" : "Št",
+ "Fr" : "Pi",
+ "Sa" : "So",
+ "January" : "Január",
+ "February" : "Február",
+ "March" : "Marec",
+ "April" : "Apríl",
+ "May" : "Máj",
+ "June" : "Jún",
+ "July" : "Júl",
+ "August" : "August",
+ "September" : "September",
+ "October" : "Október",
+ "November" : "November",
+ "December" : "December",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Apr.",
+ "May." : "Máj.",
+ "Jun." : "Jún.",
+ "Jul." : "Júl.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dec.",
+ "Apps" : "Aplikácie",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "V mene používateľa je možné použiť iba nasledovné znaky: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
+ "A valid username must be provided" : "Musíte zadať platné používateľské meno",
+ "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ý",
+ "Help" : "Pomoc",
+ "Personal" : "Osobné",
+ "Users" : "Používatelia",
+ "Admin" : "Administrátor",
+ "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",
+ "App '%s' could not be installed!" : "Aplikáciu '%s' nebolo možné nainštalovať!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikáciu \"%s\" nie je možné inštalovať, pretože nie sú splnené nasledovné závislosti: %s",
+ "a safe home for all your data" : "bezpečný domov pre všetky vaše dáta",
+ "File is currently busy, please try again later" : "Súbor sa práve používa, skúste prosím neskôr",
+ "Can't read file" : "Nemožno čítať súbor.",
+ "Application is not enabled" : "Aplikácia nie je zapnutá",
+ "Authentication error" : "Chyba autentifikácie",
+ "Token expired. Please reload page." : "Token vypršal. Obnovte, prosím, stránku.",
+ "Unknown user" : "Neznámy používateľ",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Ovládače databázy (sqlite, mysql, alebo postgresql) nie sú nainštalované.",
+ "Cannot write into \"config\" directory" : "Nie je možné zapisovať do priečinka \"config\"",
+ "Cannot write into \"apps\" directory" : "Nie je možné zapisovať do priečinka \"apps\"",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Toto je zvyčajne možné opraviť tým, že %s udelíte webovému serveru oprávnenie na zápis do priečinka aplikácií %s alebo vypnete obchod s aplikáciami v konfiguračnom súbore.",
+ "Cannot create \"data\" directory (%s)" : "Nie je možné vytvoriť priečinok \"data\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "To je zvyčajne možné opraviť tým <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">že udelíte webovému serveru oprávnenie na zápis do koreňového priečinka</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnenia je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis do koreňového priečinka%s.",
+ "Setting locale to %s failed" : "Nastavenie locale na %s zlyhalo",
+ "Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.",
+ "Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.",
+ "PHP module %s not installed." : "PHP modul %s nie je nainštalovaný.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Voľba PHP „%s“ nie je nastavená na „%s“.",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Použitím týchto nastavení v php.ini dovolí Nextcloudu sa znova spustiť",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload je nastavený na \"%s\", namiesto predpokladanej hodnoty \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Oprava problému spočíva v nastavení <code>mbstring.func_overload</code> na <code>0</code> vo vašom php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Vyžadovaná verzia libxml2 je 2.7.0 a vyššia. Momentálne je nainštalovaná verzia %s.",
+ "To fix this issue update your libxml2 version and restart your web server." : "Pre vyriešenie tohto problému aktualizujte prosím verziu libxml2 a reštartujte webový server.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je zjavne nastavené, aby odstraňovalo bloky vloženej dokumentácie. To zneprístupní niekoľko základných aplikácií.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "To je pravdepodobne spôsobené cache/akcelerátorom ako napr. Zend OPcache alebo eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP moduly boli nainštalované, ale stále sa tvária, že chýbajú?",
+ "Please ask your server administrator to restart the web server." : "Prosím, požiadajte administrátora vášho servera o reštartovanie webového servera.",
+ "PostgreSQL >= 9 required" : "Vyžadované PostgreSQL >= 9",
+ "Please upgrade your database version" : "Prosím, aktualizujte verziu svojej databázy",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Prosím, zmeňte oprávnenia na 0770, aby tento priečinok nemohli ostatní používatelia otvoriť.",
+ "Data directory (%s) is readable by other users" : "Priečinok dát (%s) je prístupný na čítanie ostatným používateľom",
+ "Data directory (%s) must be an absolute path" : "Priečinok dát (%s) musí byť zadaný ako absolútna cesta",
+ "Check the value of \"datadirectory\" in your configuration" : "Skontrolujte hodnotu \"datadirectory\" vo vašej konfigurácii",
+ "Data directory (%s) is invalid" : "Priečinok dát (%s) je neplatný",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Prosím, skontrolujte, či priečinok dát obsahuje súbor \".ocdata\".",
+ "Could not obtain lock type %d on \"%s\"." : "Nepodarilo sa získať zámok typu %d na „%s“.",
+ "4-byte characters are not supported in file names" : "V názve súbou nie sú podporované 4-bajtové znaky.",
+ "App directory already exists" : "Aplikačný priečinok už existuje",
+ "Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
+ "Archive does not contain a directory named %s" : "Archív neobsahuje priečinok zvaný %s",
+ "No source specified when installing app" : "Nešpecifikovaný zdroj pri inštalácii aplikácie",
+ "No href specified when installing app from http" : "Nešpecifikovaný atribút \"href\" pri inštalácii aplikácie pomocou protokolu \"http\"",
+ "No path specified when installing app from local file" : "Nešpecifikovaná cesta pri inštalácii aplikácie z lokálneho súboru",
+ "Archives of type %s are not supported" : "Tento typ archívu %s nie je podporovaný",
+ "Failed to open archive when installing app" : "Zlyhanie pri otváraní archívu počas inštalácie aplikácie",
+ "App does not provide an info.xml file" : "Aplikácia neposkytuje súbor info.xml",
+ "App cannot be installed because appinfo file cannot be read." : "Aplikáciu nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nebolo možné skontrolovať podpis aplikácie. Kontaktujte prosím vývojára aplikácie a skontrolujte administrátorské nastavenia.",
+ "App can't be installed because of not allowed code in the App" : "Aplikácia nemôže byť nainštalovaná pre nepovolený kód v aplikácii",
+ "App can't be installed because it is not compatible with this version of the server" : "Aplikácia nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikácia nemôže byť nainštalovaná pretože obsahuje značku<shipped>true</shipped>, ktorá nie je povolená pre nedodávané aplikácie",
+ "Recommended" : "Odporúčané",
+ "Microsoft Windows Platform is not supported" : "Microsoft Windows platforma nieje podporovaná",
+ "Storage not available" : "Úložisko nie je dostupné"
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ No newline at end of file
diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js
new file mode 100644
index 00000000000..97f60522df5
--- /dev/null
+++ b/lib/l10n/sq.js
@@ -0,0 +1,233 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "Nuk shkruhet dot te drejtoria \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Zakonisht kjo mund të ndreqet duke i akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e formësimeve",
+ "See %s" : "Shihni %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Zakonisht kjo mund të ndreqet duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e formësimeve%s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Skedarët e aplikacionit %$1s nuk u zëvëndësuan në mënyrë korrekte. Sigurohuni që është një version që përputhet me serverin.",
+ "Sample configuration detected" : "U gjet formësim shembull",
+ "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" : "U pa se është kopjuar shembulli për formësime. Kjo mund të prishë instalimin tuaj dhe nuk mbulohet. Ju lutemi, lexoni dokumentimin, përpara se të kryeni ndryshime te config.php",
+ "%1$s and %2$s" : "%1$s dhe %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s dhe %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s dhe %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s dhe %5$s",
+ "PHP %s or higher is required." : "Kërkohet PHP %s ose më sipër.",
+ "PHP with a version lower than %s is required." : "Lypset PHP me një version më të ulët se sa %s.",
+ "%sbit or higher PHP required." : "Lypset PHP %sbit ose më i ri.",
+ "Following databases are supported: %s" : "Mbulohen bazat vijuese të të dhënave: %s",
+ "The command line tool %s could not be found" : "Mjeti rresht urdhrash %s s’u gjet dot",
+ "The library %s is not available." : "Libraria %s s’është e passhme.",
+ "Library %s with a version higher than %s is required - available version %s." : "Kërkohet librari %s me një version më të madh se %s - version gati %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Lypset librari %s me një version më të vogël se %s - version gati %s.",
+ "Following platforms are supported: %s" : "Mbulohen platformat vijuese: %s",
+ "Server version %s or higher is required." : "Versioni i serverit kërkohet %s ose më lartë",
+ "Server version %s or lower is required." : "Versioni i serverit kërkohet %s ose më poshtë",
+ "Unknown filetype" : "Lloj i panjohur skedari",
+ "Invalid image" : "Figurë e pavlefshme",
+ "Avatar image is not square" : "Imazhi avatar nuk është katror",
+ "today" : "sot",
+ "yesterday" : "dje",
+ "_%n day ago_::_%n days ago_" : ["%n ditë më parë","%n ditë më parë"],
+ "last month" : "muajin e shkuar",
+ "_%n month ago_::_%n months ago_" : ["%n muaj më parë","%n muaj më parë"],
+ "last year" : "vitin e shkuar",
+ "_%n year ago_::_%n years ago_" : ["%n vit më parë","%n vjet më parë"],
+ "_%n hour ago_::_%n hours ago_" : ["%n orë më parë","%n orë më parë"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minutë më parë","%n minuta më parë"],
+ "seconds ago" : "sekonda më parë",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "S’ka modul me id: %s. Ju lutemi, aktivizojeni te rregullimet tuaja për aplikacionin ose lidhuni me përgjegjësin tuaj.",
+ "File name is a reserved word" : "Emri i kartelës është një emër i rezervuar",
+ "File name contains at least one invalid character" : "Emri i kartelës përmban të paktën një shenjë të pavlefshme",
+ "File name is too long" : "Emri i kartelës është shumë i gjatë",
+ "Dot files are not allowed" : "Nuk lejohen kartela të fshehura",
+ "Empty filename is not allowed" : "Nuk lejohen emra të zbrazët kartelash",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Konfigurimi i serverit",
+ "Sharing" : "Ndarja",
+ "Encryption" : "Enkriptimi",
+ "Additional settings" : "Konfigurime shtesë",
+ "Tips & tricks" : "Këshilla dhe rrengje",
+ "%s enter the database username and name." : "%s jepni emrin e bazës së të dhënave dhe emrin e përdoruesit për të.",
+ "%s enter the database username." : "%s jepni emrin e përdoruesit të bazës së të dhënave.",
+ "%s enter the database name." : "%s jepni emrin e bazës së të dhënave.",
+ "%s you may not use dots in the database name" : "%s s’mund të përdorni pika te emri i bazës së të dhënave",
+ "Oracle connection could not be established" : "S’u vendos dot lidhje me Oracle",
+ "Oracle username and/or password not valid" : "Emër përdoruesi dhe/ose fjalëkalim Oracle-i i pavlefshëm",
+ "DB Error: \"%s\"" : "Gabim DB-je: \"%s\"",
+ "Offending command was: \"%s\"" : "Urdhri shkaktar qe: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Lypset të jepni ose një llogari ekzistuese, ose llogarinë e përgjegjësit.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Urdhri shkaktar qe: \"%s\", emër: %s, fjalëkalim: %s",
+ "PostgreSQL username and/or password not valid" : "Emër përdoruesi dhe/ose fjalëkalim PostgreSQL jo të vlefshëm",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nuk mbulohet dhe %s s’do të funksionojë si duhet në këtë platformë. Përdoreni nën përgjegjësinë tuaj! ",
+ "For the best results, please consider using a GNU/Linux server instead." : "Për përfundimet më të mira, ju lutemi, më mirë konsideroni përdorimin e një shërbyesi GNU/Linux.",
+ "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." : "Duket se kjo instancë %s xhiron një mjedis PHP 32-bitësh dhe open_basedir është e formësuar, te php.ini. Kjo do të shpjerë në probleme me kartela më të mëdha se 4 GB dhe këshillohet me forcë të mos ndodhë.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Ju lutemi, hiqeni rregullimin open_basedir nga php.ini juaj ose hidhuni te PHP për 64-bit.",
+ "Set an admin username." : "Caktoni një emër përdoruesi për përgjegjësin.",
+ "Set an admin password." : "Caktoni një fjalëkalim për përgjegjësin.",
+ "Can't create or write into the data directory %s" : "S’e krijon ose s’shkruan dot te drejtoria e të dhënave %s",
+ "Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
+ "%s shared »%s« with you" : "%s ndau me ju »%s«",
+ "%s via %s" : "%s përmes %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Ndarja e %s dështoi, ngaqë pjesa përgjegjëse e shërbyesit nuk lejon ndarje prej llojit %i",
+ "Sharing %s failed, because the file does not exist" : "Ndarja e %s me të tjerët dështoi, ngaqë kartela s’ekziston",
+ "You are not allowed to share %s" : "Nuk ju lejohet ta ndani %s me të tjerët",
+ "Sharing %s failed, because you can not share with yourself" : "Ndarja e %s dështoi, ngaqë s’mund të ndani gjëra me vetveten",
+ "Sharing %s failed, because the user %s does not exist" : "Ndarja e %s me të tjerët dështoi, ngaqë përdoruesi %s nuk ekziston",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ndarja për %s dështoi, ngaqë përdoruesi %s s’është anëtar i ndonjë grupi ku %s është anëtar",
+ "Sharing %s failed, because this item is already shared with %s" : "Ndarja për %s dështoi, ngaqë ky objekt është ndarë një herë me %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Ndarja e %s me të tjerët dështoi, ngaqë ky objekt është ndarë tashmë me përdoruesin %s",
+ "Sharing %s failed, because the group %s does not exist" : "Ndarja e %s me të tjerët dështoi, ngaqë grupi %s nuk ekziston",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Ndarja e %s me të tjerët dështoi, ngaqë %s s’është anëtar i grupit %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Lypset të jepni një fjalëkalim që të krijoni një lidhje publike, lejohen vetëm lidhje të mbrojtura",
+ "Sharing %s failed, because sharing with links is not allowed" : "Ndarja e %s me të tjerët dështoi, ngaqë nuk lejohet ndarja me lidhje",
+ "Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
+ "Share type %s is not valid for %s" : "Lloji i ndarjes %s s’është i vlefshëm për %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Caktimi i lejeve për %s dështoi, ngaqë lejet tejkalojnë lejet e akorduara për %s",
+ "Setting permissions for %s failed, because the item was not found" : "Caktimi i lejeve për %s dështoi, ngaqë s’u gjet objekti",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "S’caktohet dot data e skadimit. Ndarjet s’mund të skadojnë më vonë se %s pasi të jenë ofruar",
+ "Cannot set expiration date. Expiration date is in the past" : "S’caktohet dot data e skadimit. Data e skadimit bie në të kaluarën",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "S’hiqet dot data e skadimit. Ndarjet lypse të kenë një datë skadimi.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Mekanizmi i shërbimit për ndarje %s duhet të sendërtojë ndërfaqen OCP\\Share_Backend",
+ "Sharing backend %s not found" : "S’u gjet mekanizmi i shërbimit për ndarje %s",
+ "Sharing backend for %s not found" : "S’u gjet mekanizmi i shërbimit për ndarje për %s",
+ "Sharing failed, because the user %s is the original sharer" : "Ndarja dështoi, ngaqë përdoruesi %s është ai që e ndau fillimisht",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ndarja e %s me të tjerët dështoi, ngaqë lejet tejkalojnë lejet e akorduara për %s",
+ "Sharing %s failed, because resharing is not allowed" : "Ndarja e %s me të tjerët dështoi, ngaqë nuk lejohen rindarje",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ndarja e %s dështoi, ngaqë mekanizmi i shërbimit për ndarje për %s s’gjeti dot burimin për të",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Ndarja e %s me të tjerët dështoi, ngaqë kartela s’u gjet dot te fshehtina e kartelave",
+ "Cannot increase permissions of %s" : "S’mund të shtohen lejet për %s",
+ "Files can't be shared with delete permissions" : "Kartelat s’mund të ndahen me leje fshirjeje",
+ "Files can't be shared with create permissions" : "Kartelat s’mund të ndahen me leje krijimi",
+ "Expiration date is in the past" : "Data e skadimit bie në të kaluarën",
+ "Cannot set expiration date more than %s days in the future" : "S’mund të caktohet data e skadimit më shumë se %s ditë në të ardhmen",
+ "Could not find category \"%s\"" : "S’u gjet kategori \"%s\"",
+ "Sunday" : "E diel",
+ "Monday" : "E hënë",
+ "Tuesday" : "E martë",
+ "Wednesday" : "E mërkurë",
+ "Thursday" : "E enjte",
+ "Friday" : "E premte",
+ "Saturday" : "E shtunë",
+ "Sun." : "Die.",
+ "Mon." : "Hën.",
+ "Tue." : "Mar.",
+ "Wed." : "Mër.",
+ "Thu." : "Enj.",
+ "Fri." : "Pre.",
+ "Sat." : "Sht.",
+ "Su" : "Di",
+ "Mo" : "Hë",
+ "Tu" : "Ma",
+ "We" : "Më",
+ "Th" : "En",
+ "Fr" : "Pr",
+ "Sa" : "Sh",
+ "January" : "Janar",
+ "February" : "Shkurt",
+ "March" : "Mars",
+ "April" : "Prill",
+ "May" : "Maj",
+ "June" : "Qershor",
+ "July" : "Korrik",
+ "August" : "Gusht",
+ "September" : "Shtator",
+ "October" : "Tetor",
+ "November" : "Nëntor",
+ "December" : "Dhjetor",
+ "Jan." : "Jan.",
+ "Feb." : "Shk.",
+ "Mar." : "Mar.",
+ "Apr." : "Pri.",
+ "May." : "Maj.",
+ "Jun." : "Qer.",
+ "Jul." : "Kor.",
+ "Aug." : "Gus.",
+ "Sep." : "Sht.",
+ "Oct." : "Tet.",
+ "Nov." : "Nën.",
+ "Dec." : "Dhj.",
+ "Apps" : "Aplikacione",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Në një emër përdoruesi lejohen vetëm shenjat vijuese: \"a-z\", \"A-Z\", \"0-9\", dhe \"_.@-\"",
+ "A valid username must be provided" : "Duhet dhënë një emër i vlefshëm përdoruesi",
+ "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",
+ "Help" : "Ndihmë",
+ "Personal" : "Personale",
+ "Users" : "Përdorues",
+ "Admin" : "Admin",
+ "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",
+ "App '%s' could not be installed!" : "Aplikacioni \"%s\" nuk mund të instalohet!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Përditësimi \"%s\" s’instalohet dot, ngaqë s’plotësohen varësitë vijuese: %s.",
+ "a safe home for all your data" : "Një shtëpi e sigurt për të dhënat e tua",
+ "File is currently busy, please try again later" : "Kartela tani është e zënë, ju lutemi, riprovoni më vonë.",
+ "Can't read file" : "S'lexohet dot kartela",
+ "Application is not enabled" : "Aplikacioni s’është aktivizuar",
+ "Authentication error" : "Gabim mirëfilltësimi",
+ "Token expired. Please reload page." : "Token-i ka skaduar. Ju lutemi, ringarkoni faqen.",
+ "Unknown user" : "Përdorues i panjohur",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "S’ka baza të dhënash (sqlite, mysql, ose postgresql) të instaluara.",
+ "Cannot write into \"config\" directory" : "S’shkruhet dot te drejtoria \"config\"",
+ "Cannot write into \"apps\" directory" : "S’shkruhet dot te drejtoria \"apps\"",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Zakonisht kjo mund të ndreqet duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e aplikacionit%s ose duke e çaktivizuar appstore-in te kartela e formësimit.",
+ "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Zakonisht kjo mund të ndreqet duke <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">i akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Zakonisht lejet mund të ndreqen duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë%s.",
+ "Setting locale to %s failed" : "Caktimi i gjuhës si %s dështoi",
+ "Please install one of these locales on your system and restart your webserver." : "Ju lutemi, instaloni te sistemi juaj një prej këtyre vendoreve dhe rinisni shërbyesin tuaj web.",
+ "Please ask your server administrator to install the module." : "Ju lutemi, kërkojini përgjegjësit të shërbyesit ta instalojë modulin.",
+ "PHP module %s not installed." : "Moduli PHP %s s’është i instaluar.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Rregullimi PHP \"%s\" s’është vënë si \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Përshtatja e këtij konfigurimi në php.ini do e bëjë Nextcloud të punoj përsëri",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload është caktuar si \"%s\", në vend të vlerës së pritshme \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Për ta ndrequr këtë problem, caktoni për <code>mbstring.func_overload</code> vlerën <code>0</code> te php.ini juaj",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Lypset të paktën libxml2 2.7.0. Hëpërhë e instaluar është %s.",
+ "To fix this issue update your libxml2 version and restart your web server." : "Për të ndrequr këtë problem, përditësoni libxml2 dhe rinisni shërbyesin tuaj web.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Me sa duket, PHP-ja është rregulluar që të heqë blloqe të brendshëm dokumentimi. Kjo do t’i nxjerrë nga funksionimi disa aplikacione bazë.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Kjo ka gjasa të jetë shkaktuar nga një fshehtinë/përshpejtues i tillë si Zend OPcache ose eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "Modulet PHP janë instaluar, por tregohen ende sikur mungojnë?",
+ "Please ask your server administrator to restart the web server." : "Ju lutemi, kërkojini përgjegjësit të shërbyesit tuaj të rinisë shërbyesin web.",
+ "PostgreSQL >= 9 required" : "Lypset PostgreSQL >= 9",
+ "Please upgrade your database version" : "Ju lutemi, përmirësoni bazën tuaj të të dhënave me një version më të ri.",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Ju lutemi, kalojani lejet në 0770, që kështu atë drejtori të mos mund ta shfaqin përdorues të tjerë.",
+ "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë",
+ "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut",
+ "Check the value of \"datadirectory\" in your configuration" : "Kontrolloni vlerën e \"datadirectory\" te formësimi juaj",
+ "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Ju lutemi, kontrolloni që drejtoria e të dhënave përmban në rrënjën e saj një kartelë \".ocdata\".",
+ "Could not obtain lock type %d on \"%s\"." : "S’u mor dot lloj kyçjeje %d në \"%s\".",
+ "Storage unauthorized. %s" : "Depozitë e paautorizuar. %s",
+ "Storage incomplete configuration. %s" : "Formësim jo i plotë i depozitës. %s",
+ "Storage connection error. %s" : "Gabim lidhje te depozita. %s",
+ "Storage is temporarily not available" : "Hapsira ruajtëse nuk është në dispozicion përkohësisht",
+ "Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s",
+ "4-byte characters are not supported in file names" : "Shenjat 4-bajtshe nuk mbulohet në emra kartelash",
+ "App directory already exists" : "Drejtoria e aplikacionit ekziston tashmë",
+ "Can't create app folder. Please fix permissions. %s" : "S’krijohet dot dosje aplikacioni. Ju lutemi, ndreqni lejet. %s",
+ "Archive does not contain a directory named %s" : "Arkivi s’përmban një drejtori të quajtur %s",
+ "No source specified when installing app" : "S’u dha burim gjatë instalimit të aplikacionit",
+ "No href specified when installing app from http" : "S’u tregua href gjatë instalimit të aplikacionit nga http",
+ "No path specified when installing app from local file" : "S’u caktua shteg gjatë instalimit të aplikacionit prej kartele vendore",
+ "Archives of type %s are not supported" : "Nuk mbulohen arkivat e llojit %s",
+ "Failed to open archive when installing app" : "Dështoi në hapje arkivi teksa instalohej aplikacioni",
+ "App does not provide an info.xml file" : "Aplikacioni s’ofron kartele të vlefshme .xml",
+ "App cannot be installed because appinfo file cannot be read." : "Aplikacioni s’mund të instalohet, ngaqë s’lexohet dot kartela appinfo.",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nënshkrimi s’u kontrollua dot. Ju lutemi, lidhuni me zhvilluesin e aplikacionit dhe kontrolloni te skena juaj e përgjegjësit.",
+ "App can't be installed because of not allowed code in the App" : "Aplikacioni s’mund të instalohet, për shkak kodi të palejuar te Aplikacioni",
+ "App can't be installed because it is not compatible with this version of the server" : "Aplikacioni nuk mund të instalohet sepse nuk përputhet me këtë version të serverit.",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikacioni s’mund të instalohet, ngaqë përmban etiketën <shipped>true</shipped> e cila nuk lejohet për aplikacione që s’janë hedhur në qarkullim",
+ "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikacioni s’mund të instalohet, ngaqë versioni te info.xml s’është i njëjti me versionin e treguar nga shitorja e aplikacioneve",
+ "Logging" : "Duke u lidhur",
+ "Recommended" : "E rekomanduar",
+ "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform nuk mbulohet",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Përdorimi i Serverit Nextcloud në një platformë Microsoft Windows nuk mbështetet. Ne ju sugjerojmë të përdorni një server Linux në një makinë virtuale nëse nuk e keni mundësinë që të migroni vetë serverin.",
+ "Storage not available" : "Pa depozitë gati"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json
new file mode 100644
index 00000000000..2adce922b41
--- /dev/null
+++ b/lib/l10n/sq.json
@@ -0,0 +1,231 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "Nuk shkruhet dot te drejtoria \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Zakonisht kjo mund të ndreqet duke i akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e formësimeve",
+ "See %s" : "Shihni %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Zakonisht kjo mund të ndreqet duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e formësimeve%s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Skedarët e aplikacionit %$1s nuk u zëvëndësuan në mënyrë korrekte. Sigurohuni që është një version që përputhet me serverin.",
+ "Sample configuration detected" : "U gjet formësim shembull",
+ "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" : "U pa se është kopjuar shembulli për formësime. Kjo mund të prishë instalimin tuaj dhe nuk mbulohet. Ju lutemi, lexoni dokumentimin, përpara se të kryeni ndryshime te config.php",
+ "%1$s and %2$s" : "%1$s dhe %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s dhe %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s dhe %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s dhe %5$s",
+ "PHP %s or higher is required." : "Kërkohet PHP %s ose më sipër.",
+ "PHP with a version lower than %s is required." : "Lypset PHP me një version më të ulët se sa %s.",
+ "%sbit or higher PHP required." : "Lypset PHP %sbit ose më i ri.",
+ "Following databases are supported: %s" : "Mbulohen bazat vijuese të të dhënave: %s",
+ "The command line tool %s could not be found" : "Mjeti rresht urdhrash %s s’u gjet dot",
+ "The library %s is not available." : "Libraria %s s’është e passhme.",
+ "Library %s with a version higher than %s is required - available version %s." : "Kërkohet librari %s me një version më të madh se %s - version gati %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Lypset librari %s me një version më të vogël se %s - version gati %s.",
+ "Following platforms are supported: %s" : "Mbulohen platformat vijuese: %s",
+ "Server version %s or higher is required." : "Versioni i serverit kërkohet %s ose më lartë",
+ "Server version %s or lower is required." : "Versioni i serverit kërkohet %s ose më poshtë",
+ "Unknown filetype" : "Lloj i panjohur skedari",
+ "Invalid image" : "Figurë e pavlefshme",
+ "Avatar image is not square" : "Imazhi avatar nuk është katror",
+ "today" : "sot",
+ "yesterday" : "dje",
+ "_%n day ago_::_%n days ago_" : ["%n ditë më parë","%n ditë më parë"],
+ "last month" : "muajin e shkuar",
+ "_%n month ago_::_%n months ago_" : ["%n muaj më parë","%n muaj më parë"],
+ "last year" : "vitin e shkuar",
+ "_%n year ago_::_%n years ago_" : ["%n vit më parë","%n vjet më parë"],
+ "_%n hour ago_::_%n hours ago_" : ["%n orë më parë","%n orë më parë"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minutë më parë","%n minuta më parë"],
+ "seconds ago" : "sekonda më parë",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "S’ka modul me id: %s. Ju lutemi, aktivizojeni te rregullimet tuaja për aplikacionin ose lidhuni me përgjegjësin tuaj.",
+ "File name is a reserved word" : "Emri i kartelës është një emër i rezervuar",
+ "File name contains at least one invalid character" : "Emri i kartelës përmban të paktën një shenjë të pavlefshme",
+ "File name is too long" : "Emri i kartelës është shumë i gjatë",
+ "Dot files are not allowed" : "Nuk lejohen kartela të fshehura",
+ "Empty filename is not allowed" : "Nuk lejohen emra të zbrazët kartelash",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Konfigurimi i serverit",
+ "Sharing" : "Ndarja",
+ "Encryption" : "Enkriptimi",
+ "Additional settings" : "Konfigurime shtesë",
+ "Tips & tricks" : "Këshilla dhe rrengje",
+ "%s enter the database username and name." : "%s jepni emrin e bazës së të dhënave dhe emrin e përdoruesit për të.",
+ "%s enter the database username." : "%s jepni emrin e përdoruesit të bazës së të dhënave.",
+ "%s enter the database name." : "%s jepni emrin e bazës së të dhënave.",
+ "%s you may not use dots in the database name" : "%s s’mund të përdorni pika te emri i bazës së të dhënave",
+ "Oracle connection could not be established" : "S’u vendos dot lidhje me Oracle",
+ "Oracle username and/or password not valid" : "Emër përdoruesi dhe/ose fjalëkalim Oracle-i i pavlefshëm",
+ "DB Error: \"%s\"" : "Gabim DB-je: \"%s\"",
+ "Offending command was: \"%s\"" : "Urdhri shkaktar qe: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Lypset të jepni ose një llogari ekzistuese, ose llogarinë e përgjegjësit.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Urdhri shkaktar qe: \"%s\", emër: %s, fjalëkalim: %s",
+ "PostgreSQL username and/or password not valid" : "Emër përdoruesi dhe/ose fjalëkalim PostgreSQL jo të vlefshëm",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nuk mbulohet dhe %s s’do të funksionojë si duhet në këtë platformë. Përdoreni nën përgjegjësinë tuaj! ",
+ "For the best results, please consider using a GNU/Linux server instead." : "Për përfundimet më të mira, ju lutemi, më mirë konsideroni përdorimin e një shërbyesi GNU/Linux.",
+ "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." : "Duket se kjo instancë %s xhiron një mjedis PHP 32-bitësh dhe open_basedir është e formësuar, te php.ini. Kjo do të shpjerë në probleme me kartela më të mëdha se 4 GB dhe këshillohet me forcë të mos ndodhë.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Ju lutemi, hiqeni rregullimin open_basedir nga php.ini juaj ose hidhuni te PHP për 64-bit.",
+ "Set an admin username." : "Caktoni një emër përdoruesi për përgjegjësin.",
+ "Set an admin password." : "Caktoni një fjalëkalim për përgjegjësin.",
+ "Can't create or write into the data directory %s" : "S’e krijon ose s’shkruan dot te drejtoria e të dhënave %s",
+ "Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
+ "%s shared »%s« with you" : "%s ndau me ju »%s«",
+ "%s via %s" : "%s përmes %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Ndarja e %s dështoi, ngaqë pjesa përgjegjëse e shërbyesit nuk lejon ndarje prej llojit %i",
+ "Sharing %s failed, because the file does not exist" : "Ndarja e %s me të tjerët dështoi, ngaqë kartela s’ekziston",
+ "You are not allowed to share %s" : "Nuk ju lejohet ta ndani %s me të tjerët",
+ "Sharing %s failed, because you can not share with yourself" : "Ndarja e %s dështoi, ngaqë s’mund të ndani gjëra me vetveten",
+ "Sharing %s failed, because the user %s does not exist" : "Ndarja e %s me të tjerët dështoi, ngaqë përdoruesi %s nuk ekziston",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ndarja për %s dështoi, ngaqë përdoruesi %s s’është anëtar i ndonjë grupi ku %s është anëtar",
+ "Sharing %s failed, because this item is already shared with %s" : "Ndarja për %s dështoi, ngaqë ky objekt është ndarë një herë me %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Ndarja e %s me të tjerët dështoi, ngaqë ky objekt është ndarë tashmë me përdoruesin %s",
+ "Sharing %s failed, because the group %s does not exist" : "Ndarja e %s me të tjerët dështoi, ngaqë grupi %s nuk ekziston",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Ndarja e %s me të tjerët dështoi, ngaqë %s s’është anëtar i grupit %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Lypset të jepni një fjalëkalim që të krijoni një lidhje publike, lejohen vetëm lidhje të mbrojtura",
+ "Sharing %s failed, because sharing with links is not allowed" : "Ndarja e %s me të tjerët dështoi, ngaqë nuk lejohet ndarja me lidhje",
+ "Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
+ "Share type %s is not valid for %s" : "Lloji i ndarjes %s s’është i vlefshëm për %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Caktimi i lejeve për %s dështoi, ngaqë lejet tejkalojnë lejet e akorduara për %s",
+ "Setting permissions for %s failed, because the item was not found" : "Caktimi i lejeve për %s dështoi, ngaqë s’u gjet objekti",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "S’caktohet dot data e skadimit. Ndarjet s’mund të skadojnë më vonë se %s pasi të jenë ofruar",
+ "Cannot set expiration date. Expiration date is in the past" : "S’caktohet dot data e skadimit. Data e skadimit bie në të kaluarën",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "S’hiqet dot data e skadimit. Ndarjet lypse të kenë një datë skadimi.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Mekanizmi i shërbimit për ndarje %s duhet të sendërtojë ndërfaqen OCP\\Share_Backend",
+ "Sharing backend %s not found" : "S’u gjet mekanizmi i shërbimit për ndarje %s",
+ "Sharing backend for %s not found" : "S’u gjet mekanizmi i shërbimit për ndarje për %s",
+ "Sharing failed, because the user %s is the original sharer" : "Ndarja dështoi, ngaqë përdoruesi %s është ai që e ndau fillimisht",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ndarja e %s me të tjerët dështoi, ngaqë lejet tejkalojnë lejet e akorduara për %s",
+ "Sharing %s failed, because resharing is not allowed" : "Ndarja e %s me të tjerët dështoi, ngaqë nuk lejohen rindarje",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ndarja e %s dështoi, ngaqë mekanizmi i shërbimit për ndarje për %s s’gjeti dot burimin për të",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Ndarja e %s me të tjerët dështoi, ngaqë kartela s’u gjet dot te fshehtina e kartelave",
+ "Cannot increase permissions of %s" : "S’mund të shtohen lejet për %s",
+ "Files can't be shared with delete permissions" : "Kartelat s’mund të ndahen me leje fshirjeje",
+ "Files can't be shared with create permissions" : "Kartelat s’mund të ndahen me leje krijimi",
+ "Expiration date is in the past" : "Data e skadimit bie në të kaluarën",
+ "Cannot set expiration date more than %s days in the future" : "S’mund të caktohet data e skadimit më shumë se %s ditë në të ardhmen",
+ "Could not find category \"%s\"" : "S’u gjet kategori \"%s\"",
+ "Sunday" : "E diel",
+ "Monday" : "E hënë",
+ "Tuesday" : "E martë",
+ "Wednesday" : "E mërkurë",
+ "Thursday" : "E enjte",
+ "Friday" : "E premte",
+ "Saturday" : "E shtunë",
+ "Sun." : "Die.",
+ "Mon." : "Hën.",
+ "Tue." : "Mar.",
+ "Wed." : "Mër.",
+ "Thu." : "Enj.",
+ "Fri." : "Pre.",
+ "Sat." : "Sht.",
+ "Su" : "Di",
+ "Mo" : "Hë",
+ "Tu" : "Ma",
+ "We" : "Më",
+ "Th" : "En",
+ "Fr" : "Pr",
+ "Sa" : "Sh",
+ "January" : "Janar",
+ "February" : "Shkurt",
+ "March" : "Mars",
+ "April" : "Prill",
+ "May" : "Maj",
+ "June" : "Qershor",
+ "July" : "Korrik",
+ "August" : "Gusht",
+ "September" : "Shtator",
+ "October" : "Tetor",
+ "November" : "Nëntor",
+ "December" : "Dhjetor",
+ "Jan." : "Jan.",
+ "Feb." : "Shk.",
+ "Mar." : "Mar.",
+ "Apr." : "Pri.",
+ "May." : "Maj.",
+ "Jun." : "Qer.",
+ "Jul." : "Kor.",
+ "Aug." : "Gus.",
+ "Sep." : "Sht.",
+ "Oct." : "Tet.",
+ "Nov." : "Nën.",
+ "Dec." : "Dhj.",
+ "Apps" : "Aplikacione",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Në një emër përdoruesi lejohen vetëm shenjat vijuese: \"a-z\", \"A-Z\", \"0-9\", dhe \"_.@-\"",
+ "A valid username must be provided" : "Duhet dhënë një emër i vlefshëm përdoruesi",
+ "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",
+ "Help" : "Ndihmë",
+ "Personal" : "Personale",
+ "Users" : "Përdorues",
+ "Admin" : "Admin",
+ "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",
+ "App '%s' could not be installed!" : "Aplikacioni \"%s\" nuk mund të instalohet!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Përditësimi \"%s\" s’instalohet dot, ngaqë s’plotësohen varësitë vijuese: %s.",
+ "a safe home for all your data" : "Një shtëpi e sigurt për të dhënat e tua",
+ "File is currently busy, please try again later" : "Kartela tani është e zënë, ju lutemi, riprovoni më vonë.",
+ "Can't read file" : "S'lexohet dot kartela",
+ "Application is not enabled" : "Aplikacioni s’është aktivizuar",
+ "Authentication error" : "Gabim mirëfilltësimi",
+ "Token expired. Please reload page." : "Token-i ka skaduar. Ju lutemi, ringarkoni faqen.",
+ "Unknown user" : "Përdorues i panjohur",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "S’ka baza të dhënash (sqlite, mysql, ose postgresql) të instaluara.",
+ "Cannot write into \"config\" directory" : "S’shkruhet dot te drejtoria \"config\"",
+ "Cannot write into \"apps\" directory" : "S’shkruhet dot te drejtoria \"apps\"",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Zakonisht kjo mund të ndreqet duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë e aplikacionit%s ose duke e çaktivizuar appstore-in te kartela e formësimit.",
+ "Cannot create \"data\" directory (%s)" : "S’krijohet dot drejtoria \"data\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Zakonisht kjo mund të ndreqet duke <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">i akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Zakonisht lejet mund të ndreqen duke %si akorduar shërbyesit web të drejta shkrimi mbi drejtorinë rrënjë%s.",
+ "Setting locale to %s failed" : "Caktimi i gjuhës si %s dështoi",
+ "Please install one of these locales on your system and restart your webserver." : "Ju lutemi, instaloni te sistemi juaj një prej këtyre vendoreve dhe rinisni shërbyesin tuaj web.",
+ "Please ask your server administrator to install the module." : "Ju lutemi, kërkojini përgjegjësit të shërbyesit ta instalojë modulin.",
+ "PHP module %s not installed." : "Moduli PHP %s s’është i instaluar.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Rregullimi PHP \"%s\" s’është vënë si \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Përshtatja e këtij konfigurimi në php.ini do e bëjë Nextcloud të punoj përsëri",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload është caktuar si \"%s\", në vend të vlerës së pritshme \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Për ta ndrequr këtë problem, caktoni për <code>mbstring.func_overload</code> vlerën <code>0</code> te php.ini juaj",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Lypset të paktën libxml2 2.7.0. Hëpërhë e instaluar është %s.",
+ "To fix this issue update your libxml2 version and restart your web server." : "Për të ndrequr këtë problem, përditësoni libxml2 dhe rinisni shërbyesin tuaj web.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Me sa duket, PHP-ja është rregulluar që të heqë blloqe të brendshëm dokumentimi. Kjo do t’i nxjerrë nga funksionimi disa aplikacione bazë.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Kjo ka gjasa të jetë shkaktuar nga një fshehtinë/përshpejtues i tillë si Zend OPcache ose eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "Modulet PHP janë instaluar, por tregohen ende sikur mungojnë?",
+ "Please ask your server administrator to restart the web server." : "Ju lutemi, kërkojini përgjegjësit të shërbyesit tuaj të rinisë shërbyesin web.",
+ "PostgreSQL >= 9 required" : "Lypset PostgreSQL >= 9",
+ "Please upgrade your database version" : "Ju lutemi, përmirësoni bazën tuaj të të dhënave me një version më të ri.",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Ju lutemi, kalojani lejet në 0770, që kështu atë drejtori të mos mund ta shfaqin përdorues të tjerë.",
+ "Data directory (%s) is readable by other users" : "Drejtoria e të dhënave (%s) është e lexueshme nga përdorues të tjerë",
+ "Data directory (%s) must be an absolute path" : "Drejtoria e të dhënave (%s) duhet të jepë një shteg absolut",
+ "Check the value of \"datadirectory\" in your configuration" : "Kontrolloni vlerën e \"datadirectory\" te formësimi juaj",
+ "Data directory (%s) is invalid" : "Drejtoria e të dhënave (%s) është e pavlefshme",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Ju lutemi, kontrolloni që drejtoria e të dhënave përmban në rrënjën e saj një kartelë \".ocdata\".",
+ "Could not obtain lock type %d on \"%s\"." : "S’u mor dot lloj kyçjeje %d në \"%s\".",
+ "Storage unauthorized. %s" : "Depozitë e paautorizuar. %s",
+ "Storage incomplete configuration. %s" : "Formësim jo i plotë i depozitës. %s",
+ "Storage connection error. %s" : "Gabim lidhje te depozita. %s",
+ "Storage is temporarily not available" : "Hapsira ruajtëse nuk është në dispozicion përkohësisht",
+ "Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s",
+ "4-byte characters are not supported in file names" : "Shenjat 4-bajtshe nuk mbulohet në emra kartelash",
+ "App directory already exists" : "Drejtoria e aplikacionit ekziston tashmë",
+ "Can't create app folder. Please fix permissions. %s" : "S’krijohet dot dosje aplikacioni. Ju lutemi, ndreqni lejet. %s",
+ "Archive does not contain a directory named %s" : "Arkivi s’përmban një drejtori të quajtur %s",
+ "No source specified when installing app" : "S’u dha burim gjatë instalimit të aplikacionit",
+ "No href specified when installing app from http" : "S’u tregua href gjatë instalimit të aplikacionit nga http",
+ "No path specified when installing app from local file" : "S’u caktua shteg gjatë instalimit të aplikacionit prej kartele vendore",
+ "Archives of type %s are not supported" : "Nuk mbulohen arkivat e llojit %s",
+ "Failed to open archive when installing app" : "Dështoi në hapje arkivi teksa instalohej aplikacioni",
+ "App does not provide an info.xml file" : "Aplikacioni s’ofron kartele të vlefshme .xml",
+ "App cannot be installed because appinfo file cannot be read." : "Aplikacioni s’mund të instalohet, ngaqë s’lexohet dot kartela appinfo.",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Nënshkrimi s’u kontrollua dot. Ju lutemi, lidhuni me zhvilluesin e aplikacionit dhe kontrolloni te skena juaj e përgjegjësit.",
+ "App can't be installed because of not allowed code in the App" : "Aplikacioni s’mund të instalohet, për shkak kodi të palejuar te Aplikacioni",
+ "App can't be installed because it is not compatible with this version of the server" : "Aplikacioni nuk mund të instalohet sepse nuk përputhet me këtë version të serverit.",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikacioni s’mund të instalohet, ngaqë përmban etiketën <shipped>true</shipped> e cila nuk lejohet për aplikacione që s’janë hedhur në qarkullim",
+ "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikacioni s’mund të instalohet, ngaqë versioni te info.xml s’është i njëjti me versionin e treguar nga shitorja e aplikacioneve",
+ "Logging" : "Duke u lidhur",
+ "Recommended" : "E rekomanduar",
+ "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform nuk mbulohet",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Përdorimi i Serverit Nextcloud në një platformë Microsoft Windows nuk mbështetet. Ne ju sugjerojmë të përdorni një server Linux në një makinë virtuale nëse nuk e keni mundësinë që të migroni vetë serverin.",
+ "Storage not available" : "Pa depozitë gati"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js
new file mode 100644
index 00000000000..af52142692c
--- /dev/null
+++ b/lib/l10n/sv.js
@@ -0,0 +1,233 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "Kan inte skriva till \"config\" katalogen!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Detta kan vanligtvis åtgärdas genom att ge skrivrättigheter till config katalgogen",
+ "See %s" : "Se %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till konfigurations-katalogen %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filerna i appen %$1s ersattes inte korrekt. Se till att det är en version som är kompatibel med servern.",
+ "Sample configuration detected" : "Exempel-konfiguration detekterad",
+ "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 har detekterats att exempel-konfigurationen har kopierats. Detta kan förstöra din installation och stöds ej. Vänligen läs dokumentationen innan ändringar på config.php utförs",
+ "%1$s and %2$s" : "%1$s och %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s och %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s och %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s och %5$s",
+ "PHP %s or higher is required." : "PHP %s eller högre krävs.",
+ "PHP with a version lower than %s is required." : "PHP med version lägre än %s krävs.",
+ "%sbit or higher PHP required." : "%sbit eller nyare PHP-version krävs.",
+ "Following databases are supported: %s" : "Följande databastyper stödjs: %s",
+ "The command line tool %s could not be found" : "Kommandoradsverktyget %s hittades inte.",
+ "The library %s is not available." : "Biblioteket %s är inte tillgängligt.",
+ "Library %s with a version higher than %s is required - available version %s." : "Bibliotek %s med version högre än %s krävs - tillgänglig version %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Bibliotek %s med version lägre än %s krävs - tillgänglig version %s.",
+ "Following platforms are supported: %s" : "Följande plattformar stödjs: %s",
+ "Server version %s or higher is required." : "Serverversion %s eller nyare krävs.",
+ "Server version %s or lower is required." : "Serverversion %s eller äldre krävs.",
+ "Unknown filetype" : "Okänd filtyp",
+ "Invalid image" : "Ogiltig bild",
+ "Avatar image is not square" : "Profilbilden är inte fyrkantig/kvadrat",
+ "today" : "i dag",
+ "yesterday" : "i går",
+ "_%n day ago_::_%n days ago_" : ["%n dag sedan","%n dagar sedan"],
+ "last month" : "förra månaden",
+ "_%n month ago_::_%n months ago_" : ["%n månad sedan","%n månader sedan"],
+ "last year" : "förra året",
+ "_%n year ago_::_%n years ago_" : ["%n år sedan","%n år sedan"],
+ "_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
+ "seconds ago" : "sekunder sedan",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulen med id: %s finns inte. Vänligen aktivera det i dina app-inställningar eller kontakta din administratör.",
+ "File name is a reserved word" : "Filnamnet är ett reserverat ord",
+ "File name contains at least one invalid character" : "Filnamnet innehåller minst ett ogiltigt tecken",
+ "File name is too long" : "Filnamnet är för långt",
+ "Dot files are not allowed" : "Dot filer är inte tillåtna",
+ "Empty filename is not allowed" : "Tomma filnamn är inte tillåtna",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Serverinställningar",
+ "Sharing" : "Delning",
+ "Encryption" : "Kryptering",
+ "Additional settings" : "Övriga inställningar",
+ "Tips & tricks" : "Knep & Trick",
+ "%s enter the database username and name." : "%s ange användarnamn och namn för databasen.",
+ "%s enter the database username." : "%s ange databasanvändare.",
+ "%s enter the database name." : "%s ange databasnamn",
+ "%s you may not use dots in the database name" : "%s du får inte använda punkter i databasnamnet",
+ "Oracle connection could not be established" : "Oracle-anslutning kunde inte etableras",
+ "Oracle username and/or password not valid" : "Oracle-användarnamnet och/eller lösenordet är felaktigt",
+ "DB Error: \"%s\"" : "DB fel: \"%s\"",
+ "Offending command was: \"%s\"" : "Det felaktiga kommandot var: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Det felande kommandot var: \"%s\", name: %s, password: %s",
+ "PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt",
+ "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öds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
+ "For the best results, please consider using a GNU/Linux server instead." : "För bästa resultat, överväg att använda en GNU/Linux server istället.",
+ "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 verkar som om denna %s instans körs på en 32-bitars PHP miljö och open_basedir har konfigurerats i php.ini. Detta kommer att leda till problem med filer över 4 GB och är verkligen inte rekommenderat!",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Ta bort open_basedir i din php.ini eller byt till 64-bitars PHP.",
+ "Set an admin username." : "Ange ett användarnamn för administratören.",
+ "Set an admin password." : "Ange ett administratörslösenord.",
+ "Can't create or write into the data directory %s" : "Kan inte skapa eller skriva till data-katalogen %s",
+ "Invalid Federated Cloud ID" : "Ogiltigt Federarat Moln-ID",
+ "%s shared »%s« with you" : "%s delade »%s« med dig",
+ "%s via %s" : "%s via %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Misslyckades dela ut %s då backend inte tillåter delningar från typ %i",
+ "Sharing %s failed, because the file does not exist" : "Delning av %s misslyckades på grund av att filen inte existerar",
+ "You are not allowed to share %s" : "Du har inte rätt att dela %s",
+ "Sharing %s failed, because you can not share with yourself" : "Delning %s misslyckades därför att du inte kan dela med dig själv.",
+ "Sharing %s failed, because the user %s does not exist" : "Delning %s misslyckades därför att användaren %s inte existerar",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Delning %s misslyckades därför att användaren %s inte är medlem i någon utav de grupper som %s är medlem i",
+ "Sharing %s failed, because this item is already shared with %s" : "Delning %s misslyckades därför att objektet redan är delat med %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Delning %s misslyckades därför att detta redan är delat med användaren %s",
+ "Sharing %s failed, because the group %s does not exist" : "Delning %s misslyckades därför att gruppen %s inte existerar",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Delning %s misslyckades därför att %s inte ingår i gruppen %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Du måste ange ett lösenord för att skapa en offentlig länk, endast skyddade länkar är tillåtna",
+ "Sharing %s failed, because sharing with links is not allowed" : "Delning %s misslyckades därför att delning utav länkar inte är tillåtet",
+ "Not allowed to create a federated share with the same user" : "Ej tillåtet att skapa en förbundsdelning med samma användare",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Misslyckades dela ut %s, kan inte hitta %s, kanske är servern inte åtkomlig för närvarande.",
+ "Share type %s is not valid for %s" : "Delningstyp %s är inte giltig för %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Misslyckades att sätta rättigheter för %s därför att rättigheterna överskrider de som är tillåtna för %s",
+ "Setting permissions for %s failed, because the item was not found" : "Att sätta rättigheterna för %s misslyckades därför att objektet inte hittades",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Kan inte sätta utgångsdatum. Utdelningar kan inte utgå senare än %s efter de har delats ut",
+ "Cannot set expiration date. Expiration date is in the past" : "Kan inte sätta utgångsdatum. Utgångsdatumet är i det förflutna.",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "Kan ej ta bort utgångsdatumet. Delningen kräver att det finns ett utgångsdatum.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delningsgränssnittet %s måste implementera gränssnittet OCP\\Share_Backend",
+ "Sharing backend %s not found" : "Delningsgränssnittet %s hittades inte",
+ "Sharing backend for %s not found" : "Delningsgränssnittet för %s hittades inte",
+ "Sharing failed, because the user %s is the original sharer" : "Delning misslyckades eftersom användaren %s redan är den som har delat detta.",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Delning %s misslyckades därför att rättigheterna överskrider de rättigheter som är tillåtna för %s",
+ "Sharing %s failed, because resharing is not allowed" : "Delning %s misslyckades därför att vidaredelning inte är tillåten",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Delning %s misslyckades därför att delningsgränsnittet för %s inte kunde hitta sin källa",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Delning %s misslyckades därför att filen inte kunde hittas i filcachen",
+ "Cannot increase permissions of %s" : "Kan ej öka behörigheterna för %s",
+ "Files can't be shared with delete permissions" : "Filerna kan ej delas med \"radera behörigheter\"",
+ "Files can't be shared with create permissions" : "Filerna kan ej delas med \"skapa behörigheter\"",
+ "Expiration date is in the past" : "Utgångsdatum är i det förflutna",
+ "Cannot set expiration date more than %s days in the future" : "Kan ej välja ett utgångsdatum längre fram än %s dagar",
+ "Could not find category \"%s\"" : "Kunde inte hitta kategorin \"%s\"",
+ "Sunday" : "Söndag",
+ "Monday" : "Måndag",
+ "Tuesday" : "Tisdag",
+ "Wednesday" : "Onsdag",
+ "Thursday" : "Torsdag",
+ "Friday" : "Fredag",
+ "Saturday" : "Lördag",
+ "Sun." : "Sön.",
+ "Mon." : "Mån.",
+ "Tue." : "Tis.",
+ "Wed." : "Ons.",
+ "Thu." : "Tors.",
+ "Fri." : "Fre.",
+ "Sat." : "Lör.",
+ "Su" : "Sö",
+ "Mo" : "Må",
+ "Tu" : "Ti",
+ "We" : "On",
+ "Th" : "To",
+ "Fr" : "Fr",
+ "Sa" : "Lö",
+ "January" : "Januari",
+ "February" : "Februari",
+ "March" : "Mars",
+ "April" : "April",
+ "May" : "Maj",
+ "June" : "Juni",
+ "July" : "Juli",
+ "August" : "Augusti",
+ "September" : "September",
+ "October" : "Oktober",
+ "November" : "November",
+ "December" : "December",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Apr.",
+ "May." : "Maj.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dec.",
+ "Apps" : "Applikationer",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Endast följande tecken är tillåtna i användarnamnet: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
+ "A valid username must be provided" : "Ett giltigt användarnamn måste anges",
+ "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",
+ "Help" : "Hjälp",
+ "Personal" : "Personliga Inställningar",
+ "Users" : "Användare",
+ "Admin" : "Administration",
+ "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",
+ "App '%s' could not be installed!" : "Applikationen \"%s\" gick inte att installera!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Applikationen \"%s\" kan ej installeras eftersom följande kriterier inte är uppfyllda: %s",
+ "a safe home for all your data" : "En säker plats för dina filer och data",
+ "File is currently busy, please try again later" : "Filen är för tillfället upptagen, vänligen försök igen senare",
+ "Can't read file" : "Kan ej läsa filen",
+ "Application is not enabled" : "Applikationen är inte aktiverad",
+ "Authentication error" : "Fel vid autentisering",
+ "Token expired. Please reload page." : "Ogiltig token. Ladda om sidan.",
+ "Unknown user" : "Okänd användare",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Inga databasdrivrutiner (sqlite, mysql, eller postgresql) installerade.",
+ "Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen",
+ "Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.",
+ "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> ge webbserver skrivåtkomst till rotkatalogen </a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.",
+ "Setting locale to %s failed" : "Sätta locale till %s misslyckades",
+ "Please install one of these locales on your system and restart your webserver." : "Vänligen installera en av dessa locale på din server och starta om dinn webbserver,",
+ "Please ask your server administrator to install the module." : "Vänligen be din administratör att installera modulen.",
+ "PHP module %s not installed." : "PHP modulen %s är inte installerad.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "PHP inställning \"%s\" är inte inställd på \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Att ändra denna inställning i php.ini kommer göra så att Nextcloud fungerar igen",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload är satt till \"%s\" istället för det förväntade värdet \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "För att åtgärda detta problem sätt värdet <code> mbstring.func_overload till </ code> <code> 0 </ code> i din php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "libxml2 2.7.0 är det minsta som krävs. För närvarande är %s installerat.",
+ "To fix this issue update your libxml2 version and restart your web server." : "För att åtgärda detta problem uppdatera libxml2 versionen och starta om din webbserver.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP är tydligen inställt för att tömma \"inline doc blocks\". Detta kommer att göra flera kärnprogram otillgängliga.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Detta orsakas troligtvis av en cache/accelerator som t ex Zend OPchache eller eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har installerats, men de listas fortfarande som saknade?",
+ "Please ask your server administrator to restart the web server." : "Vänligen be din serveradministratör att starta om webservern.",
+ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs",
+ "Please upgrade your database version" : "Vänligen uppgradera din databas-version",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Vänligen ändra rättigheterna till 0770 så att katalogen inte kan listas utav andra användare.",
+ "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare",
+ "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen",
+ "Check the value of \"datadirectory\" in your configuration" : "Kontrollera värdet av \"datakatalog\" i din konfiguration",
+ "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Vänligen kontrollera att datakatalogen innehåller filen \".ocdata\" i rooten.",
+ "Could not obtain lock type %d on \"%s\"." : "Kunde inte hämta låstyp %d på \"%s\".",
+ "Storage unauthorized. %s" : "Lagringsutrymme ej tillåtet. %s",
+ "Storage incomplete configuration. %s" : "Lagringsutrymme felaktigt inställt. %s",
+ "Storage connection error. %s" : "Lagringsutrymme lyckas inte ansluta. %s",
+ "Storage is temporarily not available" : "Lagringsutrymme är för tillfället inte tillgängligt",
+ "Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s",
+ "4-byte characters are not supported in file names" : "4-bitars tecken är inte tillåtet i filnamn",
+ "App directory already exists" : "Appens mapp finns redan",
+ "Can't create app folder. Please fix permissions. %s" : "Kan inte skapa appens mapp. Var god åtgärda rättigheterna. %s",
+ "Archive does not contain a directory named %s" : "Arkivet innehåller inte en mapp vid namn %s",
+ "No source specified when installing app" : "Ingen källa angiven vid installation av app ",
+ "No href specified when installing app from http" : "Ingen href angiven vid installation av app från http",
+ "No path specified when installing app from local file" : "Ingen sökväg angiven vid installation av app från lokal fil",
+ "Archives of type %s are not supported" : "Arkiv av typen %s stöds ej",
+ "Failed to open archive when installing app" : "Kunde inte öppna arkivet när appen skulle installeras",
+ "App does not provide an info.xml file" : "Appen har ingen info.xml fil",
+ "App cannot be installed because appinfo file cannot be read." : "Appen kan inte installeras eftersom app-informationen inte kan läsas i filen.",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signaturen kunde inte kontrolleras. Vänligen kontakta appens utvecklare och kontrollera administratörsinställningarna.",
+ "App can't be installed because of not allowed code in the App" : "Appen kan inte installeras eftersom att den innehåller otillåten kod",
+ "App can't be installed because it is not compatible with this version of the server" : "Appen kan inte installeras eftersom den inte är förenlig med den här versionen av servern",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan inte installeras eftersom att den innehåller etiketten <shipped>true</shipped> vilket inte är tillåtet för icke inkluderade appar",
+ "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Appen kan inte installeras eftersom det är fel version på info.xml och stämmer inte överens med versionen från \"App Store\"",
+ "Logging" : "Loggning",
+ "Recommended" : "Rekomenderad",
+ "Microsoft Windows Platform is not supported" : "Microsoft Windows-plattformen stöds inte",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Att köra en Nextcloud-Server på Microsoft Windows-plattformen stöds inte. Vi föreslår att du använder en Linux-server i en virtuell maskin om du inte har möjlighet att migrera själva servern.",
+ "Storage not available" : "Lagringsutrymme ej tillgängligt"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json
new file mode 100644
index 00000000000..ac8d56e125f
--- /dev/null
+++ b/lib/l10n/sv.json
@@ -0,0 +1,231 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "Kan inte skriva till \"config\" katalogen!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Detta kan vanligtvis åtgärdas genom att ge skrivrättigheter till config katalgogen",
+ "See %s" : "Se %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till konfigurations-katalogen %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filerna i appen %$1s ersattes inte korrekt. Se till att det är en version som är kompatibel med servern.",
+ "Sample configuration detected" : "Exempel-konfiguration detekterad",
+ "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 har detekterats att exempel-konfigurationen har kopierats. Detta kan förstöra din installation och stöds ej. Vänligen läs dokumentationen innan ändringar på config.php utförs",
+ "%1$s and %2$s" : "%1$s och %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s och %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s och %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s och %5$s",
+ "PHP %s or higher is required." : "PHP %s eller högre krävs.",
+ "PHP with a version lower than %s is required." : "PHP med version lägre än %s krävs.",
+ "%sbit or higher PHP required." : "%sbit eller nyare PHP-version krävs.",
+ "Following databases are supported: %s" : "Följande databastyper stödjs: %s",
+ "The command line tool %s could not be found" : "Kommandoradsverktyget %s hittades inte.",
+ "The library %s is not available." : "Biblioteket %s är inte tillgängligt.",
+ "Library %s with a version higher than %s is required - available version %s." : "Bibliotek %s med version högre än %s krävs - tillgänglig version %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Bibliotek %s med version lägre än %s krävs - tillgänglig version %s.",
+ "Following platforms are supported: %s" : "Följande plattformar stödjs: %s",
+ "Server version %s or higher is required." : "Serverversion %s eller nyare krävs.",
+ "Server version %s or lower is required." : "Serverversion %s eller äldre krävs.",
+ "Unknown filetype" : "Okänd filtyp",
+ "Invalid image" : "Ogiltig bild",
+ "Avatar image is not square" : "Profilbilden är inte fyrkantig/kvadrat",
+ "today" : "i dag",
+ "yesterday" : "i går",
+ "_%n day ago_::_%n days ago_" : ["%n dag sedan","%n dagar sedan"],
+ "last month" : "förra månaden",
+ "_%n month ago_::_%n months ago_" : ["%n månad sedan","%n månader sedan"],
+ "last year" : "förra året",
+ "_%n year ago_::_%n years ago_" : ["%n år sedan","%n år sedan"],
+ "_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
+ "seconds ago" : "sekunder sedan",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulen med id: %s finns inte. Vänligen aktivera det i dina app-inställningar eller kontakta din administratör.",
+ "File name is a reserved word" : "Filnamnet är ett reserverat ord",
+ "File name contains at least one invalid character" : "Filnamnet innehåller minst ett ogiltigt tecken",
+ "File name is too long" : "Filnamnet är för långt",
+ "Dot files are not allowed" : "Dot filer är inte tillåtna",
+ "Empty filename is not allowed" : "Tomma filnamn är inte tillåtna",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Serverinställningar",
+ "Sharing" : "Delning",
+ "Encryption" : "Kryptering",
+ "Additional settings" : "Övriga inställningar",
+ "Tips & tricks" : "Knep & Trick",
+ "%s enter the database username and name." : "%s ange användarnamn och namn för databasen.",
+ "%s enter the database username." : "%s ange databasanvändare.",
+ "%s enter the database name." : "%s ange databasnamn",
+ "%s you may not use dots in the database name" : "%s du får inte använda punkter i databasnamnet",
+ "Oracle connection could not be established" : "Oracle-anslutning kunde inte etableras",
+ "Oracle username and/or password not valid" : "Oracle-användarnamnet och/eller lösenordet är felaktigt",
+ "DB Error: \"%s\"" : "DB fel: \"%s\"",
+ "Offending command was: \"%s\"" : "Det felaktiga kommandot var: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Det felande kommandot var: \"%s\", name: %s, password: %s",
+ "PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt",
+ "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öds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
+ "For the best results, please consider using a GNU/Linux server instead." : "För bästa resultat, överväg att använda en GNU/Linux server istället.",
+ "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 verkar som om denna %s instans körs på en 32-bitars PHP miljö och open_basedir har konfigurerats i php.ini. Detta kommer att leda till problem med filer över 4 GB och är verkligen inte rekommenderat!",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Ta bort open_basedir i din php.ini eller byt till 64-bitars PHP.",
+ "Set an admin username." : "Ange ett användarnamn för administratören.",
+ "Set an admin password." : "Ange ett administratörslösenord.",
+ "Can't create or write into the data directory %s" : "Kan inte skapa eller skriva till data-katalogen %s",
+ "Invalid Federated Cloud ID" : "Ogiltigt Federarat Moln-ID",
+ "%s shared »%s« with you" : "%s delade »%s« med dig",
+ "%s via %s" : "%s via %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Misslyckades dela ut %s då backend inte tillåter delningar från typ %i",
+ "Sharing %s failed, because the file does not exist" : "Delning av %s misslyckades på grund av att filen inte existerar",
+ "You are not allowed to share %s" : "Du har inte rätt att dela %s",
+ "Sharing %s failed, because you can not share with yourself" : "Delning %s misslyckades därför att du inte kan dela med dig själv.",
+ "Sharing %s failed, because the user %s does not exist" : "Delning %s misslyckades därför att användaren %s inte existerar",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Delning %s misslyckades därför att användaren %s inte är medlem i någon utav de grupper som %s är medlem i",
+ "Sharing %s failed, because this item is already shared with %s" : "Delning %s misslyckades därför att objektet redan är delat med %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Delning %s misslyckades därför att detta redan är delat med användaren %s",
+ "Sharing %s failed, because the group %s does not exist" : "Delning %s misslyckades därför att gruppen %s inte existerar",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Delning %s misslyckades därför att %s inte ingår i gruppen %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Du måste ange ett lösenord för att skapa en offentlig länk, endast skyddade länkar är tillåtna",
+ "Sharing %s failed, because sharing with links is not allowed" : "Delning %s misslyckades därför att delning utav länkar inte är tillåtet",
+ "Not allowed to create a federated share with the same user" : "Ej tillåtet att skapa en förbundsdelning med samma användare",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Misslyckades dela ut %s, kan inte hitta %s, kanske är servern inte åtkomlig för närvarande.",
+ "Share type %s is not valid for %s" : "Delningstyp %s är inte giltig för %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Misslyckades att sätta rättigheter för %s därför att rättigheterna överskrider de som är tillåtna för %s",
+ "Setting permissions for %s failed, because the item was not found" : "Att sätta rättigheterna för %s misslyckades därför att objektet inte hittades",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Kan inte sätta utgångsdatum. Utdelningar kan inte utgå senare än %s efter de har delats ut",
+ "Cannot set expiration date. Expiration date is in the past" : "Kan inte sätta utgångsdatum. Utgångsdatumet är i det förflutna.",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "Kan ej ta bort utgångsdatumet. Delningen kräver att det finns ett utgångsdatum.",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delningsgränssnittet %s måste implementera gränssnittet OCP\\Share_Backend",
+ "Sharing backend %s not found" : "Delningsgränssnittet %s hittades inte",
+ "Sharing backend for %s not found" : "Delningsgränssnittet för %s hittades inte",
+ "Sharing failed, because the user %s is the original sharer" : "Delning misslyckades eftersom användaren %s redan är den som har delat detta.",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Delning %s misslyckades därför att rättigheterna överskrider de rättigheter som är tillåtna för %s",
+ "Sharing %s failed, because resharing is not allowed" : "Delning %s misslyckades därför att vidaredelning inte är tillåten",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Delning %s misslyckades därför att delningsgränsnittet för %s inte kunde hitta sin källa",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Delning %s misslyckades därför att filen inte kunde hittas i filcachen",
+ "Cannot increase permissions of %s" : "Kan ej öka behörigheterna för %s",
+ "Files can't be shared with delete permissions" : "Filerna kan ej delas med \"radera behörigheter\"",
+ "Files can't be shared with create permissions" : "Filerna kan ej delas med \"skapa behörigheter\"",
+ "Expiration date is in the past" : "Utgångsdatum är i det förflutna",
+ "Cannot set expiration date more than %s days in the future" : "Kan ej välja ett utgångsdatum längre fram än %s dagar",
+ "Could not find category \"%s\"" : "Kunde inte hitta kategorin \"%s\"",
+ "Sunday" : "Söndag",
+ "Monday" : "Måndag",
+ "Tuesday" : "Tisdag",
+ "Wednesday" : "Onsdag",
+ "Thursday" : "Torsdag",
+ "Friday" : "Fredag",
+ "Saturday" : "Lördag",
+ "Sun." : "Sön.",
+ "Mon." : "Mån.",
+ "Tue." : "Tis.",
+ "Wed." : "Ons.",
+ "Thu." : "Tors.",
+ "Fri." : "Fre.",
+ "Sat." : "Lör.",
+ "Su" : "Sö",
+ "Mo" : "Må",
+ "Tu" : "Ti",
+ "We" : "On",
+ "Th" : "To",
+ "Fr" : "Fr",
+ "Sa" : "Lö",
+ "January" : "Januari",
+ "February" : "Februari",
+ "March" : "Mars",
+ "April" : "April",
+ "May" : "Maj",
+ "June" : "Juni",
+ "July" : "Juli",
+ "August" : "Augusti",
+ "September" : "September",
+ "October" : "Oktober",
+ "November" : "November",
+ "December" : "December",
+ "Jan." : "Jan.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Apr.",
+ "May." : "Maj.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Aug.",
+ "Sep." : "Sep.",
+ "Oct." : "Okt.",
+ "Nov." : "Nov.",
+ "Dec." : "Dec.",
+ "Apps" : "Applikationer",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Endast följande tecken är tillåtna i användarnamnet: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"",
+ "A valid username must be provided" : "Ett giltigt användarnamn måste anges",
+ "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",
+ "Help" : "Hjälp",
+ "Personal" : "Personliga Inställningar",
+ "Users" : "Användare",
+ "Admin" : "Administration",
+ "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",
+ "App '%s' could not be installed!" : "Applikationen \"%s\" gick inte att installera!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Applikationen \"%s\" kan ej installeras eftersom följande kriterier inte är uppfyllda: %s",
+ "a safe home for all your data" : "En säker plats för dina filer och data",
+ "File is currently busy, please try again later" : "Filen är för tillfället upptagen, vänligen försök igen senare",
+ "Can't read file" : "Kan ej läsa filen",
+ "Application is not enabled" : "Applikationen är inte aktiverad",
+ "Authentication error" : "Fel vid autentisering",
+ "Token expired. Please reload page." : "Ogiltig token. Ladda om sidan.",
+ "Unknown user" : "Okänd användare",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Inga databasdrivrutiner (sqlite, mysql, eller postgresql) installerade.",
+ "Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen",
+ "Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.",
+ "Cannot create \"data\" directory (%s)" : "Kan inte skapa \"data\" katalog (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> ge webbserver skrivåtkomst till rotkatalogen </a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.",
+ "Setting locale to %s failed" : "Sätta locale till %s misslyckades",
+ "Please install one of these locales on your system and restart your webserver." : "Vänligen installera en av dessa locale på din server och starta om dinn webbserver,",
+ "Please ask your server administrator to install the module." : "Vänligen be din administratör att installera modulen.",
+ "PHP module %s not installed." : "PHP modulen %s är inte installerad.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "PHP inställning \"%s\" är inte inställd på \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Att ändra denna inställning i php.ini kommer göra så att Nextcloud fungerar igen",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload är satt till \"%s\" istället för det förväntade värdet \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "För att åtgärda detta problem sätt värdet <code> mbstring.func_overload till </ code> <code> 0 </ code> i din php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "libxml2 2.7.0 är det minsta som krävs. För närvarande är %s installerat.",
+ "To fix this issue update your libxml2 version and restart your web server." : "För att åtgärda detta problem uppdatera libxml2 versionen och starta om din webbserver.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP är tydligen inställt för att tömma \"inline doc blocks\". Detta kommer att göra flera kärnprogram otillgängliga.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Detta orsakas troligtvis av en cache/accelerator som t ex Zend OPchache eller eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har installerats, men de listas fortfarande som saknade?",
+ "Please ask your server administrator to restart the web server." : "Vänligen be din serveradministratör att starta om webservern.",
+ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs",
+ "Please upgrade your database version" : "Vänligen uppgradera din databas-version",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Vänligen ändra rättigheterna till 0770 så att katalogen inte kan listas utav andra användare.",
+ "Data directory (%s) is readable by other users" : "Datakatalogen (%s) kan läsas av andra användare",
+ "Data directory (%s) must be an absolute path" : "Datakatalogen (%s) måste vara hela sökvägen",
+ "Check the value of \"datadirectory\" in your configuration" : "Kontrollera värdet av \"datakatalog\" i din konfiguration",
+ "Data directory (%s) is invalid" : "Datakatlogen (%s) är ogiltig",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Vänligen kontrollera att datakatalogen innehåller filen \".ocdata\" i rooten.",
+ "Could not obtain lock type %d on \"%s\"." : "Kunde inte hämta låstyp %d på \"%s\".",
+ "Storage unauthorized. %s" : "Lagringsutrymme ej tillåtet. %s",
+ "Storage incomplete configuration. %s" : "Lagringsutrymme felaktigt inställt. %s",
+ "Storage connection error. %s" : "Lagringsutrymme lyckas inte ansluta. %s",
+ "Storage is temporarily not available" : "Lagringsutrymme är för tillfället inte tillgängligt",
+ "Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s",
+ "4-byte characters are not supported in file names" : "4-bitars tecken är inte tillåtet i filnamn",
+ "App directory already exists" : "Appens mapp finns redan",
+ "Can't create app folder. Please fix permissions. %s" : "Kan inte skapa appens mapp. Var god åtgärda rättigheterna. %s",
+ "Archive does not contain a directory named %s" : "Arkivet innehåller inte en mapp vid namn %s",
+ "No source specified when installing app" : "Ingen källa angiven vid installation av app ",
+ "No href specified when installing app from http" : "Ingen href angiven vid installation av app från http",
+ "No path specified when installing app from local file" : "Ingen sökväg angiven vid installation av app från lokal fil",
+ "Archives of type %s are not supported" : "Arkiv av typen %s stöds ej",
+ "Failed to open archive when installing app" : "Kunde inte öppna arkivet när appen skulle installeras",
+ "App does not provide an info.xml file" : "Appen har ingen info.xml fil",
+ "App cannot be installed because appinfo file cannot be read." : "Appen kan inte installeras eftersom app-informationen inte kan läsas i filen.",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "Signaturen kunde inte kontrolleras. Vänligen kontakta appens utvecklare och kontrollera administratörsinställningarna.",
+ "App can't be installed because of not allowed code in the App" : "Appen kan inte installeras eftersom att den innehåller otillåten kod",
+ "App can't be installed because it is not compatible with this version of the server" : "Appen kan inte installeras eftersom den inte är förenlig med den här versionen av servern",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan inte installeras eftersom att den innehåller etiketten <shipped>true</shipped> vilket inte är tillåtet för icke inkluderade appar",
+ "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Appen kan inte installeras eftersom det är fel version på info.xml och stämmer inte överens med versionen från \"App Store\"",
+ "Logging" : "Loggning",
+ "Recommended" : "Rekomenderad",
+ "Microsoft Windows Platform is not supported" : "Microsoft Windows-plattformen stöds inte",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Att köra en Nextcloud-Server på Microsoft Windows-plattformen stöds inte. Vi föreslår att du använder en Linux-server i en virtuell maskin om du inte har möjlighet att migrera själva servern.",
+ "Storage not available" : "Lagringsutrymme ej tillgängligt"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
new file mode 100644
index 00000000000..e2c683b68bb
--- /dev/null
+++ b/lib/l10n/zh_CN.js
@@ -0,0 +1,233 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "无法写入 \"config\" 目录!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "您可以设置 Web 服务器对 config 目录的写权限修复这个问题",
+ "See %s" : "查看 %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "您可以由 %s 设置 Web 服务器对 config 目录 %s 的写权限修复这个问题",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "应用 %$1s 的文件替换不正确. 请确认版本与当前服务器兼容.",
+ "Sample configuration detected" : "示例配置检测",
+ "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" : "您似乎直接把 config.php 的样例文件直接复制使用. 这可能会破坏您的安装. 在对 config.php 进行修改之前请先阅读相关文档.",
+ "%1$s and %2$s" : "%1$s 和 %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s 和 %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s 和 %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s 和 %5$s",
+ "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
+ "PHP with a version lower than %s is required." : "需要版本低于 %s 的PHP.",
+ "%sbit or higher PHP required." : "需要 %s 或更高版本的 PHP",
+ "Following databases are supported: %s" : "支持以下数据库: %s",
+ "The command line tool %s could not be found" : "命令行工具 %s 未找到",
+ "The library %s is not available." : "库文件 %s 不可用",
+ "Library %s with a version higher than %s is required - available version %s." : "%s 需要 %s 或更高的版本 - 可用版本 %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "%s 需要 %s 或更低的版本 - 可用版本 %s.",
+ "Following platforms are supported: %s" : "支持以下平台:%s",
+ "Server version %s or higher is required." : "需要服务器版本 %s 或更高版本。",
+ "Server version %s or lower is required." : "需要服务器版本 %s 或更低版本。",
+ "Unknown filetype" : "未知的文件类型",
+ "Invalid image" : "无效的图像",
+ "Avatar image is not square" : "头像图像不是正方形",
+ "today" : "今天",
+ "yesterday" : "昨天",
+ "_%n day ago_::_%n days ago_" : ["%n 天前"],
+ "last month" : "上月",
+ "_%n month ago_::_%n months ago_" : ["%n 月前"],
+ "last year" : "去年",
+ "_%n year ago_::_%n years ago_" : ["%n 年前"],
+ "_%n hour ago_::_%n hours ago_" : ["%n 小时前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"],
+ "seconds ago" : "秒前",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ID 为 %s 的模块不存在. 请在应用设置中启用或联系您的管理员.",
+ "File name is a reserved word" : "文件名包含敏感字符",
+ "File name contains at least one invalid character" : "文件名中存在至少一个非法字符",
+ "File name is too long" : "文件名过长",
+ "Dot files are not allowed" : ".文件 不被允许",
+ "Empty filename is not allowed" : "不允许使用空名称。",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "服务器设置",
+ "Sharing" : "分享",
+ "Encryption" : "加密",
+ "Additional settings" : "其他设置",
+ "Tips & tricks" : "小提示",
+ "%s enter the database username and name." : "%s 输入数据库用户名和名称.",
+ "%s enter the database username." : "%s 输入数据库用户名。",
+ "%s enter the database name." : "%s 输入数据库名称。",
+ "%s you may not use dots in the database name" : "%s 您不能在数据库名称中使用英文句号。",
+ "Oracle connection could not be established" : "不能建立甲骨文连接",
+ "Oracle username and/or password not valid" : "Oracle 数据库用户名和/或密码无效",
+ "DB Error: \"%s\"" : "数据库错误:\"%s\"",
+ "Offending command was: \"%s\"" : "冲突命令为:\"%s\"",
+ "You need to enter either an existing account or the administrator." : "你需要输入一个数据库中已有的账户或管理员账户。",
+ "Offending command was: \"%s\", name: %s, password: %s" : "冲突命令为:\"%s\",名称:%s,密码:%s",
+ "PostgreSQL username and/or password not valid" : "PostgreSQL 数据库用户名和/或密码无效",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X 不被支持并且 %s 在这个平台上无法正常工作。请自行承担风险!",
+ "For the best results, please consider using a GNU/Linux server instead." : "为了达到最好的效果,请考虑使用 GNU/Linux 服务器。",
+ "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." : "看起来这个 %s 实例运行在32位PHP环境中并且已在php.ini中配置open_basedir。这将在文件超过4GB时出现问题,我们极力反对这样做。",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "请删除php.ini中的open_basedir设置或切换到64位PHP。",
+ "Set an admin username." : "请设置一个管理员用户名。",
+ "Set an admin password." : "请设置一个管理员密码。",
+ "Can't create or write into the data directory %s" : "无法创建或写入数据目录 %s",
+ "Invalid Federated Cloud ID" : "无效的联合云ID",
+ "%s shared »%s« with you" : "%s 向您分享了 »%s«",
+ "%s via %s" : "%s 通过 %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "分享 %s 失败, 因为后端不允许分享 %i 类型",
+ "Sharing %s failed, because the file does not exist" : "分享 %s 失败, 因为文件不存在.",
+ "You are not allowed to share %s" : "您无权分享 %s",
+ "Sharing %s failed, because you can not share with yourself" : "分享 %s 失败, 因为您不能分享给自己",
+ "Sharing %s failed, because the user %s does not exist" : "分享 %s 失败, 因为用户 %s 不存在",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "分享 %s 失败, 因为用户 %s 不是 %s 所属的任何组的用户",
+ "Sharing %s failed, because this item is already shared with %s" : "分享 %s 失败, 因为该项已经分享给用户 %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "分享 %s 失败, 因为该项已经分享给用户 %s",
+ "Sharing %s failed, because the group %s does not exist" : "分享 %s 失败, 因为 %s 分组不存在",
+ "Sharing %s failed, because %s is not a member of the group %s" : "分享 %s 失败, 因为 %s 不是 %s 分组的成员",
+ "You need to provide a password to create a public link, only protected links are allowed" : "链接分享需要密码, 您需要提供一个密码以创建公开连接",
+ "Sharing %s failed, because sharing with links is not allowed" : "分享 %s 失败, 因为不允许使用链接分享",
+ "Not allowed to create a federated share with the same user" : "不能给你自己分享文件",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "分享 %s 失败, 无法找到 %s, 该服务当前无法连接.",
+ "Share type %s is not valid for %s" : "%s 不是 %s 的合法共享类型",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "设置 %s 权限失败,因为权限超出了 %s 已有权限。",
+ "Setting permissions for %s failed, because the item was not found" : "设置 %s 的权限失败,因为未找到到对应项",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "无法设置过期时间. 过期时间不能晚于其分享时间 %s",
+ "Cannot set expiration date. Expiration date is in the past" : "无法设置过期时间. 过期时间不能为过去",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "无法清除过期时间. 每个分享必须有一个过期时间",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "分享后端 %s 必须实现 OCP\\Share_Backend 接口",
+ "Sharing backend %s not found" : "%s 的分享后端未找到",
+ "Sharing backend for %s not found" : "%s 的分享后端未找到",
+ "Sharing failed, because the user %s is the original sharer" : "分享失败, 因为用户 %s 是原始的分享者.",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "分享 %s 失败, 因为权限超过了 %s 的已有权限",
+ "Sharing %s failed, because resharing is not allowed" : "分享 %s 失败, 因为不允许二次共享",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "分享 %s 失败, 因为无法找到 %s 分享后端的来源",
+ "Sharing %s failed, because the file could not be found in the file cache" : "分享 %s 失败, 因为文件缓存中找不到该文件",
+ "Cannot increase permissions of %s" : "无法提升 %s 的权限",
+ "Files can't be shared with delete permissions" : "无法分享有删除权限的文件",
+ "Files can't be shared with create permissions" : "无法分享有创建权限的文件",
+ "Expiration date is in the past" : "到期日期已过.",
+ "Cannot set expiration date more than %s days in the future" : "无法将过期日期设置为超过 %s 天.",
+ "Could not find category \"%s\"" : "无法找到分类 \"%s\"",
+ "Sunday" : "星期日",
+ "Monday" : "星期一",
+ "Tuesday" : "星期二",
+ "Wednesday" : "星期三",
+ "Thursday" : "星期四",
+ "Friday" : "星期五",
+ "Saturday" : "星期六",
+ "Sun." : "周日",
+ "Mon." : "周一",
+ "Tue." : "周二",
+ "Wed." : "周三",
+ "Thu." : "周四",
+ "Fri." : "周五",
+ "Sat." : "周六",
+ "Su" : "日",
+ "Mo" : "一",
+ "Tu" : "二",
+ "We" : "三",
+ "Th" : "四",
+ "Fr" : "五",
+ "Sa" : "六",
+ "January" : "一月",
+ "February" : "二月",
+ "March" : "三月",
+ "April" : "四月",
+ "May" : "五月",
+ "June" : "六月",
+ "July" : "七月",
+ "August" : "八月",
+ "September" : "九月",
+ "October" : "十月",
+ "November" : "十一月",
+ "December" : "十二月",
+ "Jan." : "一月",
+ "Feb." : "二月",
+ "Mar." : "三月",
+ "Apr." : "四月",
+ "May." : "五月",
+ "Jun." : "六月",
+ "Jul." : "七月",
+ "Aug." : "八月",
+ "Sep." : "九月",
+ "Oct." : "十月",
+ "Nov." : "十一月",
+ "Dec." : "十二月",
+ "Apps" : "应用",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "在用户名中只允许使用以下字符:“a-z”,“A-Z”,“0-9”和\"_.@-'\"",
+ "A valid username must be provided" : "必须提供合法的用户名",
+ "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" : "用户已禁用",
+ "Help" : "帮助",
+ "Personal" : "个人",
+ "Users" : "用户",
+ "Admin" : "管理",
+ "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 名称",
+ "App '%s' could not be installed!" : "应用程序 '%s' 无法被安装!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "应用程序 \"%s\" 无法被安装,因为为满足下列依赖关系: %s",
+ "a safe home for all your data" : "给您所有的数据一个安全的家",
+ "File is currently busy, please try again later" : "文件当前正忙,请稍后再试",
+ "Can't read file" : "无法读取文件",
+ "Application is not enabled" : "应用程序未启用",
+ "Authentication error" : "认证出错",
+ "Token expired. Please reload page." : "Token 过期,请刷新页面。",
+ "Unknown user" : "未知用户",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "没有安装数据库驱动 (SQLite、MySQL 或 PostgreSQL)。",
+ "Cannot write into \"config\" directory" : "无法写入“config”目录",
+ "Cannot write into \"apps\" directory" : "无法写入“apps”目录",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "您可以由 %s 设置 Web 服务器对应用目录 %s 的写权限或在配置文件中禁用应用商店可以修复这个问题.",
+ "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "点击 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">设置 Web 服务器对根目录的写入权限</a> 可修复这个问题.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "您可以由 %s 设置 Web 服务器对根目录 %s 的写权限可以修复这个问题.",
+ "Setting locale to %s failed" : "设置语言为 %s 失败",
+ "Please install one of these locales on your system and restart your webserver." : "请在您的系统中安装下述一种语言并重启 Web 服务器.",
+ "Please ask your server administrator to install the module." : "请联系服务器管理员安装模块.",
+ "PHP module %s not installed." : "PHP %s 模块未安装.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "PHP 选项 \"%s\" 未设置为 \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "在 php.ini 中调整该设置将导致 Nextcloud 重新运行",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload 当前设置为 \"%s\", 预期值为 \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "请在 php.ini 中设置 <code>mbstring.func_overload</code> 为 <code>0</code> 以解决该问题",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "至少需要 libxml2 2.7.0. 当前安装 %s.",
+ "To fix this issue update your libxml2 version and restart your web server." : "升级您的 libxml2 版本然后重启 Web 服务器以解决该问题.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除内联块, 这将导致多个核心应用无法访问.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "这可能由缓存/加速器导致的, 例如 Zend OPcache 或 eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP 模块已经安装, 但仍然显示未安装?",
+ "Please ask your server administrator to restart the web server." : "请联系服务器管理员重启 Web 服务器.",
+ "PostgreSQL >= 9 required" : "要求 PostgreSQL >= 9",
+ "Please upgrade your database version" : "请升级您的数据库版本",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "请更改权限为 0770 以避免其他用户查看目录.",
+ "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取",
+ "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径",
+ "Check the value of \"datadirectory\" in your configuration" : "请检查配置文件中 \"datadirectory\" 的值",
+ "Data directory (%s) is invalid" : "数据目录 (%s) 无效",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "请检查根目录下 data 目录中包含名为 \".ocdata\" 的文件.",
+ "Could not obtain lock type %d on \"%s\"." : "无法在 \"%s\" 上获取锁类型 %d.",
+ "Storage unauthorized. %s" : "存储认证失败. %s",
+ "Storage incomplete configuration. %s" : "存储未完成配置. %s",
+ "Storage connection error. %s" : "存储连接错误. %s",
+ "Storage is temporarily not available" : "存储暂时不可用",
+ "Storage connection timeout. %s" : "存储连接超时. %s",
+ "4-byte characters are not supported in file names" : "文件名中不支持 4 字节字符",
+ "App directory already exists" : "应用目录已经存在",
+ "Can't create app folder. Please fix permissions. %s" : "无法创建应用文件夹. 请修改权限. %s",
+ "Archive does not contain a directory named %s" : "压缩文件中不包含目录 %s",
+ "No source specified when installing app" : "安装应用时未指定来源",
+ "No href specified when installing app from http" : "从 http 安装应用时未指定链接",
+ "No path specified when installing app from local file" : "从本地文件安装应用时未指定路径",
+ "Archives of type %s are not supported" : "不支持 %s 的压缩格式",
+ "Failed to open archive when installing app" : "安装应用时打开文件失败",
+ "App does not provide an info.xml file" : "应用未提供 info.xml 文件",
+ "App cannot be installed because appinfo file cannot be read." : "无法安装应用, 因为无法读取应用信息文件",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "签名检查失败. 请联系应用开发者并检查您的管理界面",
+ "App can't be installed because of not allowed code in the App" : "无法安装应用, 因为应用中包含不允许的代码",
+ "App can't be installed because it is not compatible with this version of the server" : "无法安装应用, 因为应用不兼容当前服务器的版本",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "无法安装应用, 因为应用包含 <shipped>true</shipped> 标签",
+ "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "无法安装应用, 因为 info.xml 中的版本与应用市场中的版本不同",
+ "Logging" : "日志",
+ "Recommended" : "推荐",
+ "Microsoft Windows Platform is not supported" : "不支持 Microsoft Windows 平台",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "不支持在 Microsoft Windows 平台运行 Nextcloud 服务器. 如果您没有迁移服务器的计划, 我们建议您在虚拟机中使用 Linux 服务器.",
+ "Storage not available" : "存储空间不可用"
+},
+"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
new file mode 100644
index 00000000000..f5b88f87ad9
--- /dev/null
+++ b/lib/l10n/zh_CN.json
@@ -0,0 +1,231 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "无法写入 \"config\" 目录!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "您可以设置 Web 服务器对 config 目录的写权限修复这个问题",
+ "See %s" : "查看 %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "您可以由 %s 设置 Web 服务器对 config 目录 %s 的写权限修复这个问题",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "应用 %$1s 的文件替换不正确. 请确认版本与当前服务器兼容.",
+ "Sample configuration detected" : "示例配置检测",
+ "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" : "您似乎直接把 config.php 的样例文件直接复制使用. 这可能会破坏您的安装. 在对 config.php 进行修改之前请先阅读相关文档.",
+ "%1$s and %2$s" : "%1$s 和 %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s 和 %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s 和 %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s 和 %5$s",
+ "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
+ "PHP with a version lower than %s is required." : "需要版本低于 %s 的PHP.",
+ "%sbit or higher PHP required." : "需要 %s 或更高版本的 PHP",
+ "Following databases are supported: %s" : "支持以下数据库: %s",
+ "The command line tool %s could not be found" : "命令行工具 %s 未找到",
+ "The library %s is not available." : "库文件 %s 不可用",
+ "Library %s with a version higher than %s is required - available version %s." : "%s 需要 %s 或更高的版本 - 可用版本 %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "%s 需要 %s 或更低的版本 - 可用版本 %s.",
+ "Following platforms are supported: %s" : "支持以下平台:%s",
+ "Server version %s or higher is required." : "需要服务器版本 %s 或更高版本。",
+ "Server version %s or lower is required." : "需要服务器版本 %s 或更低版本。",
+ "Unknown filetype" : "未知的文件类型",
+ "Invalid image" : "无效的图像",
+ "Avatar image is not square" : "头像图像不是正方形",
+ "today" : "今天",
+ "yesterday" : "昨天",
+ "_%n day ago_::_%n days ago_" : ["%n 天前"],
+ "last month" : "上月",
+ "_%n month ago_::_%n months ago_" : ["%n 月前"],
+ "last year" : "去年",
+ "_%n year ago_::_%n years ago_" : ["%n 年前"],
+ "_%n hour ago_::_%n hours ago_" : ["%n 小时前"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n 分钟前"],
+ "seconds ago" : "秒前",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ID 为 %s 的模块不存在. 请在应用设置中启用或联系您的管理员.",
+ "File name is a reserved word" : "文件名包含敏感字符",
+ "File name contains at least one invalid character" : "文件名中存在至少一个非法字符",
+ "File name is too long" : "文件名过长",
+ "Dot files are not allowed" : ".文件 不被允许",
+ "Empty filename is not allowed" : "不允许使用空名称。",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "服务器设置",
+ "Sharing" : "分享",
+ "Encryption" : "加密",
+ "Additional settings" : "其他设置",
+ "Tips & tricks" : "小提示",
+ "%s enter the database username and name." : "%s 输入数据库用户名和名称.",
+ "%s enter the database username." : "%s 输入数据库用户名。",
+ "%s enter the database name." : "%s 输入数据库名称。",
+ "%s you may not use dots in the database name" : "%s 您不能在数据库名称中使用英文句号。",
+ "Oracle connection could not be established" : "不能建立甲骨文连接",
+ "Oracle username and/or password not valid" : "Oracle 数据库用户名和/或密码无效",
+ "DB Error: \"%s\"" : "数据库错误:\"%s\"",
+ "Offending command was: \"%s\"" : "冲突命令为:\"%s\"",
+ "You need to enter either an existing account or the administrator." : "你需要输入一个数据库中已有的账户或管理员账户。",
+ "Offending command was: \"%s\", name: %s, password: %s" : "冲突命令为:\"%s\",名称:%s,密码:%s",
+ "PostgreSQL username and/or password not valid" : "PostgreSQL 数据库用户名和/或密码无效",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X 不被支持并且 %s 在这个平台上无法正常工作。请自行承担风险!",
+ "For the best results, please consider using a GNU/Linux server instead." : "为了达到最好的效果,请考虑使用 GNU/Linux 服务器。",
+ "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." : "看起来这个 %s 实例运行在32位PHP环境中并且已在php.ini中配置open_basedir。这将在文件超过4GB时出现问题,我们极力反对这样做。",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "请删除php.ini中的open_basedir设置或切换到64位PHP。",
+ "Set an admin username." : "请设置一个管理员用户名。",
+ "Set an admin password." : "请设置一个管理员密码。",
+ "Can't create or write into the data directory %s" : "无法创建或写入数据目录 %s",
+ "Invalid Federated Cloud ID" : "无效的联合云ID",
+ "%s shared »%s« with you" : "%s 向您分享了 »%s«",
+ "%s via %s" : "%s 通过 %s",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "分享 %s 失败, 因为后端不允许分享 %i 类型",
+ "Sharing %s failed, because the file does not exist" : "分享 %s 失败, 因为文件不存在.",
+ "You are not allowed to share %s" : "您无权分享 %s",
+ "Sharing %s failed, because you can not share with yourself" : "分享 %s 失败, 因为您不能分享给自己",
+ "Sharing %s failed, because the user %s does not exist" : "分享 %s 失败, 因为用户 %s 不存在",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "分享 %s 失败, 因为用户 %s 不是 %s 所属的任何组的用户",
+ "Sharing %s failed, because this item is already shared with %s" : "分享 %s 失败, 因为该项已经分享给用户 %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "分享 %s 失败, 因为该项已经分享给用户 %s",
+ "Sharing %s failed, because the group %s does not exist" : "分享 %s 失败, 因为 %s 分组不存在",
+ "Sharing %s failed, because %s is not a member of the group %s" : "分享 %s 失败, 因为 %s 不是 %s 分组的成员",
+ "You need to provide a password to create a public link, only protected links are allowed" : "链接分享需要密码, 您需要提供一个密码以创建公开连接",
+ "Sharing %s failed, because sharing with links is not allowed" : "分享 %s 失败, 因为不允许使用链接分享",
+ "Not allowed to create a federated share with the same user" : "不能给你自己分享文件",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "分享 %s 失败, 无法找到 %s, 该服务当前无法连接.",
+ "Share type %s is not valid for %s" : "%s 不是 %s 的合法共享类型",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "设置 %s 权限失败,因为权限超出了 %s 已有权限。",
+ "Setting permissions for %s failed, because the item was not found" : "设置 %s 的权限失败,因为未找到到对应项",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "无法设置过期时间. 过期时间不能晚于其分享时间 %s",
+ "Cannot set expiration date. Expiration date is in the past" : "无法设置过期时间. 过期时间不能为过去",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "无法清除过期时间. 每个分享必须有一个过期时间",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "分享后端 %s 必须实现 OCP\\Share_Backend 接口",
+ "Sharing backend %s not found" : "%s 的分享后端未找到",
+ "Sharing backend for %s not found" : "%s 的分享后端未找到",
+ "Sharing failed, because the user %s is the original sharer" : "分享失败, 因为用户 %s 是原始的分享者.",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "分享 %s 失败, 因为权限超过了 %s 的已有权限",
+ "Sharing %s failed, because resharing is not allowed" : "分享 %s 失败, 因为不允许二次共享",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "分享 %s 失败, 因为无法找到 %s 分享后端的来源",
+ "Sharing %s failed, because the file could not be found in the file cache" : "分享 %s 失败, 因为文件缓存中找不到该文件",
+ "Cannot increase permissions of %s" : "无法提升 %s 的权限",
+ "Files can't be shared with delete permissions" : "无法分享有删除权限的文件",
+ "Files can't be shared with create permissions" : "无法分享有创建权限的文件",
+ "Expiration date is in the past" : "到期日期已过.",
+ "Cannot set expiration date more than %s days in the future" : "无法将过期日期设置为超过 %s 天.",
+ "Could not find category \"%s\"" : "无法找到分类 \"%s\"",
+ "Sunday" : "星期日",
+ "Monday" : "星期一",
+ "Tuesday" : "星期二",
+ "Wednesday" : "星期三",
+ "Thursday" : "星期四",
+ "Friday" : "星期五",
+ "Saturday" : "星期六",
+ "Sun." : "周日",
+ "Mon." : "周一",
+ "Tue." : "周二",
+ "Wed." : "周三",
+ "Thu." : "周四",
+ "Fri." : "周五",
+ "Sat." : "周六",
+ "Su" : "日",
+ "Mo" : "一",
+ "Tu" : "二",
+ "We" : "三",
+ "Th" : "四",
+ "Fr" : "五",
+ "Sa" : "六",
+ "January" : "一月",
+ "February" : "二月",
+ "March" : "三月",
+ "April" : "四月",
+ "May" : "五月",
+ "June" : "六月",
+ "July" : "七月",
+ "August" : "八月",
+ "September" : "九月",
+ "October" : "十月",
+ "November" : "十一月",
+ "December" : "十二月",
+ "Jan." : "一月",
+ "Feb." : "二月",
+ "Mar." : "三月",
+ "Apr." : "四月",
+ "May." : "五月",
+ "Jun." : "六月",
+ "Jul." : "七月",
+ "Aug." : "八月",
+ "Sep." : "九月",
+ "Oct." : "十月",
+ "Nov." : "十一月",
+ "Dec." : "十二月",
+ "Apps" : "应用",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "在用户名中只允许使用以下字符:“a-z”,“A-Z”,“0-9”和\"_.@-'\"",
+ "A valid username must be provided" : "必须提供合法的用户名",
+ "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" : "用户已禁用",
+ "Help" : "帮助",
+ "Personal" : "个人",
+ "Users" : "用户",
+ "Admin" : "管理",
+ "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 名称",
+ "App '%s' could not be installed!" : "应用程序 '%s' 无法被安装!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "应用程序 \"%s\" 无法被安装,因为为满足下列依赖关系: %s",
+ "a safe home for all your data" : "给您所有的数据一个安全的家",
+ "File is currently busy, please try again later" : "文件当前正忙,请稍后再试",
+ "Can't read file" : "无法读取文件",
+ "Application is not enabled" : "应用程序未启用",
+ "Authentication error" : "认证出错",
+ "Token expired. Please reload page." : "Token 过期,请刷新页面。",
+ "Unknown user" : "未知用户",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "没有安装数据库驱动 (SQLite、MySQL 或 PostgreSQL)。",
+ "Cannot write into \"config\" directory" : "无法写入“config”目录",
+ "Cannot write into \"apps\" directory" : "无法写入“apps”目录",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "您可以由 %s 设置 Web 服务器对应用目录 %s 的写权限或在配置文件中禁用应用商店可以修复这个问题.",
+ "Cannot create \"data\" directory (%s)" : "无法创建“apps”目录 (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "点击 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">设置 Web 服务器对根目录的写入权限</a> 可修复这个问题.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "您可以由 %s 设置 Web 服务器对根目录 %s 的写权限可以修复这个问题.",
+ "Setting locale to %s failed" : "设置语言为 %s 失败",
+ "Please install one of these locales on your system and restart your webserver." : "请在您的系统中安装下述一种语言并重启 Web 服务器.",
+ "Please ask your server administrator to install the module." : "请联系服务器管理员安装模块.",
+ "PHP module %s not installed." : "PHP %s 模块未安装.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "PHP 选项 \"%s\" 未设置为 \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "在 php.ini 中调整该设置将导致 Nextcloud 重新运行",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload 当前设置为 \"%s\", 预期值为 \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "请在 php.ini 中设置 <code>mbstring.func_overload</code> 为 <code>0</code> 以解决该问题",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "至少需要 libxml2 2.7.0. 当前安装 %s.",
+ "To fix this issue update your libxml2 version and restart your web server." : "升级您的 libxml2 版本然后重启 Web 服务器以解决该问题.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除内联块, 这将导致多个核心应用无法访问.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "这可能由缓存/加速器导致的, 例如 Zend OPcache 或 eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "PHP 模块已经安装, 但仍然显示未安装?",
+ "Please ask your server administrator to restart the web server." : "请联系服务器管理员重启 Web 服务器.",
+ "PostgreSQL >= 9 required" : "要求 PostgreSQL >= 9",
+ "Please upgrade your database version" : "请升级您的数据库版本",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "请更改权限为 0770 以避免其他用户查看目录.",
+ "Data directory (%s) is readable by other users" : "数据目录 (%s) 能被其他用户读取",
+ "Data directory (%s) must be an absolute path" : "数据目录 (%s) 必须为绝对路径",
+ "Check the value of \"datadirectory\" in your configuration" : "请检查配置文件中 \"datadirectory\" 的值",
+ "Data directory (%s) is invalid" : "数据目录 (%s) 无效",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "请检查根目录下 data 目录中包含名为 \".ocdata\" 的文件.",
+ "Could not obtain lock type %d on \"%s\"." : "无法在 \"%s\" 上获取锁类型 %d.",
+ "Storage unauthorized. %s" : "存储认证失败. %s",
+ "Storage incomplete configuration. %s" : "存储未完成配置. %s",
+ "Storage connection error. %s" : "存储连接错误. %s",
+ "Storage is temporarily not available" : "存储暂时不可用",
+ "Storage connection timeout. %s" : "存储连接超时. %s",
+ "4-byte characters are not supported in file names" : "文件名中不支持 4 字节字符",
+ "App directory already exists" : "应用目录已经存在",
+ "Can't create app folder. Please fix permissions. %s" : "无法创建应用文件夹. 请修改权限. %s",
+ "Archive does not contain a directory named %s" : "压缩文件中不包含目录 %s",
+ "No source specified when installing app" : "安装应用时未指定来源",
+ "No href specified when installing app from http" : "从 http 安装应用时未指定链接",
+ "No path specified when installing app from local file" : "从本地文件安装应用时未指定路径",
+ "Archives of type %s are not supported" : "不支持 %s 的压缩格式",
+ "Failed to open archive when installing app" : "安装应用时打开文件失败",
+ "App does not provide an info.xml file" : "应用未提供 info.xml 文件",
+ "App cannot be installed because appinfo file cannot be read." : "无法安装应用, 因为无法读取应用信息文件",
+ "Signature could not get checked. Please contact the app developer and check your admin screen." : "签名检查失败. 请联系应用开发者并检查您的管理界面",
+ "App can't be installed because of not allowed code in the App" : "无法安装应用, 因为应用中包含不允许的代码",
+ "App can't be installed because it is not compatible with this version of the server" : "无法安装应用, 因为应用不兼容当前服务器的版本",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "无法安装应用, 因为应用包含 <shipped>true</shipped> 标签",
+ "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "无法安装应用, 因为 info.xml 中的版本与应用市场中的版本不同",
+ "Logging" : "日志",
+ "Recommended" : "推荐",
+ "Microsoft Windows Platform is not supported" : "不支持 Microsoft Windows 平台",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "不支持在 Microsoft Windows 平台运行 Nextcloud 服务器. 如果您没有迁移服务器的计划, 我们建议您在虚拟机中使用 Linux 服务器.",
+ "Storage not available" : "存储空间不可用"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index bdf63be8b5f..f03e9849cb9 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -221,8 +221,6 @@ OC.L10N.register(
"Recommended" : "建議",
"Microsoft Windows Platform is not supported" : "不支援微軟Windows系統",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "微軟Windows不支援Nextcloud伺服器,如果您一定要使用,我們建議您在虛擬機中安裝Linux版本伺服器。",
- "Storage not available" : "無法存取儲存空間",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "應用程式 \"%s\" 無法安裝,因為與此版本 Nextcloud 不相容",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "應用程式無法安裝,因為與此版本 Nextcloud 不相容"
+ "Storage not available" : "無法存取儲存空間"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index e2f39b8c3b1..7857eb4a7ea 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -219,8 +219,6 @@
"Recommended" : "建議",
"Microsoft Windows Platform is not supported" : "不支援微軟Windows系統",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "微軟Windows不支援Nextcloud伺服器,如果您一定要使用,我們建議您在虛擬機中安裝Linux版本伺服器。",
- "Storage not available" : "無法存取儲存空間",
- "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "應用程式 \"%s\" 無法安裝,因為與此版本 Nextcloud 不相容",
- "App can't be installed because it is not compatible with this version of Nextcloud" : "應用程式無法安裝,因為與此版本 Nextcloud 不相容"
+ "Storage not available" : "無法存取儲存空間"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/private/AllConfig.php b/lib/private/AllConfig.php
index 4e13d70371b..1f59e677a54 100644
--- a/lib/private/AllConfig.php
+++ b/lib/private/AllConfig.php
@@ -68,7 +68,7 @@ class AllConfig implements \OCP\IConfig {
/**
* @param SystemConfig $systemConfig
*/
- function __construct(SystemConfig $systemConfig) {
+ public function __construct(SystemConfig $systemConfig) {
$this->userCache = new CappedMemoryCache();
$this->systemConfig = $systemConfig;
}
@@ -358,12 +358,17 @@ class AllConfig implements \OCP\IConfig {
* ]
*/
private function getUserValues($userId) {
- // TODO - FIXME
- $this->fixDIInit();
-
if (isset($this->userCache[$userId])) {
return $this->userCache[$userId];
}
+ if ($userId === null || $userId === '') {
+ $this->userCache[$userId]=array();
+ return $this->userCache[$userId];
+ }
+
+ // TODO - FIXME
+ $this->fixDIInit();
+
$data = array();
$query = 'SELECT `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?';
$result = $this->connection->executeQuery($query, array($userId));
diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php
index fca5c9b87ac..6b819ef7ac1 100644
--- a/lib/private/App/AppManager.php
+++ b/lib/private/App/AppManager.php
@@ -221,6 +221,21 @@ class AppManager implements IAppManager {
}
/**
+ * Whether a list of types contains a protected app type
+ *
+ * @param string[] $types
+ * @return bool
+ */
+ public function hasProtectedAppType($types) {
+ if (empty($types)) {
+ return false;
+ }
+
+ $protectedTypes = array_intersect($this->protectedAppTypes, $types);
+ return !empty($protectedTypes);
+ }
+
+ /**
* Enable an app only for specific groups
*
* @param string $appId
diff --git a/lib/private/App/AppStore/Fetcher/AppFetcher.php b/lib/private/App/AppStore/Fetcher/AppFetcher.php
index bbe75c723d5..7c5efafc92f 100644
--- a/lib/private/App/AppStore/Fetcher/AppFetcher.php
+++ b/lib/private/App/AppStore/Fetcher/AppFetcher.php
@@ -28,9 +28,6 @@ use OCP\Http\Client\IClientService;
use OCP\IConfig;
class AppFetcher extends Fetcher {
- /** @var IConfig */
- private $config;
-
/**
* @param IAppData $appData
* @param IClientService $clientService
@@ -44,13 +41,13 @@ class AppFetcher extends Fetcher {
parent::__construct(
$appData,
$clientService,
- $timeFactory
+ $timeFactory,
+ $config
);
$this->fileName = 'apps.json';
- $this->config = $config;
- $versionArray = \OC_Util::getVersion();
+ $versionArray = explode('.', $this->config->getSystemValue('version'));
$this->endpointUrl = sprintf(
'https://apps.nextcloud.com/api/v1/platform/%d.%d.%d/apps.json',
$versionArray[0],
@@ -62,15 +59,14 @@ class AppFetcher extends Fetcher {
/**
* Only returns the latest compatible app release in the releases array
*
+ * @param string $ETag
+ * @param string $content
+ *
* @return array
*/
- protected function fetch() {
- $client = $this->clientService->newClient();
- $response = $client->get($this->endpointUrl);
- $responseJson = [];
- $responseJson['data'] = json_decode($response->getBody(), true);
- $responseJson['timestamp'] = $this->timeFactory->getTime();
- $response = $responseJson;
+ protected function fetch($ETag, $content) {
+ /** @var mixed[] $response */
+ $response = parent::fetch($ETag, $content);
$ncVersion = $this->config->getSystemValue('version');
$ncMajorVersion = explode('.', $ncVersion)[0];
diff --git a/lib/private/App/AppStore/Fetcher/CategoryFetcher.php b/lib/private/App/AppStore/Fetcher/CategoryFetcher.php
index 74201ec3737..8b79259a66a 100644
--- a/lib/private/App/AppStore/Fetcher/CategoryFetcher.php
+++ b/lib/private/App/AppStore/Fetcher/CategoryFetcher.php
@@ -24,20 +24,24 @@ namespace OC\App\AppStore\Fetcher;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Files\IAppData;
use OCP\Http\Client\IClientService;
+use OCP\IConfig;
class CategoryFetcher extends Fetcher {
/**
* @param IAppData $appData
* @param IClientService $clientService
* @param ITimeFactory $timeFactory
+ * @param IConfig $config
*/
public function __construct(IAppData $appData,
IClientService $clientService,
- ITimeFactory $timeFactory) {
+ ITimeFactory $timeFactory,
+ IConfig $config) {
parent::__construct(
$appData,
$clientService,
- $timeFactory
+ $timeFactory,
+ $config
);
$this->fileName = 'categories.json';
$this->endpointUrl = 'https://apps.nextcloud.com/api/v1/categories.json';
diff --git a/lib/private/App/AppStore/Fetcher/Fetcher.php b/lib/private/App/AppStore/Fetcher/Fetcher.php
index f82e1a253f6..dab79e11821 100644
--- a/lib/private/App/AppStore/Fetcher/Fetcher.php
+++ b/lib/private/App/AppStore/Fetcher/Fetcher.php
@@ -21,10 +21,12 @@
namespace OC\App\AppStore\Fetcher;
+use OCP\AppFramework\Http;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Files\IAppData;
use OCP\Files\NotFoundException;
use OCP\Http\Client\IClientService;
+use OCP\IConfig;
abstract class Fetcher {
const INVALIDATE_AFTER_SECONDS = 300;
@@ -35,6 +37,8 @@ abstract class Fetcher {
protected $clientService;
/** @var ITimeFactory */
protected $timeFactory;
+ /** @var IConfig */
+ protected $config;
/** @var string */
protected $fileName;
/** @var string */
@@ -44,26 +48,52 @@ abstract class Fetcher {
* @param IAppData $appData
* @param IClientService $clientService
* @param ITimeFactory $timeFactory
+ * @param IConfig $config
*/
public function __construct(IAppData $appData,
IClientService $clientService,
- ITimeFactory $timeFactory) {
+ ITimeFactory $timeFactory,
+ IConfig $config) {
$this->appData = $appData;
$this->clientService = $clientService;
$this->timeFactory = $timeFactory;
+ $this->config = $config;
}
/**
* Fetches the response from the server
*
+ * @param string $ETag
+ * @param string $content
+ *
* @return array
*/
- protected function fetch() {
+ protected function fetch($ETag, $content) {
+ $options = [];
+
+ if ($ETag !== '') {
+ $options['headers'] = [
+ 'If-None-Match' => $ETag,
+ ];
+ }
+
$client = $this->clientService->newClient();
- $response = $client->get($this->endpointUrl);
+ $response = $client->get($this->endpointUrl, $options);
+
$responseJson = [];
- $responseJson['data'] = json_decode($response->getBody(), true);
+ if ($response->getStatusCode() === Http::STATUS_NOT_MODIFIED) {
+ $responseJson['data'] = json_decode($content, true);
+ } else {
+ $responseJson['data'] = json_decode($response->getBody(), true);
+ $ETag = $response->getHeader('ETag');
+ }
+
$responseJson['timestamp'] = $this->timeFactory->getTime();
+ $responseJson['ncversion'] = $this->config->getSystemValue('version');
+ if ($ETag !== '') {
+ $responseJson['ETag'] = $ETag;
+ }
+
return $responseJson;
}
@@ -75,15 +105,27 @@ abstract class Fetcher {
public function get() {
$rootFolder = $this->appData->getFolder('/');
+ $ETag = '';
+ $content = '';
+
try {
// File does already exists
$file = $rootFolder->getFile($this->fileName);
$jsonBlob = json_decode($file->getContent(), true);
if(is_array($jsonBlob)) {
- // If the timestamp is older than 300 seconds request the files new
- if((int)$jsonBlob['timestamp'] > ($this->timeFactory->getTime() - self::INVALIDATE_AFTER_SECONDS)) {
+ /*
+ * If the timestamp is older than 300 seconds request the files new
+ * If the version changed (update!) also refresh
+ */
+ if((int)$jsonBlob['timestamp'] > ($this->timeFactory->getTime() - self::INVALIDATE_AFTER_SECONDS) &&
+ isset($jsonBlob['ncversion']) && $jsonBlob['ncversion'] === $this->config->getSystemValue('version', '0.0.0')) {
return $jsonBlob['data'];
}
+
+ if (isset($jsonBlob['ETag'])) {
+ $ETag = $jsonBlob['ETag'];
+ $content = json_encode($jsonBlob['data']);
+ }
}
} catch (NotFoundException $e) {
// File does not already exists
@@ -92,7 +134,7 @@ abstract class Fetcher {
// Refresh the file content
try {
- $responseJson = $this->fetch();
+ $responseJson = $this->fetch($ETag, $content);
$file->putContent(json_encode($responseJson));
return json_decode($file->getContent(), true)['data'];
} catch (\Exception $e) {
diff --git a/lib/private/AppConfig.php b/lib/private/AppConfig.php
index d92e8965b5c..4e102522550 100644
--- a/lib/private/AppConfig.php
+++ b/lib/private/AppConfig.php
@@ -1,5 +1,6 @@
<?php
/**
+ * @copyright Copyright (c) 2017, Joas Schilling <coding@schilljs.com>
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
@@ -29,7 +30,9 @@
namespace OC;
+use OC\DB\OracleConnection;
use OCP\IAppConfig;
+use OCP\IConfig;
use OCP\IDBConnection;
/**
@@ -37,12 +40,25 @@ use OCP\IDBConnection;
* database.
*/
class AppConfig implements IAppConfig {
- /**
- * @var \OCP\IDBConnection $conn
- */
+
+ /** @var array[] */
+ protected $sensitiveValues = [
+ 'spreed' => [
+ 'turn_server_secret',
+ ],
+ 'user_ldap' => [
+ 'ldap_agent_password',
+ ],
+ ];
+
+ /** @var \OCP\IDBConnection */
protected $conn;
- private $cache = array();
+ /** @var array[] */
+ private $cache = [];
+
+ /** @var bool */
+ private $configLoaded = false;
/**
* @param IDBConnection $conn
@@ -85,6 +101,7 @@ class AppConfig implements IAppConfig {
*
* @param string $app the app we are looking for
* @return array an array of key names
+ * @deprecated 8.0.0 use method getAppKeys of \OCP\IConfig
*
* This function gets all keys of an app. Please note that the values are
* not returned.
@@ -112,6 +129,7 @@ class AppConfig implements IAppConfig {
* @param string $key key
* @param string $default = null, default value if the key does not exist
* @return string the value or $default
+ * @deprecated 8.0.0 use method getAppValue of \OCP\IConfig
*
* This function gets a value from the appconfig table. If the key does
* not exist the default value will be returned
@@ -146,6 +164,7 @@ class AppConfig implements IAppConfig {
* @param string $key key
* @param string|float|int $value value
* @return bool True if the value was inserted or updated, false if the value was the same
+ * @deprecated 8.0.0 use method setAppValue of \OCP\IConfig
*/
public function setValue($app, $key, $value) {
if (!$this->hasKey($app, $key)) {
@@ -182,7 +201,7 @@ class AppConfig implements IAppConfig {
* http://docs.oracle.com/cd/E11882_01/server.112/e26088/conditions002.htm#i1033286
* > Large objects (LOBs) are not supported in comparison conditions.
*/
- if (!($this->conn instanceof \OC\DB\OracleConnection)) {
+ if (!($this->conn instanceof OracleConnection)) {
// Only update the value when it is not the same
$sql->andWhere($sql->expr()->neq('configvalue', $sql->createParameter('configvalue')))
->setParameter('configvalue', $value);
@@ -200,7 +219,8 @@ class AppConfig implements IAppConfig {
*
* @param string $app app
* @param string $key key
- * @return boolean|null
+ * @return boolean
+ * @deprecated 8.0.0 use method deleteAppValue of \OCP\IConfig
*/
public function deleteKey($app, $key) {
$this->loadConfigValues();
@@ -214,13 +234,15 @@ class AppConfig implements IAppConfig {
$sql->execute();
unset($this->cache[$app][$key]);
+ return false;
}
/**
* Remove app from appconfig
*
* @param string $app app
- * @return boolean|null
+ * @return boolean
+ * @deprecated 8.0.0 use method deleteAppValue of \OCP\IConfig
*
* Removes all keys in appconfig belonging to the app.
*/
@@ -234,6 +256,7 @@ class AppConfig implements IAppConfig {
$sql->execute();
unset($this->cache[$app]);
+ return false;
}
/**
@@ -262,10 +285,30 @@ class AppConfig implements IAppConfig {
}
/**
+ * get all values of the app or and filters out sensitive data
+ *
+ * @param string $app
+ * @return array
+ */
+ public function getFilteredValues($app) {
+ $values = $this->getValues($app, false);
+
+ foreach ($this->sensitiveValues[$app] as $sensitiveKey) {
+ if (isset($values[$sensitiveKey])) {
+ $values[$sensitiveKey] = IConfig::SENSITIVE_VALUE;
+ }
+ }
+
+ return $values;
+ }
+
+ /**
* Load all the app config values
*/
protected function loadConfigValues() {
- if ($this->configLoaded) return;
+ if ($this->configLoaded) {
+ return;
+ }
$this->cache = [];
diff --git a/lib/private/AppFramework/Db/Db.php b/lib/private/AppFramework/Db/Db.php
deleted file mode 100644
index 5aacdc517a2..00000000000
--- a/lib/private/AppFramework/Db/Db.php
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bernhard Posselt <dev@bernhard-posselt.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @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/>
- *
- */
-
-namespace OC\AppFramework\Db;
-
-use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\IDb;
-use OCP\IDBConnection;
-use OCP\PreConditionNotMetException;
-use Doctrine\DBAL\Platforms\MySqlPlatform;
-
-/**
- * @deprecated use IDBConnection directly, will be removed in ownCloud 10
- * Small Facade for being able to inject the database connection for tests
- */
-class Db implements IDb {
- /**
- * @var IDBConnection
- */
- protected $connection;
-
- /**
- * @param IDBConnection $connection
- */
- public function __construct(IDBConnection $connection) {
- $this->connection = $connection;
- }
-
- /**
- * Gets the ExpressionBuilder for the connection.
- *
- * @return \OCP\DB\QueryBuilder\IQueryBuilder
- */
- public function getQueryBuilder() {
- return $this->connection->getQueryBuilder();
- }
-
- /**
- * Used to abstract the ownCloud database access away
- *
- * @param string $sql the sql query with ? placeholder for params
- * @param int $limit the maximum number of rows
- * @param int $offset from which row we want to start
- * @deprecated use prepare instead, will be removed in ownCloud 10
- * @return \OC_DB_StatementWrapper prepared SQL query
- */
- public function prepareQuery($sql, $limit = null, $offset = null) {
- $isManipulation = \OC_DB::isManipulation($sql);
- $statement = $this->connection->prepare($sql, $limit, $offset);
- return new \OC_DB_StatementWrapper($statement, $isManipulation);
- }
-
-
- /**
- * Used to get the id of the just inserted element
- *
- * @deprecated use lastInsertId instead, will be removed in ownCloud 10
- * @param string $tableName the name of the table where we inserted the item
- * @return int the id of the inserted element
- */
- public function getInsertId($tableName) {
- return $this->connection->lastInsertId($tableName);
- }
-
- /**
- * Used to abstract the ownCloud database access away
- * @param string $sql the sql query with ? placeholder for params
- * @param int $limit the maximum number of rows
- * @param int $offset from which row we want to start
- * @return \Doctrine\DBAL\Driver\Statement The prepared statement.
- */
- public function prepare($sql, $limit=null, $offset=null) {
- return $this->connection->prepare($sql, $limit, $offset);
- }
-
- /**
- * Executes an, optionally parameterized, SQL query.
- *
- * If the query is parameterized, a prepared statement is used.
- * If an SQLLogger is configured, the execution is logged.
- *
- * @param string $query The SQL query to execute.
- * @param string[] $params The parameters to bind to the query, if any.
- * @param array $types The types the previous parameters are in.
- * @return \Doctrine\DBAL\Driver\Statement The executed statement.
- */
- public function executeQuery($query, array $params = array(), $types = array()) {
- return $this->connection->executeQuery($query, $params, $types);
- }
-
- /**
- * Executes an SQL INSERT/UPDATE/DELETE query with the given parameters
- * and returns the number of affected rows.
- *
- * This method supports PDO binding types as well as DBAL mapping types.
- *
- * @param string $query The SQL query.
- * @param array $params The query parameters.
- * @param array $types The parameter types.
- * @return integer The number of affected rows.
- */
- public function executeUpdate($query, array $params = array(), array $types = array()) {
- return $this->connection->executeUpdate($query, $params, $types);
- }
-
- /**
- * Used to get the id of the just inserted element
- * @param string $table the name of the table where we inserted the item
- * @return int the id of the inserted element
- */
- public function lastInsertId($table = null) {
- return $this->connection->lastInsertId($table);
- }
-
- /**
- * Insert a row if the matching row does not exists.
- *
- * @param string $table The table name (will replace *PREFIX* with the actual prefix)
- * @param array $input data that should be inserted into the table (column name => value)
- * @param array|null $compare List of values that should be checked for "if not exists"
- * If this is null or an empty array, all keys of $input will be compared
- * Please note: text fields (clob) must not be used in the compare array
- * @return int number of inserted rows
- * @throws \Doctrine\DBAL\DBALException
- */
- public function insertIfNotExist($table, $input, array $compare = null) {
- return $this->connection->insertIfNotExist($table, $input, $compare);
- }
-
- /**
- * Insert or update a row value
- *
- * @param string $table
- * @param array $keys (column name => value)
- * @param array $values (column name => value)
- * @param array $updatePreconditionValues ensure values match preconditions (column name => value)
- * @return int number of new rows
- * @throws \Doctrine\DBAL\DBALException
- * @throws PreConditionNotMetException
- */
- public function setValues($table, array $keys, array $values, array $updatePreconditionValues = []) {
- return $this->connection->setValues($table, $keys, $values, $updatePreconditionValues);
- }
-
- /**
- * @inheritdoc
- */
- public function lockTable($tableName) {
- $this->connection->lockTable($tableName);
- }
-
- /**
- * @inheritdoc
- */
- public function unlockTable() {
- $this->connection->unlockTable();
- }
-
- /**
- * Start a transaction
- */
- public function beginTransaction() {
- $this->connection->beginTransaction();
- }
-
- /**
- * Check if a transaction is active
- *
- * @return bool
- */
- public function inTransaction() {
- return $this->connection->inTransaction();
- }
-
- /**
- * Commit the database changes done during a transaction that is in progress
- */
- public function commit() {
- $this->connection->commit();
- }
-
- /**
- * Rollback the database changes done during a transaction that is in progress
- */
- public function rollBack() {
- $this->connection->rollBack();
- }
-
- /**
- * Gets the error code and message as a string for logging
- * @return string
- */
- public function getError() {
- return $this->connection->getError();
- }
-
- /**
- * Fetch the SQLSTATE associated with the last database operation.
- *
- * @return integer The last error code.
- */
- public function errorCode() {
- return $this->connection->errorCode();
- }
-
- /**
- * Fetch extended error information associated with the last database operation.
- *
- * @return array The last error information.
- */
- public function errorInfo() {
- return $this->connection->errorInfo();
- }
-
- /**
- * Establishes the connection with the database.
- *
- * @return bool
- */
- public function connect() {
- return $this->connection->connect();
- }
-
- /**
- * Close the database connection
- */
- public function close() {
- $this->connection->close();
- }
-
- /**
- * Quotes a given input parameter.
- *
- * @param mixed $input Parameter to be quoted.
- * @param int $type Type of the parameter.
- * @return string The quoted parameter.
- */
- public function quote($input, $type = IQueryBuilder::PARAM_STR) {
- return $this->connection->quote($input, $type);
- }
-
- /**
- * Gets the DatabasePlatform instance that provides all the metadata about
- * the platform this driver connects to.
- *
- * @return \Doctrine\DBAL\Platforms\AbstractPlatform The database platform.
- */
- public function getDatabasePlatform() {
- return $this->connection->getDatabasePlatform();
- }
-
- /**
- * Drop a table from the database if it exists
- *
- * @param string $table table name without the prefix
- */
- public function dropTable($table) {
- $this->connection->dropTable($table);
- }
-
- /**
- * Check if a table exists
- *
- * @param string $table table name without the prefix
- * @return bool
- */
- public function tableExists($table) {
- return $this->connection->tableExists($table);
- }
-
- /**
- * Espace a parameter to be used in a LIKE query
- *
- * @param string $param
- * @return string
- */
- public function escapeLikeParameter($param) {
- return $this->connection->escapeLikeParameter($param);
- }
-
- /**
- * Check whether or not the current database support 4byte wide unicode
- *
- * @return bool
- * @since 11.0.0
- */
- public function supports4ByteText() {
- return $this->connection->supports4ByteText();
- }
-}
diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php
index 148a15172ac..0879b3e9330 100644
--- a/lib/private/AppFramework/DependencyInjection/DIContainer.php
+++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php
@@ -43,8 +43,10 @@ use OC\AppFramework\Middleware\OCSMiddleware;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Middleware\SessionMiddleware;
use OC\AppFramework\Utility\SimpleContainer;
+use OC\AppFramework\Utility\TimeFactory;
use OC\Core\Middleware\TwoFactorMiddleware;
use OC\RichObjectStrings\Validator;
+use OC\Security\Bruteforce\Throttler;
use OCP\AppFramework\IApi;
use OCP\AppFramework\IAppContainer;
use OCP\Files\IAppData;
@@ -91,6 +93,10 @@ class DIContainer extends SimpleContainer implements IAppContainer {
return new Output($this->getServer()->getWebRoot());
});
+ $this->registerService(\OCP\Authentication\LoginCredentials\IStore::class, function() {
+ return $this->getServer()->query(\OCP\Authentication\LoginCredentials\IStore::class);
+ });
+
$this->registerService('OCP\\IAvatarManager', function($c) {
return $this->getServer()->getAvatarManager();
});
@@ -134,10 +140,6 @@ class DIContainer extends SimpleContainer implements IAppContainer {
return $this->getServer()->getDateTimeFormatter();
});
- $this->registerService('OCP\\IDb', function($c) {
- return $this->getServer()->getDb();
- });
-
$this->registerService('OCP\\IDBConnection', function($c) {
return $this->getServer()->getDatabaseConnection();
});
@@ -380,20 +382,25 @@ class DIContainer extends SimpleContainer implements IAppContainer {
*/
$app = $this;
$this->registerService('SecurityMiddleware', function($c) use ($app){
+ /** @var \OC\Server $server */
+ $server = $app->getServer();
+
return new SecurityMiddleware(
$c['Request'],
$c['ControllerMethodReflector'],
- $app->getServer()->getNavigationManager(),
- $app->getServer()->getURLGenerator(),
- $app->getServer()->getLogger(),
- $app->getServer()->getSession(),
+ $server->getNavigationManager(),
+ $server->getURLGenerator(),
+ $server->getLogger(),
+ $server->getSession(),
$c['AppName'],
$app->isLoggedIn(),
$app->isAdminUser(),
- $app->getServer()->getContentSecurityPolicyManager(),
- $app->getServer()->getCsrfTokenManager(),
- $app->getServer()->getContentSecurityPolicyNonceManager()
+ $server->getContentSecurityPolicyManager(),
+ $server->getCsrfTokenManager(),
+ $server->getContentSecurityPolicyNonceManager(),
+ $server->getBruteForceThrottler()
);
+
});
$this->registerService('CORSMiddleware', function($c) {
diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
index d60d5749d57..edba6a3e759 100644
--- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
+++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
@@ -36,6 +36,7 @@ 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;
@@ -87,6 +88,8 @@ class SecurityMiddleware extends Middleware {
private $csrfTokenManager;
/** @var ContentSecurityPolicyNonceManager */
private $cspNonceManager;
+ /** @var Throttler */
+ private $throttler;
/**
* @param IRequest $request
@@ -101,6 +104,7 @@ class SecurityMiddleware extends Middleware {
* @param ContentSecurityPolicyManager $contentSecurityPolicyManager
* @param CSRFTokenManager $csrfTokenManager
* @param ContentSecurityPolicyNonceManager $cspNonceManager
+ * @param Throttler $throttler
*/
public function __construct(IRequest $request,
ControllerMethodReflector $reflector,
@@ -113,7 +117,8 @@ class SecurityMiddleware extends Middleware {
$isAdminUser,
ContentSecurityPolicyManager $contentSecurityPolicyManager,
CsrfTokenManager $csrfTokenManager,
- ContentSecurityPolicyNonceManager $cspNonceManager) {
+ ContentSecurityPolicyNonceManager $cspNonceManager,
+ Throttler $throttler) {
$this->navigationManager = $navigationManager;
$this->request = $request;
$this->reflector = $reflector;
@@ -126,6 +131,7 @@ class SecurityMiddleware extends Middleware {
$this->contentSecurityPolicyManager = $contentSecurityPolicyManager;
$this->csrfTokenManager = $csrfTokenManager;
$this->cspNonceManager = $cspNonceManager;
+ $this->throttler = $throttler;
}
@@ -185,6 +191,12 @@ 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 33a117d8121..034fc3a1759 100644
--- a/lib/private/AppFramework/Utility/ControllerMethodReflector.php
+++ b/lib/private/AppFramework/Utility/ControllerMethodReflector.php
@@ -55,8 +55,10 @@ class ControllerMethodReflector implements IControllerMethodReflector{
$docs = $reflection->getDocComment();
// extract everything prefixed by @ and first letter uppercase
- preg_match_all('/@([A-Z]\w+)/', $docs, $matches);
- $this->annotations = $matches[1];
+ preg_match_all('/^\h+\*\h+@(?P<annotation>[A-Z]\w+)(\h+(?P<parameter>\w+))?$/m', $docs, $matches);
+ foreach($matches['annotation'] as $key => $annontation) {
+ $this->annotations[$annontation] = $matches['parameter'][$key];
+ }
// extract type parameter information
preg_match_all('/@param\h+(?P<type>\w+)\h+\$(?P<var>\w+)/', $docs, $matches);
@@ -112,7 +114,22 @@ class ControllerMethodReflector implements IControllerMethodReflector{
* @return bool true if the annotation is found
*/
public function hasAnnotation($name){
- return in_array($name, $this->annotations);
+ return array_key_exists($name, $this->annotations);
+ }
+
+
+ /**
+ * Get optional annotation parameter
+ * @param string $name the name of the annotation
+ * @return string
+ */
+ public function getAnnotationParameter($name){
+ $parameter = '';
+ if($this->hasAnnotation($name)) {
+ $parameter = $this->annotations[$name];
+ }
+
+ return $parameter;
}
diff --git a/lib/private/Archive/TAR.php b/lib/private/Archive/TAR.php
index bbd24bd05a1..07ccd09f399 100644
--- a/lib/private/Archive/TAR.php
+++ b/lib/private/Archive/TAR.php
@@ -33,6 +33,8 @@
namespace OC\Archive;
+use Icewind\Streams\CallbackWrapper;
+
class TAR extends Archive {
const PLAIN = 0;
const GZIP = 1;
@@ -359,22 +361,19 @@ class TAR extends Archive {
if ($mode == 'r' or $mode == 'rb') {
return fopen($tmpFile, $mode);
} else {
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
- self::$tempFiles[$tmpFile] = $path;
- return fopen('close://' . $tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
}
- private static $tempFiles = array();
-
/**
* write back temporary files
*/
- function writeBack($tmpFile) {
- if (isset(self::$tempFiles[$tmpFile])) {
- $this->addFile(self::$tempFiles[$tmpFile], $tmpFile);
- unlink($tmpFile);
- }
+ function writeBack($tmpFile, $path) {
+ $this->addFile($path, $tmpFile);
+ unlink($tmpFile);
}
/**
diff --git a/lib/private/Archive/ZIP.php b/lib/private/Archive/ZIP.php
index 9e9fe40b2b4..0ed0f48acc4 100644
--- a/lib/private/Archive/ZIP.php
+++ b/lib/private/Archive/ZIP.php
@@ -31,6 +31,8 @@
namespace OC\Archive;
+use Icewind\Streams\CallbackWrapper;
+
class ZIP extends Archive{
/**
* @var \ZipArchive zip
@@ -198,24 +200,22 @@ class ZIP extends Archive{
$ext='';
}
$tmpFile=\OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if($this->fileExists($path)) {
$this->extractFile($path, $tmpFile);
}
- self::$tempFiles[$tmpFile]=$path;
- return fopen('close://'.$tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
}
- private static $tempFiles=array();
/**
* write back temporary files
*/
- function writeBack($tmpFile) {
- if(isset(self::$tempFiles[$tmpFile])) {
- $this->addFile(self::$tempFiles[$tmpFile], $tmpFile);
- unlink($tmpFile);
- }
+ function writeBack($tmpFile, $path) {
+ $this->addFile($path, $tmpFile);
+ unlink($tmpFile);
}
/**
diff --git a/lib/private/Authentication/LoginCredentials/Credentials.php b/lib/private/Authentication/LoginCredentials/Credentials.php
new file mode 100644
index 00000000000..9314b7489db
--- /dev/null
+++ b/lib/private/Authentication/LoginCredentials/Credentials.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Authentication\LoginCredentials;
+
+use OCP\Authentication\LoginCredentials\ICredentials;
+
+class Credentials implements ICredentials {
+
+ /** @var string */
+ private $uid;
+
+ /** @var string */
+ private $loginName;
+
+ /** @var string */
+ private $password;
+
+ /**
+ * @param string $uid
+ * @param string $loginName
+ * @param string $password
+ */
+ public function __construct($uid, $loginName, $password) {
+ $this->uid = $uid;
+ $this->loginName = $loginName;
+ $this->password = $password;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUID() {
+ return $this->uid;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLoginName() {
+ return $this->loginName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPassword() {
+ return $this->password;
+ }
+
+}
diff --git a/lib/private/Authentication/LoginCredentials/Store.php b/lib/private/Authentication/LoginCredentials/Store.php
new file mode 100644
index 00000000000..e44c88c7aea
--- /dev/null
+++ b/lib/private/Authentication/LoginCredentials/Store.php
@@ -0,0 +1,120 @@
+<?php
+
+/**
+ * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Authentication\LoginCredentials;
+
+use OC\Authentication\Exceptions\InvalidTokenException;
+use OC\Authentication\Exceptions\PasswordlessTokenException;
+use OC\Authentication\Token\IProvider;
+use OCP\Authentication\Exceptions\CredentialsUnavailableException;
+use OCP\Authentication\LoginCredentials\ICredentials;
+use OCP\Authentication\LoginCredentials\IStore;
+use OCP\ILogger;
+use OCP\ISession;
+use OCP\Session\Exceptions\SessionNotAvailableException;
+use OCP\Util;
+
+class Store implements IStore {
+
+ /** @var ISession */
+ private $session;
+
+ /** @var ILogger */
+ private $logger;
+
+ /** @var IProvider|null */
+ private $tokenProvider;
+
+ /**
+ * @param ISession $session
+ * @param ILogger $logger
+ * @param IProvider $tokenProvider
+ */
+ public function __construct(ISession $session, ILogger $logger, IProvider $tokenProvider = null) {
+ $this->session = $session;
+ $this->logger = $logger;
+ $this->tokenProvider = $tokenProvider;
+
+ Util::connectHook('OC_User', 'post_login', $this, 'authenticate');
+ }
+
+ /**
+ * Hook listener on post login
+ *
+ * @param array $params
+ */
+ public function authenticate(array $params) {
+ $this->session->set('login_credentials', json_encode($params));
+ }
+
+ /**
+ * Replace the session implementation
+ *
+ * @param ISession $session
+ */
+ public function setSession(ISession $session) {
+ $this->session = $session;
+ }
+
+ /**
+ * @since 12
+ *
+ * @return ICredentials the login credentials of the current user
+ * @throws CredentialsUnavailableException
+ */
+ public function getLoginCredentials() {
+ if (is_null($this->tokenProvider)) {
+ throw new CredentialsUnavailableException();
+ }
+
+ $trySession = false;
+ try {
+ $sessionId = $this->session->getId();
+ $token = $this->tokenProvider->getToken($sessionId);
+
+ $uid = $token->getUID();
+ $user = $token->getLoginName();
+ $password = $this->tokenProvider->getPassword($token, $sessionId);
+
+ return new Credentials($uid, $user, $password);
+ } catch (SessionNotAvailableException $ex) {
+ $this->logger->debug('could not get login credentials because session is unavailable', ['app' => 'core']);
+ } catch (InvalidTokenException $ex) {
+ $this->logger->debug('could not get login credentials because the token is invalid', ['app' => 'core']);
+ $trySession = true;
+ } catch (PasswordlessTokenException $ex) {
+ $this->logger->debug('could not get login credentials because the token has no password', ['app' => 'core']);
+ $trySession = true;
+ }
+
+ if ($trySession && $this->session->exists('login_credentials')) {
+ $creds = json_decode($this->session->get('login_credentials'));
+ return new Credentials($creds->uid, $creds->uid, $creds->password);
+ }
+
+ // If we reach this line, an exception was thrown.
+ throw new CredentialsUnavailableException();
+ }
+
+}
diff --git a/lib/private/Authentication/TwoFactorAuth/Manager.php b/lib/private/Authentication/TwoFactorAuth/Manager.php
index 48792aa685b..1d0deada696 100644
--- a/lib/private/Authentication/TwoFactorAuth/Manager.php
+++ b/lib/private/Authentication/TwoFactorAuth/Manager.php
@@ -1,4 +1,5 @@
<?php
+
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
@@ -26,9 +27,11 @@ use Exception;
use OC;
use OC\App\AppManager;
use OC_App;
+use OCP\Activity\IManager;
use OCP\AppFramework\QueryException;
use OCP\Authentication\TwoFactorAuth\IProvider;
use OCP\IConfig;
+use OCP\ILogger;
use OCP\ISession;
use OCP\IUser;
@@ -48,15 +51,26 @@ class Manager {
/** @var IConfig */
private $config;
+ /** @var IManager */
+ private $activityManager;
+
+ /** @var ILogger */
+ private $logger;
+
/**
* @param AppManager $appManager
* @param ISession $session
* @param IConfig $config
+ * @param IManager $activityManager
+ * @param ILogger $logger
*/
- public function __construct(AppManager $appManager, ISession $session, IConfig $config) {
+ public function __construct(AppManager $appManager, ISession $session, IConfig $config, IManager $activityManager,
+ ILogger $logger) {
$this->appManager = $appManager;
$this->session = $session;
$this->config = $config;
+ $this->activityManager = $activityManager;
+ $this->logger = $logger;
}
/**
@@ -184,11 +198,40 @@ class Manager {
}
$this->session->remove(self::SESSION_UID_KEY);
$this->session->remove(self::REMEMBER_LOGIN);
+
+ $this->publishEvent($user, 'twofactor_success', [
+ 'provider' => $provider->getDisplayName(),
+ ]);
+ } else {
+ $this->publishEvent($user, 'twofactor_failed', [
+ 'provider' => $provider->getDisplayName(),
+ ]);
}
return $passed;
}
/**
+ * Push a 2fa event the user's activity stream
+ *
+ * @param IUser $user
+ * @param string $event
+ */
+ private function publishEvent(IUser $user, $event, array $params) {
+ $activity = $this->activityManager->generateEvent();
+ $activity->setApp('twofactor_generic')
+ ->setType('twofactor')
+ ->setAuthor($user->getUID())
+ ->setAffectedUser($user->getUID())
+ ->setSubject($event, $params);
+ try {
+ $this->activityManager->publish($activity);
+ } catch (Exception $e) {
+ $this->logger->warning('could not publish backup code creation activity', ['app' => 'twofactor_backupcodes']);
+ $this->logger->logException($e, ['app' => 'twofactor_backupcodes']);
+ }
+ }
+
+ /**
* Check if the currently logged in user needs to pass 2FA
*
* @param IUser $user the currently logged in user
diff --git a/lib/private/Console/TimestampFormatter.php b/lib/private/Console/TimestampFormatter.php
index 5b292439a4c..66dd38e6ac3 100644
--- a/lib/private/Console/TimestampFormatter.php
+++ b/lib/private/Console/TimestampFormatter.php
@@ -97,11 +97,11 @@ class TimestampFormatter implements OutputFormatterInterface {
*/
public function format($message) {
- $timeZone = $this->config->getSystemValue('logtimezone', null);
+ $timeZone = $this->config->getSystemValue('logtimezone', 'UTC');
$timeZone = $timeZone !== null ? new \DateTimeZone($timeZone) : null;
$time = new \DateTime('now', $timeZone);
- $timestampInfo = $time->format($this->config->getSystemValue('logdateformat', 'c'));
+ $timestampInfo = $time->format($this->config->getSystemValue('logdateformat', \DateTime::ATOM));
return $timestampInfo . ' ' . $this->formatter->format($message);
}
diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php
index f9170e97a02..f172260df79 100644
--- a/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php
+++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php
@@ -30,6 +30,8 @@ use OC\DB\QueryBuilder\Literal;
use OC\DB\QueryBuilder\QueryFunction;
use OC\DB\QueryBuilder\QuoteHelper;
use OCP\DB\QueryBuilder\IExpressionBuilder;
+use OCP\DB\QueryBuilder\ILiteral;
+use OCP\DB\QueryBuilder\IQueryFunction;
use OCP\IDBConnection;
class ExpressionBuilder implements IExpressionBuilder {
@@ -39,12 +41,16 @@ class ExpressionBuilder implements IExpressionBuilder {
/** @var QuoteHelper */
protected $helper;
+ /** @var IDBConnection */
+ protected $connection;
+
/**
* Initializes a new <tt>ExpressionBuilder</tt>.
*
* @param \OCP\IDBConnection $connection
*/
public function __construct(IDBConnection $connection) {
+ $this->connection = $connection;
$this->helper = new QuoteHelper();
$this->expressionBuilder = new DoctrineExpressionBuilder($connection);
}
@@ -345,12 +351,42 @@ class ExpressionBuilder implements IExpressionBuilder {
}
/**
+ * Binary AND Operator copies a bit to the result if it exists in both operands.
+ *
+ * @param string|ILiteral $x The field or value to check
+ * @param int $y Bitmap that must be set
+ * @return IQueryFunction
+ * @since 12.0.0
+ */
+ public function bitwiseAnd($x, $y) {
+ return new QueryFunction($this->connection->getDatabasePlatform()->getBitAndComparisonExpression(
+ $this->helper->quoteColumnName($x),
+ $y
+ ));
+ }
+
+ /**
+ * Binary OR Operator copies a bit if it exists in either operand.
+ *
+ * @param string|ILiteral $x The field or value to check
+ * @param int $y Bitmap that must be set
+ * @return IQueryFunction
+ * @since 12.0.0
+ */
+ public function bitwiseOr($x, $y) {
+ return new QueryFunction($this->connection->getDatabasePlatform()->getBitOrComparisonExpression(
+ $this->helper->quoteColumnName($x),
+ $y
+ ));
+ }
+
+ /**
* Quotes a given input parameter.
*
* @param mixed $input The parameter to be quoted.
* @param mixed|null $type One of the IQueryBuilder::PARAM_* constants
*
- * @return Literal
+ * @return ILiteral
*/
public function literal($input, $type = null) {
return new Literal($this->expressionBuilder->literal($input, $type));
diff --git a/lib/private/Encryption/Keys/Storage.php b/lib/private/Encryption/Keys/Storage.php
index 8149ffe9dce..e8d152581fe 100644
--- a/lib/private/Encryption/Keys/Storage.php
+++ b/lib/private/Encryption/Keys/Storage.php
@@ -51,6 +51,9 @@ class Storage implements IStorage {
/** @var string */
private $encryption_base_dir;
+ /** @var string */
+ private $backup_base_dir;
+
/** @var array */
private $keyCache = [];
@@ -64,6 +67,7 @@ class Storage implements IStorage {
$this->encryption_base_dir = '/files_encryption';
$this->keys_base_dir = $this->encryption_base_dir .'/keys';
+ $this->backup_base_dir = $this->encryption_base_dir .'/backup';
$this->root_dir = $this->util->getKeyStorageRoot();
}
@@ -287,6 +291,37 @@ class Storage implements IStorage {
}
/**
+ * backup keys of a given encryption module
+ *
+ * @param string $encryptionModuleId
+ * @param string $purpose
+ * @param string $uid
+ * @return bool
+ * @since 12.0.0
+ */
+ public function backupUserKeys($encryptionModuleId, $purpose, $uid) {
+ $source = $uid . $this->encryption_base_dir . '/' . $encryptionModuleId;
+ $backupDir = $uid . $this->backup_base_dir;
+ if (!$this->view->file_exists($backupDir)) {
+ $this->view->mkdir($backupDir);
+ }
+
+ $backupDir = $backupDir . '/' . $purpose . '.' . $encryptionModuleId . '.' . $this->getTimestamp();
+ $this->view->mkdir($backupDir);
+
+ return $this->view->copy($source, $backupDir);
+ }
+
+ /**
+ * get the current timestamp
+ *
+ * @return int
+ */
+ protected function getTimestamp() {
+ return time();
+ }
+
+ /**
* get system wide path and detect mount points
*
* @param string $path
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php
index 3a3f51488e6..a966d621c58 100644
--- a/lib/private/Files/Cache/Cache.php
+++ b/lib/private/Files/Cache/Cache.php
@@ -142,7 +142,7 @@ class Cache implements ICache {
}
return $data;
} else {
- return self::cacheEntryFromData($data, $this->storageId, $this->mimetypeLoader);
+ return self::cacheEntryFromData($data, $this->mimetypeLoader);
}
}
@@ -150,11 +150,10 @@ class Cache implements ICache {
* Create a CacheEntry from database row
*
* @param array $data
- * @param string $storageId
* @param IMimeTypeLoader $mimetypeLoader
* @return CacheEntry
*/
- public static function cacheEntryFromData($data, $storageId, IMimeTypeLoader $mimetypeLoader) {
+ public static function cacheEntryFromData($data, IMimeTypeLoader $mimetypeLoader) {
//fix types
$data['fileid'] = (int)$data['fileid'];
$data['parent'] = (int)$data['parent'];
@@ -163,7 +162,7 @@ class Cache implements ICache {
$data['storage_mtime'] = (int)$data['storage_mtime'];
$data['encryptedVersion'] = (int)$data['encrypted'];
$data['encrypted'] = (bool)$data['encrypted'];
- $data['storage'] = $storageId;
+ $data['storage_id'] = $data['storage'];
$data['mimetype'] = $mimetypeLoader->getMimetypeById($data['mimetype']);
$data['mimepart'] = $mimetypeLoader->getMimetypeById($data['mimepart']);
if ($data['storage_mtime'] == 0) {
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index c9a701d24b6..423eb5c423d 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -141,7 +141,11 @@ class UserMountCache implements IUserMountCache {
foreach ($cachedMounts as $cachedMount) {
if (
$newMount->getRootId() === $cachedMount->getRootId() &&
- ($newMount->getMountPoint() !== $cachedMount->getMountPoint() || $newMount->getMountId() !== $cachedMount->getMountId())
+ (
+ $newMount->getMountPoint() !== $cachedMount->getMountPoint() ||
+ $newMount->getStorageId() !== $cachedMount->getStorageId() ||
+ $newMount->getMountId() !== $cachedMount->getMountId()
+ )
) {
$changed[] = $newMount;
}
@@ -169,6 +173,7 @@ class UserMountCache implements IUserMountCache {
$builder = $this->connection->getQueryBuilder();
$query = $builder->update('mounts')
+ ->set('storage_id', $builder->createNamedParameter($mount->getStorageId()))
->set('mount_point', $builder->createNamedParameter($mount->getMountPoint()))
->set('mount_id', $builder->createNamedParameter($mount->getMountId(), IQueryBuilder::PARAM_INT))
->where($builder->expr()->eq('user_id', $builder->createNamedParameter($mount->getUser()->getUID())))
diff --git a/lib/private/Files/Mount/LocalHomeMountProvider.php b/lib/private/Files/Mount/LocalHomeMountProvider.php
index 23bbfcd5ffa..9057f62995f 100644
--- a/lib/private/Files/Mount/LocalHomeMountProvider.php
+++ b/lib/private/Files/Mount/LocalHomeMountProvider.php
@@ -39,9 +39,6 @@ class LocalHomeMountProvider implements IHomeMountProvider {
*/
public function getHomeMountForUser(IUser $user, IStorageFactory $loader) {
$arguments = ['user' => $user];
- if (\OC\Files\Cache\Storage::exists('local::' . $user->getHome() . '/')) {
- $arguments['legacy'] = true;
- }
return new MountPoint('\OC\Files\Storage\Home', '/' . $user->getUID(), $arguments, $loader);
}
}
diff --git a/lib/private/Files/Node/File.php b/lib/private/Files/Node/File.php
index c4430b9181d..4bfa5d583f7 100644
--- a/lib/private/Files/Node/File.php
+++ b/lib/private/Files/Node/File.php
@@ -30,6 +30,16 @@ use OCP\Files\NotPermittedException;
class File extends Node implements \OCP\Files\File {
/**
+ * Creates a Folder that represents a non-existing path
+ *
+ * @param string $path path
+ * @return string non-existing node class
+ */
+ protected function createNonExistingNode($path) {
+ return new NonExistingFile($this->root, $this->view, $path);
+ }
+
+ /**
* @return string
* @throws \OCP\Files\NotPermittedException
*/
@@ -114,52 +124,6 @@ class File extends Node implements \OCP\Files\File {
}
/**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function copy($targetPath) {
- $targetPath = $this->normalizePath($targetPath);
- $parent = $this->root->get(dirname($targetPath));
- if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
- $nonExisting = new NonExistingFile($this->root, $this->view, $targetPath);
- $this->root->emit('\OC\Files', 'preCopy', array($this, $nonExisting));
- $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
- $this->view->copy($this->path, $targetPath);
- $targetNode = $this->root->get($targetPath);
- $this->root->emit('\OC\Files', 'postCopy', array($this, $targetNode));
- $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
- return $targetNode;
- } else {
- throw new NotPermittedException();
- }
- }
-
- /**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function move($targetPath) {
- $targetPath = $this->normalizePath($targetPath);
- $parent = $this->root->get(dirname($targetPath));
- if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
- $nonExisting = new NonExistingFile($this->root, $this->view, $targetPath);
- $this->root->emit('\OC\Files', 'preRename', array($this, $nonExisting));
- $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
- $this->view->rename($this->path, $targetPath);
- $targetNode = $this->root->get($targetPath);
- $this->root->emit('\OC\Files', 'postRename', array($this, $targetNode));
- $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
- $this->path = $targetPath;
- $this->fileInfo = null;
- return $targetNode;
- } else {
- throw new NotPermittedException();
- }
- }
-
- /**
* @param string $type
* @param bool $raw
* @return string
diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php
index 288a02ef207..fd907f708f3 100644
--- a/lib/private/Files/Node/Folder.php
+++ b/lib/private/Files/Node/Folder.php
@@ -36,6 +36,16 @@ use OCP\Files\NotPermittedException;
class Folder extends Node implements \OCP\Files\Folder {
/**
+ * Creates a Folder that represents a non-existing path
+ *
+ * @param string $path path
+ * @return string non-existing node class
+ */
+ protected function createNonExistingNode($path) {
+ return new NonExistingFolder($this->root, $this->view, $path);
+ }
+
+ /**
* @param string $path path relative to the folder
* @return string
* @throws \OCP\Files\NotPermittedException
@@ -326,51 +336,6 @@ class Folder extends Node implements \OCP\Files\Folder {
}
/**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function copy($targetPath) {
- $targetPath = $this->normalizePath($targetPath);
- $parent = $this->root->get(dirname($targetPath));
- if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
- $nonExisting = new NonExistingFolder($this->root, $this->view, $targetPath);
- $this->root->emit('\OC\Files', 'preCopy', array($this, $nonExisting));
- $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
- $this->view->copy($this->path, $targetPath);
- $targetNode = $this->root->get($targetPath);
- $this->root->emit('\OC\Files', 'postCopy', array($this, $targetNode));
- $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
- return $targetNode;
- } else {
- throw new NotPermittedException('No permission to copy to path');
- }
- }
-
- /**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function move($targetPath) {
- $targetPath = $this->normalizePath($targetPath);
- $parent = $this->root->get(dirname($targetPath));
- if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
- $nonExisting = new NonExistingFolder($this->root, $this->view, $targetPath);
- $this->root->emit('\OC\Files', 'preRename', array($this, $nonExisting));
- $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
- $this->view->rename($this->path, $targetPath);
- $targetNode = $this->root->get($targetPath);
- $this->root->emit('\OC\Files', 'postRename', array($this, $targetNode));
- $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
- $this->path = $targetPath;
- return $targetNode;
- } else {
- throw new NotPermittedException('No permission to move to path');
- }
- }
-
- /**
* Add a suffix to the name in case the file exists
*
* @param string $name
diff --git a/lib/private/Files/Node/Node.php b/lib/private/Files/Node/Node.php
index 226c182622f..e00debe6903 100644
--- a/lib/private/Files/Node/Node.php
+++ b/lib/private/Files/Node/Node.php
@@ -33,6 +33,7 @@ use OCP\Files\InvalidPathException;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
+// FIXME: this class really should be abstract
class Node implements \OCP\Files\Node {
/**
* @var \OC\Files\View $view
@@ -56,7 +57,7 @@ class Node implements \OCP\Files\Node {
/**
* @param \OC\Files\View $view
- * @param \OC\Files\Node\Root $root
+ * @param \OCP\Files\IRootFolder $root
* @param string $path
* @param FileInfo $fileInfo
*/
@@ -68,6 +69,16 @@ class Node implements \OCP\Files\Node {
}
/**
+ * Creates a Node of the same type that represents a non-existing path
+ *
+ * @param string $path path
+ * @return string non-existing node class
+ */
+ protected function createNonExistingNode($path) {
+ throw new \Exception('Must be implemented by subclasses');
+ }
+
+ /**
* Returns the matching file info
*
* @return FileInfo
@@ -106,28 +117,11 @@ class Node implements \OCP\Files\Node {
return ($this->getPermissions() & $permissions) === $permissions;
}
- /**
- * @param string $targetPath
- * @throws \OCP\Files\NotPermittedException
- * @return \OC\Files\Node\Node
- */
- public function move($targetPath) {
- return;
- }
-
public function delete() {
return;
}
/**
- * @param string $targetPath
- * @return \OC\Files\Node\Node
- */
- public function copy($targetPath) {
- return;
- }
-
- /**
* @param int $mtime
* @throws \OCP\Files\NotPermittedException
*/
@@ -381,4 +375,54 @@ class Node implements \OCP\Files\Node {
public function unlock($type) {
$this->view->unlockFile($this->path, $type);
}
+
+ /**
+ * @param string $targetPath
+ * @throws \OCP\Files\NotPermittedException if copy not allowed or failed
+ * @return \OC\Files\Node\Node
+ */
+ public function copy($targetPath) {
+ $targetPath = $this->normalizePath($targetPath);
+ $parent = $this->root->get(dirname($targetPath));
+ if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
+ $nonExisting = $this->createNonExistingNode($targetPath);
+ $this->root->emit('\OC\Files', 'preCopy', [$this, $nonExisting]);
+ $this->root->emit('\OC\Files', 'preWrite', [$nonExisting]);
+ if (!$this->view->copy($this->path, $targetPath)) {
+ throw new NotPermittedException('Could not copy ' . $this->path . ' to ' . $targetPath);
+ }
+ $targetNode = $this->root->get($targetPath);
+ $this->root->emit('\OC\Files', 'postCopy', [$this, $targetNode]);
+ $this->root->emit('\OC\Files', 'postWrite', [$targetNode]);
+ return $targetNode;
+ } else {
+ throw new NotPermittedException('No permission to copy to path ' . $targetPath);
+ }
+ }
+
+ /**
+ * @param string $targetPath
+ * @throws \OCP\Files\NotPermittedException if move not allowed or failed
+ * @return \OC\Files\Node\Node
+ */
+ public function move($targetPath) {
+ $targetPath = $this->normalizePath($targetPath);
+ $parent = $this->root->get(dirname($targetPath));
+ if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
+ $nonExisting = $this->createNonExistingNode($targetPath);
+ $this->root->emit('\OC\Files', 'preRename', [$this, $nonExisting]);
+ $this->root->emit('\OC\Files', 'preWrite', [$nonExisting]);
+ if (!$this->view->rename($this->path, $targetPath)) {
+ throw new NotPermittedException('Could not move ' . $this->path . ' to ' . $targetPath);
+ }
+ $targetNode = $this->root->get($targetPath);
+ $this->root->emit('\OC\Files', 'postRename', [$this, $targetNode]);
+ $this->root->emit('\OC\Files', 'postWrite', [$targetNode]);
+ $this->path = $targetPath;
+ return $targetNode;
+ } else {
+ throw new NotPermittedException('No permission to move to path ' . $targetPath);
+ }
+ }
+
}
diff --git a/lib/private/Files/Notify/Change.php b/lib/private/Files/Notify/Change.php
new file mode 100644
index 00000000000..78cc007b27d
--- /dev/null
+++ b/lib/private/Files/Notify/Change.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @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\Files\Notify;
+
+use OCP\Files\Notify\IChange;
+
+class Change implements IChange {
+ /** @var int */
+ private $type;
+
+ /** @var string */
+ private $path;
+
+ /**
+ * Change constructor.
+ *
+ * @param int $type
+ * @param string $path
+ */
+ public function __construct($type, $path) {
+ $this->type = $type;
+ $this->path = $path;
+ }
+
+ /**
+ * Get the type of the change
+ *
+ * @return int IChange::ADDED, IChange::REMOVED, IChange::MODIFIED or IChange::RENAMED
+ */
+ public function getType() {
+ return $this->type;
+ }
+
+ /**
+ * Get the path of the file that was changed relative to the root of the storage
+ *
+ * Note, for rename changes this path is the old path for the file
+ *
+ * @return mixed
+ */
+ public function getPath() {
+ return $this->path;
+ }
+}
diff --git a/lib/private/Files/Notify/RenameChange.php b/lib/private/Files/Notify/RenameChange.php
new file mode 100644
index 00000000000..b83dffa0cb2
--- /dev/null
+++ b/lib/private/Files/Notify/RenameChange.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @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\Files\Notify;
+
+use OCP\Files\Notify\IRenameChange;
+
+class RenameChange extends Change implements IRenameChange {
+ /** @var string */
+ private $targetPath;
+
+ /**
+ * Change constructor.
+ *
+ * @param int $type
+ * @param string $path
+ * @param string $targetPath
+ */
+ public function __construct($type, $path, $targetPath) {
+ parent::__construct($type, $path);
+ $this->targetPath = $targetPath;
+ }
+
+ /**
+ * Get the new path of the renamed file relative to the storage root
+ *
+ * @return string
+ */
+ public function getTargetPath() {
+ return $this->targetPath;
+ }
+}
diff --git a/lib/private/Files/ObjectStore/ObjectStoreStorage.php b/lib/private/Files/ObjectStore/ObjectStoreStorage.php
index 2dcf830cc1e..ab77c21e6c4 100644
--- a/lib/private/Files/ObjectStore/ObjectStoreStorage.php
+++ b/lib/private/Files/ObjectStore/ObjectStoreStorage.php
@@ -25,16 +25,12 @@
namespace OC\Files\ObjectStore;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use OC\Files\Cache\CacheEntry;
use OCP\Files\ObjectStore\IObjectStore;
class ObjectStoreStorage extends \OC\Files\Storage\Common {
-
- /**
- * @var array
- */
- private static $tmpFiles = array();
/**
* @var \OCP\Files\ObjectStore\IObjectStore $objectStore
*/
@@ -291,14 +287,14 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
$ext = '';
}
$tmpFile = \OC::$server->getTempManager()->getTemporaryFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
}
- self::$tmpFiles[$tmpFile] = $path;
-
- return fopen('close://' . $tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
return false;
}
@@ -368,12 +364,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
return true;
}
- public function writeBack($tmpFile) {
- if (!isset(self::$tmpFiles[$tmpFile])) {
- return;
- }
-
- $path = self::$tmpFiles[$tmpFile];
+ public function writeBack($tmpFile, $path) {
$stat = $this->stat($path);
if (empty($stat)) {
// create new file
diff --git a/lib/private/Files/Storage/Common.php b/lib/private/Files/Storage/Common.php
index 5561f6a889b..f3e3cb9e58c 100644
--- a/lib/private/Files/Storage/Common.php
+++ b/lib/private/Files/Storage/Common.php
@@ -436,10 +436,14 @@ abstract class Common implements Storage, ILockingStorage {
* @return bool
*/
public function test() {
- if ($this->stat('')) {
- return true;
+ try {
+ if ($this->stat('')) {
+ return true;
+ }
+ return false;
+ } catch (\Exception $e) {
+ return false;
}
- return false;
}
/**
diff --git a/lib/private/Files/Storage/DAV.php b/lib/private/Files/Storage/DAV.php
index ea4bbba2748..3b89a66d6a2 100644
--- a/lib/private/Files/Storage/DAV.php
+++ b/lib/private/Files/Storage/DAV.php
@@ -36,6 +36,7 @@ namespace OC\Files\Storage;
use Exception;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Message\ResponseInterface;
+use Icewind\Streams\CallbackWrapper;
use OC\Files\Filesystem;
use OC\Files\Stream\Close;
use Icewind\Streams\IteratorDirectory;
@@ -48,7 +49,6 @@ use OCP\Files\StorageInvalidException;
use OCP\Files\StorageNotAvailableException;
use OCP\Util;
use Sabre\DAV\Client;
-use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\Xml\Property\ResourceType;
use Sabre\HTTP\ClientException;
use Sabre\HTTP\ClientHttpException;
@@ -77,8 +77,6 @@ class DAV extends Common {
private $client;
/** @var ArrayCache */
private $statCache;
- /** @var array */
- private static $tempFiles = [];
/** @var \OCP\Http\Client\IClientService */
private $httpClientService;
@@ -203,13 +201,15 @@ class DAV extends Common {
$this->init();
$path = $this->cleanPath($path);
try {
- $response = $this->client->propfind(
+ $response = $this->client->propFind(
$this->encodePath($path),
- array(),
+ [],
1
);
- $id = md5('webdav' . $this->root . $path);
- $content = array();
+ if ($response === false) {
+ return false;
+ }
+ $content = [];
$files = array_keys($response);
array_shift($files); //the first entry is the current directory
@@ -226,13 +226,6 @@ class DAV extends Common {
$content[] = $file;
}
return IteratorDirectory::wrap($content);
- } catch (ClientHttpException $e) {
- if ($e->getHttpStatus() === 404) {
- $this->statCache->clear($path . '/');
- $this->statCache->set($path, false);
- return false;
- }
- $this->convertException($e, $path);
} catch (\Exception $e) {
$this->convertException($e, $path);
}
@@ -247,22 +240,18 @@ class DAV extends Common {
*
* @param string $path path to propfind
*
- * @return array propfind response
+ * @return array|boolean propfind response or false if the entry was not found
*
- * @throws NotFound
+ * @throws ClientHttpException
*/
protected function propfind($path) {
$path = $this->cleanPath($path);
$cachedResponse = $this->statCache->get($path);
- if ($cachedResponse === false) {
- // we know it didn't exist
- throw new NotFound();
- }
// we either don't know it, or we know it exists but need more details
if (is_null($cachedResponse) || $cachedResponse === true) {
$this->init();
try {
- $response = $this->client->propfind(
+ $response = $this->client->propFind(
$this->encodePath($path),
array(
'{DAV:}getlastmodified',
@@ -275,11 +264,15 @@ class DAV extends Common {
)
);
$this->statCache->set($path, $response);
- } catch (NotFound $e) {
- // remember that this path did not exist
- $this->statCache->clear($path . '/');
- $this->statCache->set($path, false);
- throw $e;
+ } catch (ClientHttpException $e) {
+ if ($e->getHttpStatus() === 404) {
+ $this->statCache->clear($path . '/');
+ $this->statCache->set($path, false);
+ return false;
+ }
+ $this->convertException($e, $path);
+ } catch (\Exception $e) {
+ $this->convertException($e, $path);
}
} else {
$response = $cachedResponse;
@@ -291,17 +284,15 @@ class DAV extends Common {
public function filetype($path) {
try {
$response = $this->propfind($path);
- $responseType = array();
+ if ($response === false) {
+ return false;
+ }
+ $responseType = [];
if (isset($response["{DAV:}resourcetype"])) {
/** @var ResourceType[] $response */
$responseType = $response["{DAV:}resourcetype"]->getValue();
}
return (count($responseType) > 0 and $responseType[0] == "{DAV:}collection") ? 'dir' : 'file';
- } catch (ClientHttpException $e) {
- if ($e->getHttpStatus() === 404) {
- return false;
- }
- $this->convertException($e, $path);
} catch (\Exception $e) {
$this->convertException($e, $path);
}
@@ -320,13 +311,7 @@ class DAV extends Common {
return true;
}
// need to get from server
- $this->propfind($path);
- return true; //no 404 exception
- } catch (ClientHttpException $e) {
- if ($e->getHttpStatus() === 404) {
- return false;
- }
- $this->convertException($e, $path);
+ return ($this->propfind($path) !== false);
} catch (\Exception $e) {
$this->convertException($e, $path);
}
@@ -409,20 +394,19 @@ class DAV extends Common {
}
$tmpFile = $tempManager->getTemporaryFile($ext);
}
- Close::registerCallback($tmpFile, array($this, 'writeBack'));
- self::$tempFiles[$tmpFile] = $path;
- return fopen('close://' . $tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
}
/**
* @param string $tmpFile
*/
- public function writeBack($tmpFile) {
- if (isset(self::$tempFiles[$tmpFile])) {
- $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
- unlink($tmpFile);
- }
+ public function writeBack($tmpFile, $path) {
+ $this->uploadFile($tmpFile, $path);
+ unlink($tmpFile);
}
/** {@inheritdoc} */
@@ -431,7 +415,10 @@ class DAV extends Common {
$path = $this->cleanPath($path);
try {
// TODO: cacheable ?
- $response = $this->client->propfind($this->encodePath($path), array('{DAV:}quota-available-bytes'));
+ $response = $this->client->propfind($this->encodePath($path), ['{DAV:}quota-available-bytes']);
+ if ($response === false) {
+ return FileInfo::SPACE_UNKNOWN;
+ }
if (isset($response['{DAV:}quota-available-bytes'])) {
return (int)$response['{DAV:}quota-available-bytes'];
} else {
@@ -457,6 +444,9 @@ class DAV extends Common {
$this->client->proppatch($this->encodePath($path), ['{DAV:}lastmodified' => $mtime]);
// non-owncloud clients might not have accepted the property, need to recheck it
$response = $this->client->propfind($this->encodePath($path), ['{DAV:}getlastmodified'], 0);
+ if ($response === false) {
+ return false;
+ }
if (isset($response['{DAV:}getlastmodified'])) {
$remoteMtime = strtotime($response['{DAV:}getlastmodified']);
if ($remoteMtime !== $mtime) {
@@ -579,15 +569,13 @@ class DAV extends Common {
public function stat($path) {
try {
$response = $this->propfind($path);
- return array(
+ if (!$response) {
+ return false;
+ }
+ return [
'mtime' => strtotime($response['{DAV:}getlastmodified']),
'size' => (int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0,
- );
- } catch (ClientHttpException $e) {
- if ($e->getHttpStatus() === 404) {
- return array();
- }
- $this->convertException($e, $path);
+ ];
} catch (\Exception $e) {
$this->convertException($e, $path);
}
@@ -598,7 +586,10 @@ class DAV extends Common {
public function getMimeType($path) {
try {
$response = $this->propfind($path);
- $responseType = array();
+ if ($response === false) {
+ return false;
+ }
+ $responseType = [];
if (isset($response["{DAV:}resourcetype"])) {
/** @var ResourceType[] $response */
$responseType = $response["{DAV:}resourcetype"]->getValue();
@@ -611,11 +602,6 @@ class DAV extends Common {
} else {
return false;
}
- } catch (ClientHttpException $e) {
- if ($e->getHttpStatus() === 404) {
- return false;
- }
- $this->convertException($e, $path);
} catch (\Exception $e) {
$this->convertException($e, $path);
}
@@ -706,6 +692,9 @@ class DAV extends Common {
$this->init();
$path = $this->cleanPath($path);
$response = $this->propfind($path);
+ if ($response === false) {
+ return 0;
+ }
if (isset($response['{http://owncloud.org/ns}permissions'])) {
return $this->parsePermissions($response['{http://owncloud.org/ns}permissions']);
} else if ($this->is_dir($path)) {
@@ -722,6 +711,9 @@ class DAV extends Common {
$this->init();
$path = $this->cleanPath($path);
$response = $this->propfind($path);
+ if ($response === false) {
+ return null;
+ }
if (isset($response['{DAV:}getetag'])) {
return trim($response['{DAV:}getetag'], '"');
}
@@ -765,6 +757,13 @@ class DAV extends Common {
// force refresh for $path
$this->statCache->remove($path);
$response = $this->propfind($path);
+ if ($response === false) {
+ if ($path === '') {
+ // if root is gone it means the storage is not available
+ throw new StorageNotAvailableException(get_class($e) . ': ' . $e->getMessage());
+ }
+ return false;
+ }
if (isset($response['{DAV:}getetag'])) {
$cachedData = $this->getCache()->get($path);
$etag = null;
@@ -787,7 +786,7 @@ class DAV extends Common {
return $remoteMtime > $time;
}
} catch (ClientHttpException $e) {
- if ($e->getHttpStatus() === 404 || $e->getHttpStatus() === 405) {
+ if ($e->getHttpStatus() === 405) {
if ($path === '') {
// if root is gone it means the storage is not available
throw new StorageNotAvailableException(get_class($e) . ': ' . $e->getMessage());
diff --git a/lib/private/Files/Storage/Home.php b/lib/private/Files/Storage/Home.php
index e5ba0f9dfe4..57b32349324 100644
--- a/lib/private/Files/Storage/Home.php
+++ b/lib/private/Files/Storage/Home.php
@@ -44,19 +44,12 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
/**
* Construct a Home storage instance
* @param array $arguments array with "user" containing the
- * storage owner and "legacy" containing "true" if the storage is
- * a legacy storage with "local::" URL instead of the new "home::" one.
+ * storage owner
*/
public function __construct($arguments) {
$this->user = $arguments['user'];
$datadir = $this->user->getHome();
- if (isset($arguments['legacy']) && $arguments['legacy']) {
- // legacy home id (<= 5.0.12)
- $this->id = 'local::' . $datadir . '/';
- }
- else {
- $this->id = 'home::' . $this->user->getUID();
- }
+ $this->id = 'home::' . $this->user->getUID();
parent::__construct(array('datadir' => $datadir));
}
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index 4fe7dcafbbf..80d48680be1 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -205,18 +205,7 @@ class Local extends \OC\Files\Storage\Common {
}
public function file_get_contents($path) {
- // file_get_contents() has a memory leak: https://bugs.php.net/bug.php?id=61961
- $fileName = $this->getSourcePath($path);
-
- $fileSize = filesize($fileName);
- if ($fileSize === 0) {
- return '';
- }
-
- $handle = fopen($fileName, 'rb');
- $content = fread($handle, $fileSize);
- fclose($handle);
- return $content;
+ return file_get_contents($this->getSourcePath($path));
}
public function file_put_contents($path, $data) {
diff --git a/lib/private/Files/Stream/Close.php b/lib/private/Files/Stream/Close.php
deleted file mode 100644
index 7cc9903c912..00000000000
--- a/lib/private/Files/Stream/Close.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- *
- * @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/>
- *
- */
-
-namespace OC\Files\Stream;
-
-/**
- * stream wrapper that provides a callback on stream close
- */
-class Close {
- private static $callBacks = array();
- private $path = '';
- private $source;
- private static $open = array();
-
- public function stream_open($path, $mode, $options, &$opened_path) {
- $path = substr($path, strlen('close://'));
- $this->path = $path;
- $this->source = fopen($path, $mode);
- if (is_resource($this->source)) {
- $this->meta = stream_get_meta_data($this->source);
- }
- self::$open[] = $path;
- return is_resource($this->source);
- }
-
- public function stream_seek($offset, $whence = SEEK_SET) {
- return fseek($this->source, $offset, $whence) === 0;
- }
-
- public function stream_tell() {
- return ftell($this->source);
- }
-
- public function stream_read($count) {
- return fread($this->source, $count);
- }
-
- public function stream_write($data) {
- return fwrite($this->source, $data);
- }
-
- public function stream_set_option($option, $arg1, $arg2) {
- switch ($option) {
- case STREAM_OPTION_BLOCKING:
- stream_set_blocking($this->source, $arg1);
- break;
- case STREAM_OPTION_READ_TIMEOUT:
- stream_set_timeout($this->source, $arg1, $arg2);
- break;
- case STREAM_OPTION_WRITE_BUFFER:
- stream_set_write_buffer($this->source, $arg1, $arg2);
- }
- }
-
- public function stream_stat() {
- return fstat($this->source);
- }
-
- public function stream_lock($mode) {
- flock($this->source, $mode);
- }
-
- public function stream_flush() {
- return fflush($this->source);
- }
-
- public function stream_eof() {
- return feof($this->source);
- }
-
- public function url_stat($path) {
- $path = substr($path, strlen('close://'));
- if (file_exists($path)) {
- return stat($path);
- } else {
- return false;
- }
- }
-
- public function stream_close() {
- fclose($this->source);
- if (isset(self::$callBacks[$this->path])) {
- call_user_func(self::$callBacks[$this->path], $this->path);
- }
- }
-
- public function unlink($path) {
- $path = substr($path, strlen('close://'));
- return unlink($path);
- }
-
- /**
- * @param string $path
- */
- public static function registerCallback($path, $callback) {
- self::$callBacks[$path] = $callback;
- }
-}
diff --git a/lib/private/Files/Stream/Dir.php b/lib/private/Files/Stream/Dir.php
deleted file mode 100644
index f8f6b1fa89a..00000000000
--- a/lib/private/Files/Stream/Dir.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- *
- * @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/>
- *
- */
-
-namespace OC\Files\Stream;
-
-class Dir {
- private static $dirs = array();
- private $name;
- private $index;
-
- public function dir_opendir($path, $options) {
- $this->name = substr($path, strlen('fakedir://'));
- $this->index = 0;
- if (!isset(self::$dirs[$this->name])) {
- self::$dirs[$this->name] = array();
- }
- return true;
- }
-
- public function dir_readdir() {
- if ($this->index >= count(self::$dirs[$this->name])) {
- return false;
- }
- $filename = self::$dirs[$this->name][$this->index];
- $this->index++;
- return $filename;
- }
-
- public function dir_closedir() {
- $this->name = '';
- return true;
- }
-
- public function dir_rewinddir() {
- $this->index = 0;
- return true;
- }
-
- /**
- * @param string $path
- * @param string[] $content
- */
- public static function register($path, $content) {
- self::$dirs[$path] = $content;
- }
-}
diff --git a/lib/private/Files/Stream/Quota.php b/lib/private/Files/Stream/Quota.php
index f064ca6c011..624a2021b9c 100644
--- a/lib/private/Files/Stream/Quota.php
+++ b/lib/private/Files/Stream/Quota.php
@@ -25,61 +25,44 @@
namespace OC\Files\Stream;
+use Icewind\Streams\Wrapper;
+
/**
* stream wrapper limits the amount of data that can be written to a stream
*
- * usage: void \OC\Files\Stream\Quota::register($id, $stream, $limit)
- * or: resource \OC\Files\Stream\Quota::wrap($stream, $limit)
+ * usage: resource \OC\Files\Stream\Quota::wrap($stream, $limit)
*/
-class Quota {
- private static $streams = array();
-
- /**
- * @var resource $source
- */
- private $source;
-
+class Quota extends Wrapper {
/**
* @var int $limit
*/
private $limit;
/**
- * @param string $id
- * @param resource $stream
- * @param int $limit
- */
- public static function register($id, $stream, $limit) {
- self::$streams[$id] = array($stream, $limit);
- }
-
- /**
- * remove all registered streams
- */
- public static function clear() {
- self::$streams = array();
- }
-
- /**
* @param resource $stream
* @param int $limit
* @return resource
*/
static public function wrap($stream, $limit) {
- $id = uniqid();
- self::register($id, $stream, $limit);
- $meta = stream_get_meta_data($stream);
- return fopen('quota://' . $id, $meta['mode']);
+ $context = stream_context_create(array(
+ 'quota' => array(
+ 'source' => $stream,
+ 'limit' => $limit
+ )
+ ));
+ return Wrapper::wrapSource($stream, $context, 'quota', self::class);
}
public function stream_open($path, $mode, $options, &$opened_path) {
- $id = substr($path, strlen('quota://'));
- if (isset(self::$streams[$id])) {
- list($this->source, $this->limit) = self::$streams[$id];
- return true;
- } else {
- return false;
- }
+ $context = $this->loadContext('quota');
+ $this->source = $context['source'];
+ $this->limit = $context['limit'];
+
+ return true;
+ }
+
+ public function dir_opendir($path, $options) {
+ return false;
}
public function stream_seek($offset, $whence = SEEK_SET) {
@@ -103,10 +86,6 @@ class Quota {
return fseek($this->source, $offset, $whence) === 0;
}
- public function stream_tell() {
- return ftell($this->source);
- }
-
public function stream_read($count) {
$this->limit -= $count;
return fread($this->source, $count);
@@ -121,37 +100,4 @@ class Quota {
$this->limit -= $size;
return fwrite($this->source, $data);
}
-
- public function stream_set_option($option, $arg1, $arg2) {
- switch ($option) {
- case STREAM_OPTION_BLOCKING:
- stream_set_blocking($this->source, $arg1);
- break;
- case STREAM_OPTION_READ_TIMEOUT:
- stream_set_timeout($this->source, $arg1, $arg2);
- break;
- case STREAM_OPTION_WRITE_BUFFER:
- stream_set_write_buffer($this->source, $arg1, $arg2);
- }
- }
-
- public function stream_stat() {
- return fstat($this->source);
- }
-
- public function stream_lock($mode) {
- return flock($this->source, $mode);
- }
-
- public function stream_flush() {
- return fflush($this->source);
- }
-
- public function stream_eof() {
- return feof($this->source);
- }
-
- public function stream_close() {
- fclose($this->source);
- }
}
diff --git a/lib/private/Files/Stream/StaticStream.php b/lib/private/Files/Stream/StaticStream.php
deleted file mode 100644
index 3c91b23fd36..00000000000
--- a/lib/private/Files/Stream/StaticStream.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- *
- * @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/>
- *
- */
-
-namespace OC\Files\Stream;
-
-class StaticStream {
- const MODE_FILE = 0100000;
-
- public $context;
- protected static $data = array();
-
- protected $path = '';
- protected $pointer = 0;
- protected $writable = false;
-
- public function stream_close() {
- }
-
- public function stream_eof() {
- return $this->pointer >= strlen(self::$data[$this->path]);
- }
-
- public function stream_flush() {
- }
-
- public static function clear() {
- self::$data = array();
- }
-
- public function stream_open($path, $mode, $options, &$opened_path) {
- switch ($mode[0]) {
- case 'r':
- if (!isset(self::$data[$path])) return false;
- $this->path = $path;
- $this->writable = isset($mode[1]) && $mode[1] == '+';
- break;
- case 'w':
- self::$data[$path] = '';
- $this->path = $path;
- $this->writable = true;
- break;
- case 'a':
- if (!isset(self::$data[$path])) self::$data[$path] = '';
- $this->path = $path;
- $this->writable = true;
- $this->pointer = strlen(self::$data[$path]);
- break;
- case 'x':
- if (isset(self::$data[$path])) return false;
- $this->path = $path;
- $this->writable = true;
- break;
- case 'c':
- if (!isset(self::$data[$path])) self::$data[$path] = '';
- $this->path = $path;
- $this->writable = true;
- break;
- default:
- return false;
- }
- $opened_path = $this->path;
- return true;
- }
-
- public function stream_read($count) {
- $bytes = min(strlen(self::$data[$this->path]) - $this->pointer, $count);
- $data = substr(self::$data[$this->path], $this->pointer, $bytes);
- $this->pointer += $bytes;
- return $data;
- }
-
- public function stream_seek($offset, $whence = SEEK_SET) {
- $len = strlen(self::$data[$this->path]);
- switch ($whence) {
- case SEEK_SET:
- if ($offset <= $len) {
- $this->pointer = $offset;
- return true;
- }
- break;
- case SEEK_CUR:
- if ($this->pointer + $offset <= $len) {
- $this->pointer += $offset;
- return true;
- }
- break;
- case SEEK_END:
- if ($len + $offset <= $len) {
- $this->pointer = $len + $offset;
- return true;
- }
- break;
- }
- return false;
- }
-
- public function stream_stat() {
- return $this->url_stat($this->path);
- }
-
- public function stream_tell() {
- return $this->pointer;
- }
-
- public function stream_write($data) {
- if (!$this->writable) return 0;
- $size = strlen($data);
- if ($this->stream_eof()) {
- self::$data[$this->path] .= $data;
- } else {
- self::$data[$this->path] = substr_replace(
- self::$data[$this->path],
- $data,
- $this->pointer
- );
- }
- $this->pointer += $size;
- return $size;
- }
-
- public function unlink($path) {
- if (isset(self::$data[$path])) {
- unset(self::$data[$path]);
- }
- return true;
- }
-
- public function url_stat($path) {
- if (isset(self::$data[$path])) {
- $size = strlen(self::$data[$path]);
- $time = time();
- $data = array(
- 'dev' => 0,
- 'ino' => 0,
- 'mode' => self::MODE_FILE | 0777,
- 'nlink' => 1,
- 'uid' => 0,
- 'gid' => 0,
- 'rdev' => '',
- 'size' => $size,
- 'atime' => $time,
- 'mtime' => $time,
- 'ctime' => $time,
- 'blksize' => -1,
- 'blocks' => -1,
- );
- return array_values($data) + $data;
- }
- return false;
- }
-}
diff --git a/lib/private/Files/Type/Detection.php b/lib/private/Files/Type/Detection.php
index 84d727ebb0e..cd4ddc2f067 100644
--- a/lib/private/Files/Type/Detection.php
+++ b/lib/private/Files/Type/Detection.php
@@ -167,6 +167,10 @@ class Detection implements IMimeTypeDetector {
$this->loadMappings();
$fileName = basename($path);
+
+ // remove leading dot on hidden files with a file extension
+ $fileName = ltrim($fileName, '.');
+
// note: leading dot doesn't qualify as extension
if (strpos($fileName, '.') > 0) {
//try to guess the type by the file extension
diff --git a/lib/private/Files/Utils/Scanner.php b/lib/private/Files/Utils/Scanner.php
index d26c601be1a..98e2c3c8ca2 100644
--- a/lib/private/Files/Utils/Scanner.php
+++ b/lib/private/Files/Utils/Scanner.php
@@ -31,6 +31,7 @@ use OC\Files\Filesystem;
use OC\ForbiddenException;
use OC\Hooks\PublicEmitter;
use OC\Lock\DBLockingProvider;
+use OCA\Files_Sharing\SharedStorage;
use OCP\Files\Storage\IStorage;
use OCP\Files\StorageNotAvailableException;
use OCP\ILogger;
@@ -118,14 +119,19 @@ class Scanner extends PublicEmitter {
public function backgroundScan($dir) {
$mounts = $this->getMounts($dir);
foreach ($mounts as $mount) {
- if (is_null($mount->getStorage())) {
+ $storage = $mount->getStorage();
+ if (is_null($storage)) {
continue;
}
// don't scan the root storage
- if ($mount->getStorage()->instanceOfStorage('\OC\Files\Storage\Local') && $mount->getMountPoint() === '/') {
+ if ($storage->instanceOfStorage('\OC\Files\Storage\Local') && $mount->getMountPoint() === '/') {
+ continue;
+ }
+
+ // don't scan received local shares, these can be scanned when scanning the owner's storage
+ if ($storage->instanceOfStorage(SharedStorage::class)) {
continue;
}
- $storage = $mount->getStorage();
$scanner = $storage->getScanner();
$this->attachListener($mount);
@@ -156,10 +162,10 @@ class Scanner extends PublicEmitter {
}
$mounts = $this->getMounts($dir);
foreach ($mounts as $mount) {
- if (is_null($mount->getStorage())) {
+ $storage = $mount->getStorage();
+ if (is_null($storage)) {
continue;
}
- $storage = $mount->getStorage();
// if the home storage isn't writable then the scanner is run as the wrong user
if ($storage->instanceOfStorage('\OC\Files\Storage\Home') and
(!$storage->isCreatable('') or !$storage->isCreatable('files'))
@@ -171,6 +177,11 @@ class Scanner extends PublicEmitter {
}
}
+
+ // don't scan received local shares, these can be scanned when scanning the owner's storage
+ if ($storage->instanceOfStorage(SharedStorage::class)) {
+ continue;
+ }
$relativePath = $mount->getInternalPath($dir);
$scanner = $storage->getScanner();
$scanner->setUseTransactions(false);
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 6facc7b9462..db21d400b39 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -931,39 +931,36 @@ class View {
/**
* @param string $path
- * @param string $mode
+ * @param string $mode 'r' or 'w'
* @return resource
*/
public function fopen($path, $mode) {
+ $mode = str_replace('b', '', $mode); // the binary flag is a windows only feature which we do not support
$hooks = array();
switch ($mode) {
case 'r':
- case 'rb':
$hooks[] = 'read';
break;
case 'r+':
- case 'rb+':
case 'w+':
- case 'wb+':
case 'x+':
- case 'xb+':
case 'a+':
- case 'ab+':
$hooks[] = 'read';
$hooks[] = 'write';
break;
case 'w':
- case 'wb':
case 'x':
- case 'xb':
case 'a':
- case 'ab':
$hooks[] = 'write';
break;
default:
\OCP\Util::writeLog('core', 'invalid mode (' . $mode . ') for ' . $path, \OCP\Util::ERROR);
}
+ if ($mode !== 'r' && $mode !== 'w') {
+ \OC::$server->getLogger()->info('Trying to open a file with a mode other than "r" or "w" can cause severe performance issues with some backends');
+ }
+
return $this->basicOperation('fopen', $path, $hooks, $mode);
}
@@ -1005,7 +1002,7 @@ class View {
// Create the directories if any
if (!$this->file_exists($filePath)) {
$result = $this->createParentDirectories($filePath);
- if($result === false) {
+ if ($result === false) {
return false;
}
}
@@ -1149,6 +1146,8 @@ class View {
$unlockLater = false;
if ($this->lockingEnabled && $operation === 'fopen' && is_resource($result)) {
$unlockLater = true;
+ // make sure our unlocking callback will still be called if connection is aborted
+ ignore_user_abort(true);
$result = CallbackWrapper::wrap($result, null, null, function () use ($hooks, $path) {
if (in_array('write', $hooks)) {
$this->unlockFile($path, ILockingProvider::LOCK_EXCLUSIVE);
@@ -1357,7 +1356,7 @@ class View {
//add the sizes of other mount points to the folder
$extOnly = ($includeMountPoints === 'ext');
$mounts = Filesystem::getMountManager()->findIn($path);
- $info->setSubMounts(array_filter($mounts, function(IMountPoint $mount) use ($extOnly) {
+ $info->setSubMounts(array_filter($mounts, function (IMountPoint $mount) use ($extOnly) {
$subStorage = $mount->getStorage();
return !($extOnly && $subStorage instanceof \OCA\Files_Sharing\SharedStorage);
}));
@@ -2106,13 +2105,13 @@ class View {
private function createParentDirectories($filePath) {
$directoryParts = explode('/', $filePath);
$directoryParts = array_filter($directoryParts);
- foreach($directoryParts as $key => $part) {
+ foreach ($directoryParts as $key => $part) {
$currentPathElements = array_slice($directoryParts, 0, $key);
$currentPath = '/' . implode('/', $currentPathElements);
- if($this->is_file($currentPath)) {
+ if ($this->is_file($currentPath)) {
return false;
}
- if(!$this->file_exists($currentPath)) {
+ if (!$this->file_exists($currentPath)) {
$this->mkdir($currentPath);
}
}
diff --git a/lib/private/Group/Backend.php b/lib/private/Group/Backend.php
index 14c36d93422..1e8d62f5e42 100644
--- a/lib/private/Group/Backend.php
+++ b/lib/private/Group/Backend.php
@@ -31,23 +31,14 @@ abstract class Backend implements \OCP\GroupInterface {
*/
const NOT_IMPLEMENTED = -501;
- /**
- * actions that user backends can define
- */
- const CREATE_GROUP = 0x00000001;
- const DELETE_GROUP = 0x00000010;
- const ADD_TO_GROUP = 0x00000100;
- const REMOVE_FROM_GOUP = 0x00001000;
- //OBSOLETE const GET_DISPLAYNAME = 0x00010000;
- const COUNT_USERS = 0x00100000;
-
- protected $possibleActions = array(
+ protected $possibleActions = [
self::CREATE_GROUP => 'createGroup',
self::DELETE_GROUP => 'deleteGroup',
self::ADD_TO_GROUP => 'addToGroup',
self::REMOVE_FROM_GOUP => 'removeFromGroup',
self::COUNT_USERS => 'countUsersInGroup',
- );
+ self::GROUP_DETAILS => 'getGroupDetails',
+ ];
/**
* Get all supported actions
diff --git a/lib/private/Group/Database.php b/lib/private/Group/Database.php
index e4144fdbe20..8be24fc50de 100644
--- a/lib/private/Group/Database.php
+++ b/lib/private/Group/Database.php
@@ -202,6 +202,11 @@ class Database extends \OC\Group\Backend {
* if the user exists at all.
*/
public function getUserGroups( $uid ) {
+ //guests has empty or null $uid
+ if ($uid === null || $uid === '') {
+ return [];
+ }
+
$this->fixDI();
// No magic!
diff --git a/lib/private/Group/Group.php b/lib/private/Group/Group.php
index 9379d604c48..69dce215694 100644
--- a/lib/private/Group/Group.php
+++ b/lib/private/Group/Group.php
@@ -31,6 +31,9 @@ namespace OC\Group;
use OCP\IGroup;
class Group implements IGroup {
+ /** @var null|string */
+ protected $displayName;
+
/**
* @var string $id
*/
@@ -66,18 +69,27 @@ class Group implements IGroup {
* @param \OC\Group\Backend[] $backends
* @param \OC\User\Manager $userManager
* @param \OC\Hooks\PublicEmitter $emitter
+ * @param string $displayName
*/
- public function __construct($gid, $backends, $userManager, $emitter = null) {
+ public function __construct($gid, $backends, $userManager, $emitter = null, $displayName = null) {
$this->gid = $gid;
$this->backends = $backends;
$this->userManager = $userManager;
$this->emitter = $emitter;
+ $this->displayName = $displayName;
}
public function getGID() {
return $this->gid;
}
+ public function getDisplayName() {
+ if (is_null($this->displayName)) {
+ return $this->gid;
+ }
+ return $this->displayName;
+ }
+
/**
* get all users in the group
*
diff --git a/lib/private/Group/Manager.php b/lib/private/Group/Manager.php
index 31911138985..944598a8296 100644
--- a/lib/private/Group/Manager.php
+++ b/lib/private/Group/Manager.php
@@ -155,19 +155,29 @@ class Manager extends PublicEmitter implements IGroupManager {
/**
* @param string $gid
+ * @param string $displayName
* @return \OCP\IGroup
*/
- protected function getGroupObject($gid) {
+ protected function getGroupObject($gid, $displayName = null) {
$backends = array();
foreach ($this->backends as $backend) {
- if ($backend->groupExists($gid)) {
+ if ($backend->implementsActions(\OC\Group\Backend::GROUP_DETAILS)) {
+ $groupData = $backend->getGroupDetails($gid);
+ if (is_array($groupData)) {
+ // take the display name from the first backend that has a non-null one
+ if (is_null($displayName) && isset($groupData['displayName'])) {
+ $displayName = $groupData['displayName'];
+ }
+ $backends[] = $backend;
+ }
+ } else if ($backend->groupExists($gid)) {
$backends[] = $backend;
}
}
if (count($backends) === 0) {
return null;
}
- $this->cachedGroups[$gid] = new Group($gid, $backends, $this->userManager, $this);
+ $this->cachedGroups[$gid] = new Group($gid, $backends, $this->userManager, $this, $displayName);
return $this->cachedGroups[$gid];
}
diff --git a/lib/private/Http/Client/Client.php b/lib/private/Http/Client/Client.php
index 8e182111303..4697f2e038c 100644
--- a/lib/private/Http/Client/Client.php
+++ b/lib/private/Http/Client/Client.php
@@ -77,9 +77,10 @@ class Client implements IClient {
}
}
- $this->client->setDefaultOption('headers/User-Agent', 'ownCloud Server Crawler');
- if ($this->getProxyUri() !== '') {
- $this->client->setDefaultOption('proxy', $this->getProxyUri());
+ $this->client->setDefaultOption('headers/User-Agent', 'Nextcloud Server Crawler');
+ $proxyUri = $this->getProxyUri();
+ if ($proxyUri !== '') {
+ $this->client->setDefaultOption('proxy', $proxyUri);
}
}
@@ -93,10 +94,10 @@ class Client implements IClient {
$proxyUserPwd = $this->config->getSystemValue('proxyuserpwd', null);
$proxyUri = '';
- if (!is_null($proxyUserPwd)) {
+ if ($proxyUserPwd !== null) {
$proxyUri .= $proxyUserPwd . '@';
}
- if (!is_null($proxyHost)) {
+ if ($proxyHost !== null) {
$proxyUri .= $proxyHost;
}
diff --git a/lib/private/IntegrityCheck/Checker.php b/lib/private/IntegrityCheck/Checker.php
index 102fe42a99d..419f989fa0f 100644
--- a/lib/private/IntegrityCheck/Checker.php
+++ b/lib/private/IntegrityCheck/Checker.php
@@ -96,12 +96,8 @@ class Checker {
* @return bool
*/
public function isCodeCheckEnforced() {
- $signedChannels = [
- 'daily',
- 'testing',
- 'stable',
- ];
- if(!in_array($this->environmentHelper->getChannel(), $signedChannels, true)) {
+ $notSignedChannels = [ '', 'git'];
+ if (in_array($this->environmentHelper->getChannel(), $notSignedChannels, true)) {
return false;
}
@@ -115,7 +111,7 @@ class Checker {
} else {
$isIntegrityCheckDisabled = false;
}
- if($isIntegrityCheckDisabled === true) {
+ if ($isIntegrityCheckDisabled === true) {
return false;
}
@@ -271,16 +267,23 @@ class Checker {
public function writeAppSignature($path,
X509 $certificate,
RSA $privateKey) {
- if(!is_dir($path)) {
- throw new \Exception('Directory does not exist.');
- }
- $iterator = $this->getFolderIterator($path);
- $hashes = $this->generateHashes($iterator, $path);
- $signature = $this->createSignatureData($hashes, $certificate, $privateKey);
- $this->fileAccessHelper->file_put_contents(
- $path . '/appinfo/signature.json',
+ $appInfoDir = $path . '/appinfo';
+ try {
+ $this->fileAccessHelper->assertDirectoryExists($appInfoDir);
+
+ $iterator = $this->getFolderIterator($path);
+ $hashes = $this->generateHashes($iterator, $path);
+ $signature = $this->createSignatureData($hashes, $certificate, $privateKey);
+ $this->fileAccessHelper->file_put_contents(
+ $appInfoDir . '/signature.json',
json_encode($signature, JSON_PRETTY_PRINT)
- );
+ );
+ } catch (\Exception $e){
+ if (!$this->fileAccessHelper->is_writable($appInfoDir)) {
+ throw new \Exception($appInfoDir . ' is not writable');
+ }
+ throw $e;
+ }
}
/**
@@ -289,17 +292,28 @@ class Checker {
* @param X509 $certificate
* @param RSA $rsa
* @param string $path
+ * @throws \Exception
*/
public function writeCoreSignature(X509 $certificate,
RSA $rsa,
$path) {
- $iterator = $this->getFolderIterator($path, $path);
- $hashes = $this->generateHashes($iterator, $path);
- $signatureData = $this->createSignatureData($hashes, $certificate, $rsa);
- $this->fileAccessHelper->file_put_contents(
- $path . '/core/signature.json',
+ $coreDir = $path . '/core';
+ try {
+
+ $this->fileAccessHelper->assertDirectoryExists($coreDir);
+ $iterator = $this->getFolderIterator($path, $path);
+ $hashes = $this->generateHashes($iterator, $path);
+ $signatureData = $this->createSignatureData($hashes, $certificate, $rsa);
+ $this->fileAccessHelper->file_put_contents(
+ $coreDir . '/signature.json',
json_encode($signatureData, JSON_PRETTY_PRINT)
- );
+ );
+ } catch (\Exception $e){
+ if (!$this->fileAccessHelper->is_writable($coreDir)) {
+ throw new \Exception($coreDir . ' is not writable');
+ }
+ throw $e;
+ }
}
/**
diff --git a/lib/private/IntegrityCheck/Helpers/FileAccessHelper.php b/lib/private/IntegrityCheck/Helpers/FileAccessHelper.php
index 9e2b76ce11a..a7e378c165e 100644
--- a/lib/private/IntegrityCheck/Helpers/FileAccessHelper.php
+++ b/lib/private/IntegrityCheck/Helpers/FileAccessHelper.php
@@ -53,10 +53,33 @@ class FileAccessHelper {
* Wrapper around file_put_contents($filename, $data)
*
* @param string $filename
- * @param $data
- * @return int|false
+ * @param string $data
+ * @return int
+ * @throws \Exception
*/
public function file_put_contents($filename, $data) {
- return file_put_contents($filename, $data);
+ $bytesWritten = @file_put_contents($filename, $data);
+ if ($bytesWritten === false || $bytesWritten !== strlen($data)){
+ throw new \Exception('Failed to write into ' . $filename);
+ }
+ return $bytesWritten;
+ }
+
+ /**
+ * @param string $path
+ * @return bool
+ */
+ public function is_writable($path) {
+ return is_writable($path);
+ }
+
+ /**
+ * @param string $path
+ * @throws \Exception
+ */
+ public function assertDirectoryExists($path) {
+ if (!is_dir($path)) {
+ throw new \Exception('Directory ' . $path . ' does not exist.');
+ }
}
}
diff --git a/lib/private/Log.php b/lib/private/Log.php
index ef1b70d3cb9..fddd3593127 100644
--- a/lib/private/Log.php
+++ b/lib/private/Log.php
@@ -106,12 +106,8 @@ class Log implements ILogger {
// FIXME: Add this for backwards compatibility, should be fixed at some point probably
if($logger === null) {
- // TODO: Drop backwards compatibility for config in the future
$logType = $this->config->getValue('log_type', 'file');
- if($logType==='owncloud') {
- $logType = 'file';
- }
- $this->logger = 'OC\\Log\\'.ucfirst($logType);
+ $this->logger = static::getLogClass($logType);
call_user_func(array($this->logger, 'init'));
} else {
$this->logger = $logger;
@@ -327,4 +323,26 @@ class Log implements ILogger {
$msg .= ': ' . json_encode($exception);
$this->error($msg, $context);
}
+
+ /**
+ * @param string $logType
+ * @return string
+ * @internal
+ */
+ public static function getLogClass($logType) {
+ switch (strtolower($logType)) {
+ case 'errorlog':
+ return \OC\Log\Errorlog::class;
+ case 'syslog':
+ return \OC\Log\Syslog::class;
+ case 'file':
+ return \OC\Log\File::class;
+
+ // Backwards compatibility for old and fallback for unknown log types
+ case 'owncloud':
+ case 'nextcloud':
+ default:
+ return \OC\Log\File::class;
+ }
+ }
}
diff --git a/lib/private/Log/File.php b/lib/private/Log/File.php
index 904aa1d93f1..be8b72b3a3f 100644
--- a/lib/private/Log/File.php
+++ b/lib/private/Log/File.php
@@ -75,8 +75,8 @@ class File {
$config = \OC::$server->getSystemConfig();
// default to ISO8601
- $format = $config->getValue('logdateformat', 'c');
- $logTimeZone = $config->getValue( "logtimezone", 'UTC' );
+ $format = $config->getValue('logdateformat', \DateTime::ATOM);
+ $logTimeZone = $config->getValue('logtimezone', 'UTC');
try {
$timezone = new \DateTimeZone($logTimeZone);
} catch (\Exception $e) {
diff --git a/lib/private/Log/Rotate.php b/lib/private/Log/Rotate.php
index 6c87c167378..866068433ff 100644
--- a/lib/private/Log/Rotate.php
+++ b/lib/private/Log/Rotate.php
@@ -32,7 +32,9 @@ namespace OC\Log;
*/
class Rotate extends \OC\BackgroundJob\Job {
private $max_log_size;
- public function run($logFile) {
+ public function run($dummy) {
+ $systemConfig = \OC::$server->getSystemConfig();
+ $logFile = $systemConfig->getValue('logfile', $systemConfig->getValue('datadirectory', \OC::$SERVERROOT . '/data') . '/nextcloud.log');
$this->max_log_size = \OC::$server->getConfig()->getSystemValue('log_rotate_size', false);
if ($this->max_log_size) {
$filesize = @filesize($logFile);
diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php
index df8fa80f2c2..e704e8e3490 100644
--- a/lib/private/Mail/Mailer.php
+++ b/lib/private/Mail/Mailer.php
@@ -200,7 +200,7 @@ class Mailer implements IMailer {
* @return \Swift_SendmailTransport
*/
protected function getSendMailInstance() {
- switch ($this->config->getSystemValue('mail_smtpmode', 'sendmail')) {
+ switch ($this->config->getSystemValue('mail_smtpmode', 'php')) {
case 'qmail':
$binaryPath = '/var/qmail/bin/sendmail';
break;
diff --git a/lib/private/Memcache/APC.php b/lib/private/Memcache/APC.php
deleted file mode 100644
index 7db6d64b085..00000000000
--- a/lib/private/Memcache/APC.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Andreas Fischer <bantu@owncloud.com>
- * @author Clark Tomlinson <fallen013@gmail.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Otto Sabart <ottosabart@seberm.com>
- * @author Robin Appelman <robin@icewind.nl>
- *
- * @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/>
- *
- */
-
-namespace OC\Memcache;
-
-use OCP\IMemcache;
-
-class APC extends Cache implements IMemcache {
- use CASTrait {
- cas as casEmulated;
- }
-
- use CADTrait;
-
- public function get($key) {
- $result = apc_fetch($this->getPrefix() . $key, $success);
- if (!$success) {
- return null;
- }
- return $result;
- }
-
- public function set($key, $value, $ttl = 0) {
- return apc_store($this->getPrefix() . $key, $value, $ttl);
- }
-
- public function hasKey($key) {
- return apc_exists($this->getPrefix() . $key);
- }
-
- public function remove($key) {
- return apc_delete($this->getPrefix() . $key);
- }
-
- public function clear($prefix = '') {
- $ns = $this->getPrefix() . $prefix;
- $ns = preg_quote($ns, '/');
- $iter = new \APCIterator('user', '/^' . $ns . '/', APC_ITER_KEY);
- return apc_delete($iter);
- }
-
- /**
- * Set a value in the cache if it's not already stored
- *
- * @param string $key
- * @param mixed $value
- * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
- * @return bool
- */
- public function add($key, $value, $ttl = 0) {
- return apc_add($this->getPrefix() . $key, $value, $ttl);
- }
-
- /**
- * Increase a stored number
- *
- * @param string $key
- * @param int $step
- * @return int | bool
- */
- public function inc($key, $step = 1) {
- $this->add($key, 0);
- return apc_inc($this->getPrefix() . $key, $step);
- }
-
- /**
- * Decrease a stored number
- *
- * @param string $key
- * @param int $step
- * @return int | bool
- */
- public function dec($key, $step = 1) {
- return apc_dec($this->getPrefix() . $key, $step);
- }
-
- /**
- * Compare and set
- *
- * @param string $key
- * @param mixed $old
- * @param mixed $new
- * @return bool
- */
- public function cas($key, $old, $new) {
- // apc only does cas for ints
- if (is_int($old) and is_int($new)) {
- return apc_cas($this->getPrefix() . $key, $old, $new);
- } else {
- return $this->casEmulated($key, $old, $new);
- }
- }
-
- static public function isAvailable() {
- if (!extension_loaded('apc')) {
- return false;
- } elseif (!\OC::$server->getIniWrapper()->getBool('apc.enabled')) {
- return false;
- } elseif (!\OC::$server->getIniWrapper()->getBool('apc.enable_cli') && \OC::$CLI) {
- return false;
- } else {
- return true;
- }
- }
-}
-
-if (!function_exists('apc_exists')) {
- function apc_exists($keys) {
- $result = false;
- apc_fetch($keys, $result);
- return $result;
- }
-}
diff --git a/lib/private/Memcache/Factory.php b/lib/private/Memcache/Factory.php
index f3841d31679..8e62e020faa 100644
--- a/lib/private/Memcache/Factory.php
+++ b/lib/private/Memcache/Factory.php
@@ -83,7 +83,7 @@ class Factory implements ICacheFactory {
$missingCacheMessage = 'Memcache {class} not available for {use} cache';
$missingCacheHint = 'Is the matching PHP module installed and enabled?';
- if (!$localCacheClass::isAvailable()) {
+ if (!class_exists($localCacheClass) || !$localCacheClass::isAvailable()) {
if (\OC::$CLI && !defined('PHPUNIT_RUN')) {
// CLI should not hard-fail on broken memcache
$this->logger->info($missingCacheMessage, [
@@ -98,7 +98,7 @@ class Factory implements ICacheFactory {
]), $missingCacheHint);
}
}
- if (!$distributedCacheClass::isAvailable()) {
+ if (!class_exists($distributedCacheClass) || !$distributedCacheClass::isAvailable()) {
if (\OC::$CLI && !defined('PHPUNIT_RUN')) {
// CLI should not hard-fail on broken memcache
$this->logger->info($missingCacheMessage, [
@@ -113,7 +113,7 @@ class Factory implements ICacheFactory {
]), $missingCacheHint);
}
}
- if (!($lockingCacheClass && $lockingCacheClass::isAvailable())) {
+ if (!($lockingCacheClass && class_exists($distributedCacheClass) && $lockingCacheClass::isAvailable())) {
// don't fallback since the fallback might not be suitable for storing lock
$lockingCacheClass = self::NULL_CACHE;
}
diff --git a/lib/private/Memcache/Memcached.php b/lib/private/Memcache/Memcached.php
index 12f45739374..bf07fd0e6e7 100644
--- a/lib/private/Memcache/Memcached.php
+++ b/lib/private/Memcache/Memcached.php
@@ -46,16 +46,6 @@ class Memcached extends Cache implements IMemcache {
parent::__construct($prefix);
if (is_null(self::$cache)) {
self::$cache = new \Memcached();
- $servers = \OC::$server->getSystemConfig()->getValue('memcached_servers');
- if (!$servers) {
- $server = \OC::$server->getSystemConfig()->getValue('memcached_server');
- if ($server) {
- $servers = array($server);
- } else {
- $servers = array(array('localhost', 11211));
- }
- }
- self::$cache->addServers($servers);
$defaultOptions = [
\Memcached::OPT_CONNECT_TIMEOUT => 50,
@@ -71,7 +61,7 @@ class Memcached extends Cache implements IMemcache {
\Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
// Enable Binary Protocol
- \Memcached::OPT_BINARY_PROTOCOL => true,
+ //\Memcached::OPT_BINARY_PROTOCOL => true,
];
// by default enable igbinary serializer if available
if (\Memcached::HAVE_IGBINARY) {
@@ -85,6 +75,17 @@ class Memcached extends Cache implements IMemcache {
} else {
throw new HintException("Expected 'memcached_options' config to be an array, got $options");
}
+
+ $servers = \OC::$server->getSystemConfig()->getValue('memcached_servers');
+ if (!$servers) {
+ $server = \OC::$server->getSystemConfig()->getValue('memcached_server');
+ if ($server) {
+ $servers = [$server];
+ } else {
+ $servers = [['localhost', 11211]];
+ }
+ }
+ self::$cache->addServers($servers);
}
}
@@ -110,7 +111,9 @@ class Memcached extends Cache implements IMemcache {
} else {
$result = self::$cache->set($this->getNamespace() . $key, $value);
}
- $this->verifyReturnCode();
+ if ($result !== true) {
+ $this->verifyReturnCode();
+ }
return $result;
}
diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php
index 3e9ddfc6466..f7bc02943a3 100644
--- a/lib/private/NavigationManager.php
+++ b/lib/private/NavigationManager.php
@@ -1,6 +1,6 @@
<?php
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2016, ownCloud GmbH
*
* @author Bart Visscher <bartv@thisnet.nl>
* @author Joas Schilling <coding@schilljs.com>
@@ -26,13 +26,46 @@
namespace OC;
+use OC\App\AppManager;
+use OCP\App\IAppManager;
+use OCP\IGroupManager;
+use OCP\INavigationManager;
+use OCP\IURLGenerator;
+use OCP\IUserSession;
+use OCP\L10N\IFactory;
+
/**
* Manages the ownCloud navigation
*/
-class NavigationManager implements \OCP\INavigationManager {
- protected $entries = array();
- protected $closureEntries = array();
+
+class NavigationManager implements INavigationManager {
+ protected $entries = [];
+ protected $closureEntries = [];
protected $activeEntry;
+ /** @var bool */
+ protected $init = false;
+ /** @var IAppManager|AppManager */
+ protected $appManager;
+ /** @var IURLGenerator */
+ private $urlGenerator;
+ /** @var IFactory */
+ private $l10nFac;
+ /** @var IUserSession */
+ private $userSession;
+ /** @var IGroupManager */
+ private $groupManager;
+
+ public function __construct(IAppManager $appManager = null,
+ IURLGenerator $urlGenerator = null,
+ IFactory $l10nFac = null,
+ IUserSession $userSession = null,
+ IGroupManager$groupManager = null) {
+ $this->appManager = $appManager;
+ $this->urlGenerator = $urlGenerator;
+ $this->l10nFac = $l10nFac;
+ $this->userSession = $userSession;
+ $this->groupManager = $groupManager;
+ }
/**
* Creates a new navigation entry
@@ -60,6 +93,7 @@ class NavigationManager implements \OCP\INavigationManager {
* @return array an array of the added entries
*/
public function getAll() {
+ $this->init();
foreach ($this->closureEntries as $c) {
$this->add($c());
}
@@ -71,8 +105,9 @@ class NavigationManager implements \OCP\INavigationManager {
* removes all the entries
*/
public function clear() {
- $this->entries = array();
- $this->closureEntries = array();
+ $this->entries = [];
+ $this->closureEntries = [];
+ $this->init = false;
}
/**
@@ -93,4 +128,64 @@ class NavigationManager implements \OCP\INavigationManager {
public function getActiveEntry() {
return $this->activeEntry;
}
+
+ private function init() {
+ if ($this->init) {
+ return;
+ }
+ $this->init = true;
+ if (is_null($this->appManager)) {
+ return;
+ }
+ foreach ($this->appManager->getInstalledApps() as $app) {
+ // load plugins and collections from info.xml
+ $info = $this->appManager->getAppInfo($app);
+ if (!isset($info['navigation'])) {
+ continue;
+ }
+ $nav = $info['navigation'];
+ if (!isset($nav['name'])) {
+ continue;
+ }
+ if (!isset($nav['route'])) {
+ continue;
+ }
+ $role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all';
+ if ($role === 'admin' && !$this->isAdmin()) {
+ continue;
+ }
+ $l = $this->l10nFac->get($app);
+ $order = isset($nav['order']) ? $nav['order'] : 100;
+ $route = $this->urlGenerator->linkToRoute($nav['route']);
+ $icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg';
+ foreach ([$icon, "$app.svg"] as $i) {
+ try {
+ $icon = $this->urlGenerator->imagePath($app, $i);
+ break;
+ } catch (\RuntimeException $ex) {
+ // no icon? - ignore it then
+ }
+ }
+ if (is_null($icon)) {
+ $icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
+ }
+
+ $this->add([
+ 'id' => $app,
+ 'order' => $order,
+ 'href' => $route,
+ 'icon' => $icon,
+ 'name' => $l->t($nav['name']),
+ ]);
+ }
+ }
+
+ private function isAdmin() {
+ $user = $this->userSession->getUser();
+ if ($user !== null) {
+ return $this->groupManager->isAdmin($user->getUID());
+ }
+ return false;
+ }
+
}
diff --git a/lib/private/Preview.php b/lib/private/Preview.php
deleted file mode 100644
index caa1e89bacc..00000000000
--- a/lib/private/Preview.php
+++ /dev/null
@@ -1,1349 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Frank Karlitschek <frank@karlitschek.de>
- * @author Georg Ehrke <georg@owncloud.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Olivier Paroz <github@oparoz.com>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Tobias Kaminsky <tobias@kaminsky.me>
- *
- * @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/>
- *
- */
-namespace OC;
-
-use OC\Preview\Provider;
-use OCP\Files\FileInfo;
-use OCP\Files\NotFoundException;
-
-class Preview {
- //the thumbnail folder
- const THUMBNAILS_FOLDER = 'thumbnails';
-
- const MODE_FILL = 'fill';
- const MODE_COVER = 'cover';
-
- //config
- private $maxScaleFactor;
- /** @var int maximum width allowed for a preview */
- private $configMaxWidth;
- /** @var int maximum height allowed for a preview */
- private $configMaxHeight;
-
- //fileview object
- private $fileView = null;
- private $userView = null;
-
- //vars
- private $file;
- private $maxX;
- private $maxY;
- private $scalingUp;
- private $mimeType;
- private $keepAspect = false;
- private $mode = self::MODE_FILL;
-
- //used to calculate the size of the preview to generate
- /** @var int $maxPreviewWidth max width a preview can have */
- private $maxPreviewWidth;
- /** @var int $maxPreviewHeight max height a preview can have */
- private $maxPreviewHeight;
- /** @var int $previewWidth calculated width of the preview we're looking for */
- private $previewWidth;
- /** @var int $previewHeight calculated height of the preview we're looking for */
- private $previewHeight;
-
- //filemapper used for deleting previews
- // index is path, value is fileinfo
- static public $deleteFileMapper = array();
- static public $deleteChildrenMapper = array();
-
- /**
- * preview images object
- *
- * @var \OCP\IImage
- */
- private $preview;
-
- /**
- * @var \OCP\Files\FileInfo
- */
- protected $info;
-
- /**
- * check if thumbnail or bigger version of thumbnail of file is cached
- *
- * @param string $user userid - if no user is given, OC_User::getUser will be used
- * @param string $root path of root
- * @param string $file The path to the file where you want a thumbnail from
- * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the
- * shape of the image
- * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the
- * shape of the image
- * @param bool $scalingUp Disable/Enable upscaling of previews
- *
- * @throws \Exception
- * @return mixed (bool / string)
- * false if thumbnail does not exist
- * path to thumbnail if thumbnail exists
- */
- public function __construct(
- $user = '',
- $root = '/',
- $file = '', $maxX = 1,
- $maxY = 1,
- $scalingUp = true
- ) {
- //init fileviews
- if ($user === '') {
- $user = \OC_User::getUser();
- }
- $this->fileView = new \OC\Files\View('/' . $user . '/' . $root);
- $this->userView = new \OC\Files\View('/' . $user);
-
- //set config
- $sysConfig = \OC::$server->getConfig();
- $this->configMaxWidth = $sysConfig->getSystemValue('preview_max_x', 2048);
- $this->configMaxHeight = $sysConfig->getSystemValue('preview_max_y', 2048);
- $this->maxScaleFactor = $sysConfig->getSystemValue('preview_max_scale_factor', 1);
-
- //save parameters
- $this->setFile($file);
- $this->setMaxX((int)$maxX);
- $this->setMaxY((int)$maxY);
- $this->setScalingup($scalingUp);
-
- $this->preview = null;
-
- //check if there are preview backends
- if (!\OC::$server->getPreviewManager()
- ->hasProviders()
- && \OC::$server->getConfig()
- ->getSystemValue('enable_previews', true)
- ) {
- \OCP\Util::writeLog('core', 'No preview providers exist', \OCP\Util::ERROR);
- throw new \Exception('No preview providers');
- }
- }
-
- /**
- * returns the path of the file you want a thumbnail from
- *
- * @return string
- */
- public function getFile() {
- return $this->file;
- }
-
- /**
- * returns the max width of the preview
- *
- * @return integer
- */
- public function getMaxX() {
- return $this->maxX;
- }
-
- /**
- * returns the max height of the preview
- *
- * @return integer
- */
- public function getMaxY() {
- return $this->maxY;
- }
-
- /**
- * returns whether or not scalingup is enabled
- *
- * @return bool
- */
- public function getScalingUp() {
- return $this->scalingUp;
- }
-
- /**
- * returns the name of the thumbnailfolder
- *
- * @return string
- */
- public function getThumbnailsFolder() {
- return self::THUMBNAILS_FOLDER;
- }
-
- /**
- * returns the max scale factor
- *
- * @return string
- */
- public function getMaxScaleFactor() {
- return $this->maxScaleFactor;
- }
-
- /**
- * returns the max width set in ownCloud's config
- *
- * @return integer
- */
- public function getConfigMaxX() {
- return $this->configMaxWidth;
- }
-
- /**
- * returns the max height set in ownCloud's config
- *
- * @return integer
- */
- public function getConfigMaxY() {
- return $this->configMaxHeight;
- }
-
- /**
- * Returns the FileInfo object associated with the file to preview
- *
- * @return false|Files\FileInfo|\OCP\Files\FileInfo
- */
- protected function getFileInfo() {
- $absPath = $this->fileView->getAbsolutePath($this->file);
- $absPath = Files\Filesystem::normalizePath($absPath);
- if (array_key_exists($absPath, self::$deleteFileMapper)) {
- $this->info = self::$deleteFileMapper[$absPath];
- } else if (!$this->info) {
- $this->info = $this->fileView->getFileInfo($this->file);
- }
-
- return $this->info;
- }
-
-
- /**
- * @return array|null
- */
- private function getChildren() {
- $absPath = $this->fileView->getAbsolutePath($this->file);
- $absPath = Files\Filesystem::normalizePath($absPath);
-
- if (array_key_exists($absPath, self::$deleteChildrenMapper)) {
- return self::$deleteChildrenMapper[$absPath];
- }
-
- return null;
- }
-
- /**
- * Sets the path of the file you want a preview of
- *
- * @param string $file
- * @param \OCP\Files\FileInfo|null $info
- *
- * @return \OC\Preview
- */
- public function setFile($file, $info = null) {
- $this->file = $file;
- $this->info = $info;
-
- if ($file !== '') {
- $this->getFileInfo();
- if ($this->info instanceof \OCP\Files\FileInfo) {
- $this->mimeType = $this->info->getMimetype();
- }
- }
-
- return $this;
- }
-
- /**
- * Forces the use of a specific media type
- *
- * @param string $mimeType
- */
- public function setMimetype($mimeType) {
- $this->mimeType = $mimeType;
- }
-
- /**
- * Sets the max width of the preview. It's capped by the maximum allowed size set in the
- * configuration
- *
- * @param int $maxX
- *
- * @throws \Exception
- * @return \OC\Preview
- */
- public function setMaxX($maxX = 1) {
- if ($maxX <= 0) {
- throw new \Exception('Cannot set width of 0 or smaller!');
- }
- $configMaxX = $this->getConfigMaxX();
- $maxX = $this->limitMaxDim($maxX, $configMaxX, 'maxX');
- $this->maxX = $maxX;
-
- return $this;
- }
-
- /**
- * Sets the max height of the preview. It's capped by the maximum allowed size set in the
- * configuration
- *
- * @param int $maxY
- *
- * @throws \Exception
- * @return \OC\Preview
- */
- public function setMaxY($maxY = 1) {
- if ($maxY <= 0) {
- throw new \Exception('Cannot set height of 0 or smaller!');
- }
- $configMaxY = $this->getConfigMaxY();
- $maxY = $this->limitMaxDim($maxY, $configMaxY, 'maxY');
- $this->maxY = $maxY;
-
- return $this;
- }
-
- /**
- * Sets whether we're allowed to scale up when generating a preview. It's capped by the maximum
- * allowed scale factor set in the configuration
- *
- * @param bool $scalingUp
- *
- * @return \OC\Preview
- */
- public function setScalingup($scalingUp) {
- if ($this->getMaxScaleFactor() === 1) {
- $scalingUp = false;
- }
- $this->scalingUp = $scalingUp;
-
- return $this;
- }
-
- /**
- * Set whether to cover or fill the specified dimensions
- *
- * @param string $mode
- *
- * @return \OC\Preview
- */
- public function setMode($mode) {
- $this->mode = $mode;
-
- return $this;
- }
-
- /**
- * Sets whether we need to generate a preview which keeps the aspect ratio of the original file
- *
- * @param bool $keepAspect
- *
- * @return \OC\Preview
- */
- public function setKeepAspect($keepAspect) {
- $this->keepAspect = $keepAspect;
-
- return $this;
- }
-
- /**
- * Makes sure we were given a file to preview and that it exists in the filesystem
- *
- * @return bool
- */
- public function isFileValid() {
- $file = $this->getFile();
- if ($file === '') {
- \OCP\Util::writeLog('core', 'No filename passed', \OCP\Util::DEBUG);
-
- return false;
- }
-
- if (!$this->getFileInfo() instanceof FileInfo) {
- \OCP\Util::writeLog('core', 'File:"' . $file . '" not found', \OCP\Util::DEBUG);
-
- return false;
- }
-
- return true;
- }
-
- /**
- * Deletes the preview of a file with specific width and height
- *
- * This should never delete the max preview, use deleteAllPreviews() instead
- *
- * @return bool
- */
- public function deletePreview() {
- $fileInfo = $this->getFileInfo();
- if ($fileInfo !== null && $fileInfo !== false) {
- $fileId = $fileInfo->getId();
-
- $previewPath = $this->buildCachePath($fileId);
- if (!strpos($previewPath, 'max')) {
- return $this->userView->unlink($previewPath);
- }
- }
-
- return false;
- }
-
- /**
- * Deletes all previews of a file
- */
- public function deleteAllPreviews() {
- $thumbnailMount = $this->userView->getMount($this->getThumbnailsFolder());
- $propagator = $thumbnailMount->getStorage()->getPropagator();
- $propagator->beginBatch();
-
- $toDelete = $this->getChildren();
- $toDelete[] = $this->getFileInfo();
-
- foreach ($toDelete as $delete) {
- if ($delete instanceof FileInfo) {
- /** @var \OCP\Files\FileInfo $delete */
- $fileId = $delete->getId();
-
- // getId() might return null, e.g. when the file is a
- // .ocTransferId*.part file from chunked file upload.
- if (!empty($fileId)) {
- $previewPath = $this->getPreviewPath($fileId);
- $this->userView->rmdir($previewPath);
- }
- }
- }
-
- $propagator->commitBatch();
- }
-
- /**
- * Checks if a preview matching the asked dimensions or a bigger version is already cached
- *
- * * We first retrieve the size of the max preview since this is what we be used to create
- * all our preview. If it doesn't exist we return false, so that it can be generated
- * * Using the dimensions of the max preview, we calculate what the size of the new
- * thumbnail should be
- * * And finally, we look for a suitable candidate in the cache
- *
- * @param int $fileId fileId of the original file we need a preview of
- *
- * @return string|false path to the cached preview if it exists or false
- */
- public function isCached($fileId) {
- if (is_null($fileId)) {
- return false;
- }
-
- /**
- * Phase 1: Looking for the max preview
- */
- $previewPath = $this->getPreviewPath($fileId);
- // We currently can't look for a single file due to bugs related to #16478
- $allThumbnails = $this->userView->getDirectoryContent($previewPath);
- list($maxPreviewWidth, $maxPreviewHeight) = $this->getMaxPreviewSize($allThumbnails);
-
- // Only use the cache if we have a max preview
- if (!is_null($maxPreviewWidth) && !is_null($maxPreviewHeight)) {
-
- /**
- * Phase 2: Calculating the size of the preview we need to send back
- */
- $this->maxPreviewWidth = $maxPreviewWidth;
- $this->maxPreviewHeight = $maxPreviewHeight;
-
- list($previewWidth, $previewHeight) = $this->simulatePreviewDimensions();
- if (empty($previewWidth) || empty($previewHeight)) {
- return false;
- }
-
- $this->previewWidth = $previewWidth;
- $this->previewHeight = $previewHeight;
-
- /**
- * Phase 3: We look for a preview of the exact size
- */
- // This gives us a calculated path to a preview of asked dimensions
- // thumbnailFolder/fileId/<maxX>-<maxY>(-max|-with-aspect).png
- $preview = $this->buildCachePath($fileId, $previewWidth, $previewHeight);
-
- // This checks if we have a preview of those exact dimensions in the cache
- if ($this->thumbnailSizeExists($allThumbnails, basename($preview))) {
- return $preview;
- }
-
- /**
- * Phase 4: We look for a larger preview, matching the aspect ratio
- */
- if (($this->getMaxX() >= $maxPreviewWidth)
- && ($this->getMaxY() >= $maxPreviewHeight)
- ) {
- // The preview we-re looking for is the exact size or larger than the max preview,
- // so return that
- return $this->buildCachePath($fileId, $maxPreviewWidth, $maxPreviewHeight);
- } else {
- // The last resort is to look for something bigger than what we've calculated,
- // but still smaller than the max preview
- return $this->isCachedBigger($fileId, $allThumbnails);
- }
- }
-
- return false;
- }
-
- /**
- * Returns the dimensions of the max preview
- *
- * @param FileInfo[] $allThumbnails the list of all our cached thumbnails
- *
- * @return int[]
- */
- private function getMaxPreviewSize($allThumbnails) {
- $maxPreviewX = null;
- $maxPreviewY = null;
-
- foreach ($allThumbnails as $thumbnail) {
- $name = $thumbnail['name'];
- if (strpos($name, 'max')) {
- list($maxPreviewX, $maxPreviewY) = $this->getDimensionsFromFilename($name);
- break;
- }
- }
-
- return [$maxPreviewX, $maxPreviewY];
- }
-
- /**
- * Check if a specific thumbnail size is cached
- *
- * @param FileInfo[] $allThumbnails the list of all our cached thumbnails
- * @param string $name
- * @return bool
- */
- private function thumbnailSizeExists(array $allThumbnails, $name) {
-
- foreach ($allThumbnails as $thumbnail) {
- if ($name === $thumbnail->getName()) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Determines the size of the preview we should be looking for in the cache
- *
- * @return integer[]
- */
- private function simulatePreviewDimensions() {
- $askedWidth = $this->getMaxX();
- $askedHeight = $this->getMaxY();
-
- if ($this->keepAspect) {
- list($newPreviewWidth, $newPreviewHeight) =
- $this->applyAspectRatio($askedWidth, $askedHeight);
- } else {
- list($newPreviewWidth, $newPreviewHeight) = $this->fixSize($askedWidth, $askedHeight);
- }
-
- return [(int)$newPreviewWidth, (int)$newPreviewHeight];
- }
-
- /**
- * Resizes the boundaries to match the aspect ratio
- *
- * @param int $askedWidth
- * @param int $askedHeight
- *
- * @param int $originalWidth
- * @param int $originalHeight
- * @return integer[]
- */
- private function applyAspectRatio($askedWidth, $askedHeight, $originalWidth = 0, $originalHeight = 0) {
- if (!$originalWidth) {
- $originalWidth = $this->maxPreviewWidth;
- }
- if (!$originalHeight) {
- $originalHeight = $this->maxPreviewHeight;
- }
- $originalRatio = $originalWidth / $originalHeight;
- // Defines the box in which the preview has to fit
- $scaleFactor = $this->scalingUp ? $this->maxScaleFactor : 1;
- $askedWidth = min($askedWidth, $originalWidth * $scaleFactor);
- $askedHeight = min($askedHeight, $originalHeight * $scaleFactor);
-
- if ($askedWidth / $originalRatio < $askedHeight) {
- // width restricted
- $askedHeight = round($askedWidth / $originalRatio);
- } else {
- $askedWidth = round($askedHeight * $originalRatio);
- }
-
- return [(int)$askedWidth, (int)$askedHeight];
- }
-
- /**
- * Resizes the boundaries to cover the area
- *
- * @param int $askedWidth
- * @param int $askedHeight
- * @param int $previewWidth
- * @param int $previewHeight
- * @return integer[]
- */
- private function applyCover($askedWidth, $askedHeight, $previewWidth, $previewHeight) {
- $originalRatio = $previewWidth / $previewHeight;
- // Defines the box in which the preview has to fit
- $scaleFactor = $this->scalingUp ? $this->maxScaleFactor : 1;
- $askedWidth = min($askedWidth, $previewWidth * $scaleFactor);
- $askedHeight = min($askedHeight, $previewHeight * $scaleFactor);
-
- if ($askedWidth / $originalRatio > $askedHeight) {
- // height restricted
- $askedHeight = round($askedWidth / $originalRatio);
- } else {
- $askedWidth = round($askedHeight * $originalRatio);
- }
-
- return [(int)$askedWidth, (int)$askedHeight];
- }
-
- /**
- * Makes sure an upscaled preview doesn't end up larger than the max dimensions defined in the
- * config
- *
- * @param int $askedWidth
- * @param int $askedHeight
- *
- * @return integer[]
- */
- private function fixSize($askedWidth, $askedHeight) {
- if ($this->scalingUp) {
- $askedWidth = min($this->configMaxWidth, $askedWidth);
- $askedHeight = min($this->configMaxHeight, $askedHeight);
- }
-
- return [(int)$askedWidth, (int)$askedHeight];
- }
-
- /**
- * Checks if a bigger version of a file preview is cached and if not
- * return the preview of max allowed dimensions
- *
- * @param int $fileId fileId of the original image
- * @param FileInfo[] $allThumbnails the list of all our cached thumbnails
- *
- * @return string path to bigger thumbnail
- */
- private function isCachedBigger($fileId, $allThumbnails) {
- // This is used to eliminate any thumbnail narrower than what we need
- $maxX = $this->getMaxX();
-
- //array for usable cached thumbnails
- $possibleThumbnails = $this->getPossibleThumbnails($allThumbnails);
-
- foreach ($possibleThumbnails as $width => $path) {
- if ($width < $maxX) {
- continue;
- } else {
- return $path;
- }
- }
-
- // At this stage, we didn't find a preview, so we return the max preview
- return $this->buildCachePath($fileId, $this->maxPreviewWidth, $this->maxPreviewHeight);
- }
-
- /**
- * Get possible bigger thumbnails of the given image with the proper aspect ratio
- *
- * @param FileInfo[] $allThumbnails the list of all our cached thumbnails
- *
- * @return string[] an array of paths to bigger thumbnails
- */
- private function getPossibleThumbnails($allThumbnails) {
- if ($this->keepAspect) {
- $wantedAspectRatio = (float)($this->maxPreviewWidth / $this->maxPreviewHeight);
- } else {
- $wantedAspectRatio = (float)($this->getMaxX() / $this->getMaxY());
- }
-
- //array for usable cached thumbnails
- $possibleThumbnails = array();
- foreach ($allThumbnails as $thumbnail) {
- $name = rtrim($thumbnail['name'], '.png');
- list($x, $y, $aspectRatio) = $this->getDimensionsFromFilename($name);
- if (abs($aspectRatio - $wantedAspectRatio) >= 0.000001
- || $this->unscalable($x, $y)
- ) {
- continue;
- }
- $possibleThumbnails[$x] = $thumbnail['path'];
- }
-
- ksort($possibleThumbnails);
-
- return $possibleThumbnails;
- }
-
- /**
- * Looks at the preview filename from the cache and extracts the size of the preview
- *
- * @param string $name
- *
- * @return array<int,int,float>
- */
- private function getDimensionsFromFilename($name) {
- $size = explode('-', $name);
- $x = (int)$size[0];
- $y = (int)$size[1];
- $aspectRatio = (float)($x / $y);
-
- return array($x, $y, $aspectRatio);
- }
-
- /**
- * @param int $x
- * @param int $y
- *
- * @return bool
- */
- private function unscalable($x, $y) {
-
- $maxX = $this->getMaxX();
- $maxY = $this->getMaxY();
- $scalingUp = $this->getScalingUp();
- $maxScaleFactor = $this->getMaxScaleFactor();
-
- if ($x < $maxX || $y < $maxY) {
- if ($scalingUp) {
- $scaleFactor = $maxX / $x;
- if ($scaleFactor > $maxScaleFactor) {
- return true;
- }
- } else {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Returns a preview of a file
- *
- * The cache is searched first and if nothing usable was found then a preview is
- * generated by one of the providers
- *
- * @return \OCP\IImage
- */
- public function getPreview() {
- if (!is_null($this->preview) && $this->preview->valid()) {
- return $this->preview;
- }
-
- $this->preview = null;
- $fileInfo = $this->getFileInfo();
- if ($fileInfo === null || $fileInfo === false || !$fileInfo->isReadable()) {
- return new \OC_Image();
- }
-
- $fileId = $fileInfo->getId();
- $cached = $this->isCached($fileId);
- if ($cached) {
- $this->getCachedPreview($fileId, $cached);
- }
-
- if (is_null($this->preview)) {
- $this->generatePreview($fileId);
- }
-
- // We still don't have a preview, so we send back an empty object
- if (is_null($this->preview)) {
- $this->preview = new \OC_Image();
- }
-
- return $this->preview;
- }
-
- /**
- * Sends the preview, including the headers to client which requested it
- *
- * @param null|string $mimeTypeForHeaders the media type to use when sending back the reply
- *
- * @throws NotFoundException
- * @throws PreviewNotAvailableException
- */
- public function showPreview($mimeTypeForHeaders = null) {
- // Check if file is valid
- if ($this->isFileValid() === false) {
- throw new NotFoundException('File not found.');
- }
-
- if (is_null($this->preview)) {
- $this->getPreview();
- }
- if ($this->preview instanceof \OCP\IImage) {
- if ($this->preview->valid()) {
- \OCP\Response::enableCaching(3600 * 24); // 24 hours
- } else {
- $this->getMimeIcon();
- }
- $this->preview->show($mimeTypeForHeaders);
- }
- }
-
- /**
- * Retrieves the preview from the cache and resizes it if necessary
- *
- * @param int $fileId fileId of the original image
- * @param string $cached the path to the cached preview
- */
- private function getCachedPreview($fileId, $cached) {
- $stream = $this->userView->fopen($cached, 'r');
- $this->preview = null;
- if ($stream) {
- $image = new \OC_Image();
- $image->loadFromFileHandle($stream);
-
- $this->preview = $image->valid() ? $image : null;
-
- if (!is_null($this->preview)) {
- // Size of the preview we calculated
- $maxX = $this->previewWidth;
- $maxY = $this->previewHeight;
- // Size of the preview we retrieved from the cache
- $previewX = (int)$this->preview->width();
- $previewY = (int)$this->preview->height();
-
- // We don't have an exact match
- if ($previewX !== $maxX || $previewY !== $maxY) {
- $this->resizeAndStore($fileId);
- }
- }
-
- fclose($stream);
- }
- }
-
- /**
- * Resizes, crops, fixes orientation and stores in the cache
- *
- * @param int $fileId fileId of the original image
- */
- private function resizeAndStore($fileId) {
- $image = $this->preview;
- if (!($image instanceof \OCP\IImage)) {
- \OCP\Util::writeLog(
- 'core', '$this->preview is not an instance of \OCP\IImage', \OCP\Util::DEBUG
- );
-
- return;
- }
- $previewWidth = (int)$image->width();
- $previewHeight = (int)$image->height();
- $askedWidth = $this->getMaxX();
- $askedHeight = $this->getMaxY();
-
- if ($this->mode === self::MODE_COVER) {
- list($askedWidth, $askedHeight) =
- $this->applyCover($askedWidth, $askedHeight, $previewWidth, $previewHeight);
- }
-
- /**
- * Phase 1: If required, adjust boundaries to keep aspect ratio
- */
- if ($this->keepAspect) {
- list($askedWidth, $askedHeight) =
- $this->applyAspectRatio($askedWidth, $askedHeight, $previewWidth, $previewHeight);
- }
-
- /**
- * Phase 2: Resizes preview to try and match requirements.
- * Takes the scaling ratio into consideration
- */
- list($newPreviewWidth, $newPreviewHeight) = $this->scale(
- $image, $askedWidth, $askedHeight, $previewWidth, $previewHeight
- );
-
- // The preview has been resized and should now have the asked dimensions
- if ($newPreviewWidth === $askedWidth && $newPreviewHeight === $askedHeight) {
- $this->storePreview($fileId, $newPreviewWidth, $newPreviewHeight);
-
- return;
- }
-
- /**
- * Phase 3: We're still not there yet, so we're clipping and filling
- * to match the asked dimensions
- */
- // It turns out the scaled preview is now too big, so we crop the image
- if ($newPreviewWidth >= $askedWidth && $newPreviewHeight >= $askedHeight) {
- $this->crop($image, $askedWidth, $askedHeight, $newPreviewWidth, $newPreviewHeight);
- $this->storePreview($fileId, $askedWidth, $askedHeight);
-
- return;
- }
-
- // At least one dimension of the scaled preview is too small,
- // so we fill the space with a transparent background
- if (($newPreviewWidth < $askedWidth || $newPreviewHeight < $askedHeight)) {
- $this->cropAndFill(
- $image, $askedWidth, $askedHeight, $newPreviewWidth, $newPreviewHeight
- );
- $this->storePreview($fileId, $askedWidth, $askedHeight);
-
- return;
- }
-
- // The preview is smaller, but we can't touch it
- $this->storePreview($fileId, $newPreviewWidth, $newPreviewHeight);
- }
-
- /**
- * Calculates the new dimensions of the preview
- *
- * The new dimensions can be larger or smaller than the ones of the preview we have to resize
- *
- * @param \OCP\IImage $image
- * @param int $askedWidth
- * @param int $askedHeight
- * @param int $previewWidth
- * @param int $previewHeight
- *
- * @return int[]
- */
- private function scale($image, $askedWidth, $askedHeight, $previewWidth, $previewHeight) {
- $scalingUp = $this->getScalingUp();
- $maxScaleFactor = $this->getMaxScaleFactor();
-
- $factorX = $askedWidth / $previewWidth;
- $factorY = $askedHeight / $previewHeight;
-
- if ($factorX >= $factorY) {
- $factor = $factorX;
- } else {
- $factor = $factorY;
- }
-
- if ($scalingUp === false) {
- if ($factor > 1) {
- $factor = 1;
- }
- }
-
- // We cap when upscaling
- if (!is_null($maxScaleFactor)) {
- if ($factor > $maxScaleFactor) {
- \OCP\Util::writeLog(
- 'core', 'scale factor reduced from ' . $factor . ' to ' . $maxScaleFactor,
- \OCP\Util::DEBUG
- );
- $factor = $maxScaleFactor;
- }
- }
-
- $newPreviewWidth = round($previewWidth * $factor);
- $newPreviewHeight = round($previewHeight * $factor);
-
- $image->preciseResize($newPreviewWidth, $newPreviewHeight);
- $this->preview = $image;
-
- return [$newPreviewWidth, $newPreviewHeight];
- }
-
- /**
- * Crops a preview which is larger than the dimensions we've received
- *
- * @param \OCP\IImage $image
- * @param int $askedWidth
- * @param int $askedHeight
- * @param int $previewWidth
- * @param int $previewHeight
- */
- private function crop($image, $askedWidth, $askedHeight, $previewWidth, $previewHeight = null) {
- $cropX = floor(abs($askedWidth - $previewWidth) * 0.5);
- //don't crop previews on the Y axis, this sucks if it's a document.
- //$cropY = floor(abs($y - $newPreviewHeight) * 0.5);
- $cropY = 0;
- $image->crop($cropX, $cropY, $askedWidth, $askedHeight);
- $this->preview = $image;
- }
-
- /**
- * Crops an image if it's larger than the dimensions we've received and fills the empty space
- * with a transparent background
- *
- * @param \OCP\IImage $image
- * @param int $askedWidth
- * @param int $askedHeight
- * @param int $previewWidth
- * @param int $previewHeight
- */
- private function cropAndFill($image, $askedWidth, $askedHeight, $previewWidth, $previewHeight) {
- if ($previewWidth > $askedWidth) {
- $cropX = floor(($previewWidth - $askedWidth) * 0.5);
- $image->crop($cropX, 0, $askedWidth, $previewHeight);
- $previewWidth = $askedWidth;
- }
-
- if ($previewHeight > $askedHeight) {
- $cropY = floor(($previewHeight - $askedHeight) * 0.5);
- $image->crop(0, $cropY, $previewWidth, $askedHeight);
- $previewHeight = $askedHeight;
- }
-
- // Creates a transparent background
- $backgroundLayer = imagecreatetruecolor($askedWidth, $askedHeight);
- imagealphablending($backgroundLayer, false);
- $transparency = imagecolorallocatealpha($backgroundLayer, 0, 0, 0, 127);
- imagefill($backgroundLayer, 0, 0, $transparency);
- imagesavealpha($backgroundLayer, true);
-
- $image = $image->resource();
-
- $mergeX = floor(abs($askedWidth - $previewWidth) * 0.5);
- $mergeY = floor(abs($askedHeight - $previewHeight) * 0.5);
-
- // Pastes the preview on top of the background
- imagecopy(
- $backgroundLayer, $image, $mergeX, $mergeY, 0, 0, $previewWidth,
- $previewHeight
- );
-
- $image = new \OC_Image($backgroundLayer);
-
- $this->preview = $image;
- }
-
- /**
- * Saves a preview in the cache to speed up future calls
- *
- * Do not nullify the preview as it might send the whole process in a loop
- *
- * @param int $fileId fileId of the original image
- * @param int $previewWidth
- * @param int $previewHeight
- */
- private function storePreview($fileId, $previewWidth, $previewHeight) {
- if (empty($previewWidth) || empty($previewHeight)) {
- \OCP\Util::writeLog(
- 'core', 'Cannot save preview of dimension ' . $previewWidth . 'x' . $previewHeight,
- \OCP\Util::DEBUG
- );
-
- } else {
- $cachePath = $this->buildCachePath($fileId, $previewWidth, $previewHeight);
- $this->userView->file_put_contents($cachePath, $this->preview->data());
- }
- }
-
- /**
- * Returns the path to a preview based on its dimensions and aspect
- *
- * @param int $fileId
- * @param int|null $maxX
- * @param int|null $maxY
- *
- * @return string
- */
- private function buildCachePath($fileId, $maxX = null, $maxY = null) {
- if (is_null($maxX)) {
- $maxX = $this->getMaxX();
- }
- if (is_null($maxY)) {
- $maxY = $this->getMaxY();
- }
-
- $previewPath = $this->getPreviewPath($fileId);
- $previewPath = $previewPath . strval($maxX) . '-' . strval($maxY);
- $isMaxPreview =
- ($maxX === $this->maxPreviewWidth && $maxY === $this->maxPreviewHeight) ? true : false;
- if ($isMaxPreview) {
- $previewPath .= '-max';
- }
- if ($this->keepAspect && !$isMaxPreview) {
- $previewPath .= '-with-aspect';
- }
- if ($this->mode === self::MODE_COVER) {
- $previewPath .= '-cover';
- }
- $previewPath .= '.png';
-
- return $previewPath;
- }
-
- /**
- * Returns the path to the folder where the previews are stored, identified by the fileId
- *
- * @param int $fileId
- *
- * @return string
- */
- private function getPreviewPath($fileId) {
- return $this->getThumbnailsFolder() . '/' . $fileId . '/';
- }
-
- /**
- * Asks the provider to send a preview of the file which respects the maximum dimensions
- * defined in the configuration and after saving it in the cache, it is then resized to the
- * asked dimensions
- *
- * This is only called once in order to generate a large PNG of dimensions defined in the
- * configuration file. We'll be able to quickly resize it later on.
- * We never upscale the original conversion as this will be done later by the resizing
- * operation
- *
- * @param int $fileId fileId of the original image
- */
- private function generatePreview($fileId) {
- $file = $this->getFile();
- $preview = null;
-
- $previewProviders = \OC::$server->getPreviewManager()
- ->getProviders();
- foreach ($previewProviders as $supportedMimeType => $providers) {
- if (!preg_match($supportedMimeType, $this->mimeType)) {
- continue;
- }
-
- foreach ($providers as $closure) {
- $provider = $closure();
- if (!($provider instanceof \OCP\Preview\IProvider)) {
- continue;
- }
-
- \OCP\Util::writeLog(
- 'core', 'Generating preview for "' . $file . '" with "' . get_class($provider)
- . '"', \OCP\Util::DEBUG
- );
-
- /** @var $provider Provider */
- $preview = $provider->getThumbnail(
- $file, $this->configMaxWidth, $this->configMaxHeight, $scalingUp = false,
- $this->fileView
- );
-
- if (!($preview instanceof \OCP\IImage)) {
- continue;
- }
-
- $this->preview = $preview;
- $previewPath = $this->getPreviewPath($fileId);
-
- if ($this->userView->is_dir($this->getThumbnailsFolder() . '/') === false) {
- $this->userView->mkdir($this->getThumbnailsFolder() . '/');
- }
-
- if ($this->userView->is_dir($previewPath) === false) {
- $this->userView->mkdir($previewPath);
- }
-
- // This stores our large preview so that it can be used in subsequent resizing requests
- $this->storeMaxPreview($previewPath);
-
- break 2;
- }
- }
-
- // The providers have been kind enough to give us a preview
- if ($preview) {
- $this->resizeAndStore($fileId);
- }
- }
-
- /**
- * Defines the media icon, for the media type of the original file, as the preview
- * @throws PreviewNotAvailableException
- */
- private function getMimeIcon() {
- $image = new \OC_Image();
- $mimeIconWebPath = \OC::$server->getMimeTypeDetector()->mimeTypeIcon($this->mimeType);
- if (empty(\OC::$WEBROOT)) {
- $mimeIconServerPath = \OC::$SERVERROOT . $mimeIconWebPath;
- } else {
- $mimeIconServerPath = str_replace(\OC::$WEBROOT, \OC::$SERVERROOT, $mimeIconWebPath);
- }
- // we can't load SVGs into an image
- if (substr($mimeIconWebPath, -4) === '.svg') {
- throw new PreviewNotAvailableException('SVG mimetype cannot be rendered');
- }
- $image->loadFromFile($mimeIconServerPath);
-
- $this->preview = $image;
- }
-
- /**
- * Stores the max preview in the cache
- *
- * @param string $previewPath path to the preview
- */
- private function storeMaxPreview($previewPath) {
- $maxPreviewExists = false;
- $preview = $this->preview;
-
- $allThumbnails = $this->userView->getDirectoryContent($previewPath);
- // This is so that the cache doesn't need emptying when upgrading
- // Can be replaced by an upgrade script...
- foreach ($allThumbnails as $thumbnail) {
- $name = rtrim($thumbnail['name'], '.png');
- if (strpos($name, 'max')) {
- $maxPreviewExists = true;
- break;
- }
- }
- // We haven't found the max preview, so we create it
- if (!$maxPreviewExists) {
- $previewWidth = $preview->width();
- $previewHeight = $preview->height();
- $previewPath = $previewPath . strval($previewWidth) . '-' . strval($previewHeight);
- $previewPath .= '-max.png';
- $this->userView->file_put_contents($previewPath, $preview->data());
- $this->maxPreviewWidth = $previewWidth;
- $this->maxPreviewHeight = $previewHeight;
- }
- }
-
- /**
- * Limits a dimension to the maximum dimension provided as argument
- *
- * @param int $dim
- * @param int $maxDim
- * @param string $dimName
- *
- * @return integer
- */
- private function limitMaxDim($dim, $maxDim, $dimName) {
- if (!is_null($maxDim)) {
- if ($dim > $maxDim) {
- \OCP\Util::writeLog(
- 'core', $dimName . ' reduced from ' . $dim . ' to ' . $maxDim, \OCP\Util::DEBUG
- );
- $dim = $maxDim;
- }
- }
-
- return $dim;
- }
-
- /**
- * @param array $args
- */
- public static function post_write($args) {
- self::post_delete($args, 'files/');
- }
-
- /**
- * @param array $args
- */
- public static function prepare_delete_files($args) {
- self::prepare_delete($args, 'files/');
- }
-
- /**
- * @param array $args
- * @param string $prefix
- */
- public static function prepare_delete(array $args, $prefix = '') {
- $path = $args['path'];
- if (substr($path, 0, 1) === '/') {
- $path = substr($path, 1);
- }
-
- $view = new \OC\Files\View('/' . \OC_User::getUser() . '/' . $prefix);
-
- $absPath = Files\Filesystem::normalizePath($view->getAbsolutePath($path));
- $fileInfo = $view->getFileInfo($path);
- if ($fileInfo === false) {
- return;
- }
- self::addPathToDeleteFileMapper($absPath, $fileInfo);
- if ($view->is_dir($path)) {
- $children = self::getAllChildren($view, $path);
- self::$deleteChildrenMapper[$absPath] = $children;
- }
- }
-
- /**
- * @param string $absolutePath
- * @param \OCP\Files\FileInfo $info
- */
- private static function addPathToDeleteFileMapper($absolutePath, $info) {
- self::$deleteFileMapper[$absolutePath] = $info;
- }
-
- /**
- * @param \OC\Files\View $view
- * @param string $path
- *
- * @return array
- */
- private static function getAllChildren($view, $path) {
- $children = $view->getDirectoryContent($path);
- $childrensFiles = array();
-
- $fakeRootLength = strlen($view->getRoot());
-
- for ($i = 0; $i < count($children); $i++) {
- $child = $children[$i];
-
- $childsPath = substr($child->getPath(), $fakeRootLength);
-
- if ($view->is_dir($childsPath)) {
- $children = array_merge(
- $children,
- $view->getDirectoryContent($childsPath)
- );
- } else {
- $childrensFiles[] = $child;
- }
- }
-
- return $childrensFiles;
- }
-
- /**
- * @param array $args
- */
- public static function post_delete_files($args) {
- self::post_delete($args, 'files/');
- }
-
- /**
- * @param array $args
- */
- public static function post_delete_versions($args) {
- self::post_delete($args, 'files/');
- }
-
- /**
- * @param array $args
- * @param string $prefix
- */
- public static function post_delete($args, $prefix = '') {
- $path = Files\Filesystem::normalizePath($args['path']);
-
- $preview = new Preview(\OC_User::getUser(), $prefix, $path);
- $preview->deleteAllPreviews();
- }
-
-}
diff --git a/lib/private/PreviewManager.php b/lib/private/PreviewManager.php
index 36b3730a720..8c5a7ad29f1 100644
--- a/lib/private/PreviewManager.php
+++ b/lib/private/PreviewManager.php
@@ -68,6 +68,9 @@ class PreviewManager implements IPreview {
/** @var array */
protected $defaultProviders;
+ /** @var string */
+ protected $userId;
+
/**
* PreviewManager constructor.
*
@@ -75,15 +78,18 @@ class PreviewManager implements IPreview {
* @param IRootFolder $rootFolder
* @param IAppData $appData
* @param EventDispatcherInterface $eventDispatcher
+ * @param string $userId
*/
public function __construct(IConfig $config,
IRootFolder $rootFolder,
IAppData $appData,
- EventDispatcherInterface $eventDispatcher) {
+ EventDispatcherInterface $eventDispatcher,
+ $userId) {
$this->config = $config;
$this->rootFolder = $rootFolder;
$this->appData = $appData;
$this->eventDispatcher = $eventDispatcher;
+ $this->userId = $userId;
}
/**
@@ -144,10 +150,22 @@ class PreviewManager implements IPreview {
* @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
* @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly
* @return \OCP\IImage
+ * @deprecated 11 Use getPreview
*/
public function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false) {
- $preview = new \OC\Preview('', '/', $file, $maxX, $maxY, $scaleUp);
- return $preview->getPreview();
+ try {
+ $userRoot = $this->rootFolder->getUserFolder($this->userId)->getParent();
+ $node = $userRoot->get($file);
+ if (!($file instanceof File)) {
+ throw new NotFoundException();
+ }
+
+ $preview = $this->getPreview($node, $maxX, $maxY);
+ } catch (\Exception $e) {
+ return new \OC_Image();
+ }
+
+ return new \OC_Image($preview->getContent());
}
/**
diff --git a/lib/private/Repair.php b/lib/private/Repair.php
index c212ea90744..e8d466cd844 100644
--- a/lib/private/Repair.php
+++ b/lib/private/Repair.php
@@ -31,12 +31,12 @@
namespace OC;
use OC\Repair\AssetCache;
-use OC\Repair\AvatarPermissions;
use OC\Repair\CleanTags;
use OC\Repair\Collation;
use OC\Repair\DropOldJobs;
use OC\Repair\MoveUpdaterStepFile;
use OC\Repair\NC11\CleanPreviews;
+use OC\Repair\NC11\FixMountStorages;
use OC\Repair\NC11\MoveAvatars;
use OC\Repair\OldGroupMembershipShares;
use OC\Repair\RemoveGetETagEntries;
@@ -47,7 +47,6 @@ use OC\Repair\SqliteAutoincrement;
use OC\Repair\DropOldTables;
use OC\Repair\FillETags;
use OC\Repair\InnoDB;
-use OC\Repair\RepairLegacyStorages;
use OC\Repair\RepairMimeTypes;
use OC\Repair\SearchLuceneTables;
use OC\Repair\UpdateOutdatedOcsIds;
@@ -132,7 +131,6 @@ class Repair implements IOutput{
return [
new Collation(\OC::$server->getConfig(), \OC::$server->getLogger(), \OC::$server->getDatabaseConnection(), false),
new RepairMimeTypes(\OC::$server->getConfig()),
- new RepairLegacyStorages(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()),
new AssetCache(),
new FillETags(\OC::$server->getDatabaseConnection()),
new CleanTags(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager()),
@@ -143,7 +141,6 @@ class Repair implements IOutput{
new RepairInvalidShares(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()),
new SharePropagation(\OC::$server->getConfig()),
new RemoveOldShares(\OC::$server->getDatabaseConnection()),
- new AvatarPermissions(\OC::$server->getDatabaseConnection()),
new RemoveRootShares(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), \OC::$server->getLazyRootFolder()),
new RepairUnmergedShares(
\OC::$server->getConfig(),
@@ -161,6 +158,7 @@ class Repair implements IOutput{
\OC::$server->getUserManager(),
\OC::$server->getConfig()
),
+ new FixMountStorages(\OC::$server->getDatabaseConnection()),
];
}
diff --git a/lib/private/Repair/AvatarPermissions.php b/lib/private/Repair/AvatarPermissions.php
deleted file mode 100644
index 9d75062358c..00000000000
--- a/lib/private/Repair/AvatarPermissions.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @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/>
- *
- */
-namespace OC\Repair;
-
-use Doctrine\DBAL\Platforms\OraclePlatform;
-use OCP\IDBConnection;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-/**
- * Class AvatarPermissions
- *
- * @package OC\Repair
- */
-class AvatarPermissions implements IRepairStep {
- /** @var IDBConnection */
- private $connection;
-
- /**
- * AvatarPermissions constructor.
- *
- * @param IDBConnection $connection
- */
- public function __construct(IDBConnection $connection) {
- $this->connection = $connection;
- }
-
- /**
- * @return string
- */
- public function getName() {
- return 'Fix permissions so avatars can be stored again';
- }
-
- /**
- * @param IOutput $output
- */
- public function run(IOutput $output) {
- $output->startProgress(2);
- $this->fixUserRootPermissions();
- $output->advance();
- $this->fixAvatarPermissions();
- $output->finishProgress();
- }
-
- /**
- * Make sure all user roots have permissions 23 (all but share)
- */
- protected function fixUserRootPermissions() {
- $qb = $this->connection->getQueryBuilder();
- $qb2 = $this->connection->getQueryBuilder();
-
- $qb->select('numeric_id')
- ->from('storages')
- ->where($qb->expr()->like('id', $qb2->createParameter('like')));
-
- if ($this->connection->getDatabasePlatform() instanceof OraclePlatform) {
- // '' is null on oracle
- $path = $qb2->expr()->isNull('path');
- } else {
- $path = $qb2->expr()->eq('path', $qb2->createNamedParameter(''));
- }
-
- $qb2->update('filecache')
- ->set('permissions', $qb2->createNamedParameter(23))
- ->where($path)
- ->andWhere($qb2->expr()->in('storage', $qb2->createFunction($qb->getSQL())))
- ->andWhere($qb2->expr()->neq('permissions', $qb2->createNamedParameter(23)))
- ->setParameter('like', 'home::%');
-
-
- $qb2->execute();
- }
-
- /**
- * Make sure all avatar files in the user roots have permission 27
- */
- protected function fixAvatarPermissions() {
- $qb = $this->connection->getQueryBuilder();
- $qb2 = $this->connection->getQueryBuilder();
-
- $qb->select('numeric_id')
- ->from('storages')
- ->where($qb->expr()->like('id', $qb2->createParameter('like')));
-
- $qb2->update('filecache')
- ->set('permissions', $qb2->createNamedParameter(27))
- ->where($qb2->expr()->like('path', $qb2->createNamedParameter('avatar.%')))
- ->andWhere($qb2->expr()->in('storage', $qb2->createFunction($qb->getSQL())))
- ->andWhere($qb2->expr()->neq('permissions', $qb2->createNamedParameter(27)))
- ->setParameter('like', 'home::%');
-
- $qb2->execute();
- }
-
-}
-
diff --git a/lib/private/Repair/Collation.php b/lib/private/Repair/Collation.php
index 54de1a719bd..a3535fb33a2 100644
--- a/lib/private/Repair/Collation.php
+++ b/lib/private/Repair/Collation.php
@@ -75,6 +75,18 @@ class Collation implements IRepairStep {
$tables = $this->getAllNonUTF8BinTables($this->connection);
foreach ($tables as $table) {
+ $output->info("Change row format for $table ...");
+ $query = $this->connection->prepare('ALTER TABLE `' . $table . '` ROW_FORMAT = DYNAMIC;');
+ try {
+ $query->execute();
+ } catch (DriverException $e) {
+ // Just log this
+ $this->logger->logException($e);
+ if (!$this->ignoreFailures) {
+ throw $e;
+ }
+ }
+
$output->info("Change collation for $table ...");
$query = $this->connection->prepare('ALTER TABLE `' . $table . '` CONVERT TO CHARACTER SET ' . $characterSet . ' COLLATE ' . $characterSet . '_bin;');
try {
diff --git a/lib/private/Repair/MoveUpdaterStepFile.php b/lib/private/Repair/MoveUpdaterStepFile.php
index fabaff40d24..feb8a291282 100644
--- a/lib/private/Repair/MoveUpdaterStepFile.php
+++ b/lib/private/Repair/MoveUpdaterStepFile.php
@@ -44,7 +44,7 @@ class MoveUpdaterStepFile implements IRepairStep {
public function run(IOutput $output) {
- $dataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT);
+ $dataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data');
$instanceId = $this->config->getSystemValue('instanceid', null);
if(!is_string($instanceId) || empty($instanceId)) {
diff --git a/lib/private/Repair/NC11/FixMountStorages.php b/lib/private/Repair/NC11/FixMountStorages.php
new file mode 100644
index 00000000000..d57a356dff9
--- /dev/null
+++ b/lib/private/Repair/NC11/FixMountStorages.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @copyright 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @author 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\Repair\NC11;
+
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IDBConnection;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class FixMountStorages implements IRepairStep {
+
+ /** @var IDBConnection */
+ private $db;
+
+ /**
+ * @param IDBConnection $db
+ */
+ public function __construct(IDBConnection $db) {
+ $this->db = $db;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName() {
+ return 'Fix potential broken mount points';
+ }
+
+ public function run(IOutput $output) {
+ $query = $this->db->getQueryBuilder();
+ $query->select('m.id', 'f.storage')
+ ->from('mounts', 'm')
+ ->leftJoin('m', 'filecache', 'f', $query->expr()->eq('m.root_id', 'f.fileid'))
+ ->where($query->expr()->neq('m.storage_id', 'f.storage'));
+
+ $update = $this->db->getQueryBuilder();
+ $update->update('mounts')
+ ->set('storage_id', $update->createParameter('storage'))
+ ->where($query->expr()->eq('id', $update->createParameter('mount')));
+
+ $result = $query->execute();
+ $entriesUpdated = 0;
+ while ($row = $result->fetch()) {
+ $update->setParameter('storage', $row['storage'], IQueryBuilder::PARAM_INT)
+ ->setParameter('mount', $row['id'], IQueryBuilder::PARAM_INT);
+ $update->execute();
+ $entriesUpdated++;
+ }
+ $result->closeCursor();
+
+ if ($entriesUpdated > 0) {
+ $output->info($entriesUpdated . ' mounts updated');
+ return;
+ }
+
+ $output->info('No mounts updated');
+ }
+}
diff --git a/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php b/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php
index f8c0d9b3abf..f8c0d9b3abf 100644
--- a/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php
+++ b/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php
diff --git a/lib/private/Repair/RepairInvalidShares.php b/lib/private/Repair/RepairInvalidShares.php
index 6cb690057bb..04624c910dd 100644
--- a/lib/private/Repair/RepairInvalidShares.php
+++ b/lib/private/Repair/RepairInvalidShares.php
@@ -27,6 +27,7 @@ namespace OC\Repair;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
+use Doctrine\DBAL\Platforms\OraclePlatform;
/**
* Repairs shares with invalid data
@@ -92,6 +93,26 @@ class RepairInvalidShares implements IRepairStep {
}
/**
+ * Adjust file share permissions
+ */
+ private function adjustFileSharePermissions(IOutput $out) {
+ $mask = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE;
+ $builder = $this->connection->getQueryBuilder();
+
+ $permsFunc = $builder->expr()->bitwiseAnd('permissions', $mask);
+ $builder
+ ->update('share')
+ ->set('permissions', $permsFunc)
+ ->where($builder->expr()->eq('item_type', $builder->expr()->literal('file')))
+ ->andWhere($builder->expr()->neq('permissions', $permsFunc));
+
+ $updatedEntries = $builder->execute();
+ if ($updatedEntries > 0) {
+ $out->info('Fixed file share permissions for ' . $updatedEntries . ' shares');
+ }
+ }
+
+ /**
* Remove shares where the parent share does not exist anymore
*/
private function removeSharesNonExistingParent(IOutput $out) {
@@ -137,6 +158,9 @@ class RepairInvalidShares implements IRepairStep {
// this situation was only possible before 9.1
$this->addShareLinkDeletePermission($out);
}
+ if (version_compare($ocVersionFromBeforeUpdate, '12.0.0.11', '<')) {
+ $this->adjustFileSharePermissions($out);
+ }
$this->removeSharesNonExistingParent($out);
}
diff --git a/lib/private/Repair/RepairLegacyStorages.php b/lib/private/Repair/RepairLegacyStorages.php
deleted file mode 100644
index 228bdb67fe8..00000000000
--- a/lib/private/Repair/RepairLegacyStorages.php
+++ /dev/null
@@ -1,257 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Aaron Wood <aaronjwood@gmail.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Vincent Petry <pvince81@owncloud.com>
- *
- * @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/>
- *
- */
-
-namespace OC\Repair;
-
-use OC\Files\Cache\Storage;
-use OC\RepairException;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-class RepairLegacyStorages implements IRepairStep{
- /**
- * @var \OCP\IConfig
- */
- protected $config;
-
- /**
- * @var \OCP\IDBConnection
- */
- protected $connection;
-
- protected $findStorageInCacheStatement;
- protected $renameStorageStatement;
-
- /**
- * @param \OCP\IConfig $config
- * @param \OCP\IDBConnection $connection
- */
- public function __construct($config, $connection) {
- $this->connection = $connection;
- $this->config = $config;
-
- $this->findStorageInCacheStatement = $this->connection->prepare(
- 'SELECT DISTINCT `storage` FROM `*PREFIX*filecache`'
- . ' WHERE `storage` in (?, ?)'
- );
- $this->renameStorageStatement = $this->connection->prepare(
- 'UPDATE `*PREFIX*storages`'
- . ' SET `id` = ?'
- . ' WHERE `id` = ?'
- );
- }
-
- public function getName() {
- return 'Repair legacy storages';
- }
-
- /**
- * Extracts the user id from a legacy storage id
- *
- * @param string $storageId legacy storage id in the
- * format "local::/path/to/datadir/userid"
- * @return string user id extracted from the storage id
- */
- private function extractUserId($storageId) {
- $storageId = rtrim($storageId, '/');
- $pos = strrpos($storageId, '/');
- return substr($storageId, $pos + 1);
- }
-
- /**
- * Fix the given legacy storage by renaming the old id
- * to the new id. If the new id already exists, whichever
- * storage that has data in the file cache will be used.
- * If both have data, nothing will be done and false is
- * returned.
- *
- * @param string $oldId old storage id
- * @param int $oldNumericId old storage numeric id
- * @param string $userId
- * @return bool true if fixed, false otherwise
- * @throws RepairException
- */
- private function fixLegacyStorage($oldId, $oldNumericId, $userId = null) {
- // check whether the new storage already exists
- if (is_null($userId)) {
- $userId = $this->extractUserId($oldId);
- }
- $newId = 'home::' . $userId;
-
- // check if target id already exists
- $newNumericId = Storage::getNumericStorageId($newId);
- if (!is_null($newNumericId)) {
- $newNumericId = (int)$newNumericId;
- // try and resolve the conflict
- // check which one of "local::" or "home::" needs to be kept
- $this->findStorageInCacheStatement->execute(array($oldNumericId, $newNumericId));
- $row1 = $this->findStorageInCacheStatement->fetch();
- $row2 = $this->findStorageInCacheStatement->fetch();
- $this->findStorageInCacheStatement->closeCursor();
- if ($row2 !== false) {
- // two results means both storages have data, not auto-fixable
- throw new RepairException(
- 'Could not automatically fix legacy storage '
- . '"' . $oldId . '" => "' . $newId . '"'
- . ' because they both have data.'
- );
- }
- if ($row1 === false || (int)$row1['storage'] === $oldNumericId) {
- // old storage has data, then delete the empty new id
- $toDelete = $newId;
- } else if ((int)$row1['storage'] === $newNumericId) {
- // new storage has data, then delete the empty old id
- $toDelete = $oldId;
- } else {
- // unknown case, do not continue
- return false;
- }
-
- // delete storage including file cache
- Storage::remove($toDelete);
-
- // if we deleted the old id, the new id will be used
- // automatically
- if ($toDelete === $oldId) {
- // nothing more to do
- return true;
- }
- }
-
- // rename old id to new id
- $newId = Storage::adjustStorageId($newId);
- $oldId = Storage::adjustStorageId($oldId);
- $rowCount = $this->renameStorageStatement->execute(array($newId, $oldId));
- $this->renameStorageStatement->closeCursor();
- return ($rowCount === 1);
- }
-
- /**
- * Converts legacy home storage ids in the format
- * "local::/data/dir/path/userid/" to the new format "home::userid"
- */
- public function run(IOutput $out) {
- // only run once
- if ($this->config->getAppValue('core', 'repairlegacystoragesdone') === 'yes') {
- return;
- }
-
- $dataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/');
- $dataDir = rtrim($dataDir, '/') . '/';
- $dataDirId = 'local::' . $dataDir;
-
- $count = 0;
- $hasWarnings = false;
-
- $this->connection->beginTransaction();
-
- // note: not doing a direct UPDATE with the REPLACE function
- // because regexp search/extract is needed and it is not guaranteed
- // to work on all database types
- $sql = 'SELECT `id`, `numeric_id` FROM `*PREFIX*storages`'
- . ' WHERE `id` LIKE ?'
- . ' ORDER BY `id`';
- $result = $this->connection->executeQuery($sql, array($this->connection->escapeLikeParameter($dataDirId) . '%'));
-
- while ($row = $result->fetch()) {
- $currentId = $row['id'];
- // one entry is the datadir itself
- if ($currentId === $dataDirId) {
- continue;
- }
-
- try {
- if ($this->fixLegacyStorage($currentId, (int)$row['numeric_id'])) {
- $count++;
- }
- }
- catch (RepairException $e) {
- $hasWarnings = true;
- $out->warning('Could not repair legacy storage ' . $currentId . ' automatically.');
- }
- }
-
- // check for md5 ids, not in the format "prefix::"
- $sql = 'SELECT COUNT(*) AS "c" FROM `*PREFIX*storages`'
- . ' WHERE `id` NOT LIKE \'%::%\'';
- $result = $this->connection->executeQuery($sql);
- $row = $result->fetch();
-
- // find at least one to make sure it's worth
- // querying the user list
- if ((int)$row['c'] > 0) {
- $userManager = \OC::$server->getUserManager();
-
- // use chunks to avoid caching too many users in memory
- $limit = 30;
- $offset = 0;
-
- do {
- // query the next page of users
- $results = $userManager->search('', $limit, $offset);
- $storageIds = array();
- foreach ($results as $uid => $userObject) {
- $storageId = $dataDirId . $uid . '/';
- if (strlen($storageId) <= 64) {
- // skip short storage ids as they were handled in the previous section
- continue;
- }
- $storageIds[$uid] = $storageId;
- }
-
- if (count($storageIds) > 0) {
- // update the storages of these users
- foreach ($storageIds as $uid => $storageId) {
- $numericId = Storage::getNumericStorageId($storageId);
- try {
- if (!is_null($numericId) && $this->fixLegacyStorage($storageId, (int)$numericId)) {
- $count++;
- }
- }
- catch (RepairException $e) {
- $hasWarnings = true;
- $out->warning('Could not repair legacy storage ' . $storageId . ' automatically.');
- }
- }
- }
- $offset += $limit;
- } while (count($results) >= $limit);
- }
-
- $out->info('Updated ' . $count . ' legacy home storage ids');
-
- $this->connection->commit();
-
- Storage::getGlobalCache()->clearCache();
-
- if ($hasWarnings) {
- $out->warning('Some legacy storages could not be repaired. Please manually fix them then re-run ./occ maintenance:repair');
- } else {
- // if all were done, no need to redo the repair during next upgrade
- $this->config->setAppValue('core', 'repairlegacystoragesdone', 'yes');
- }
- }
-}
diff --git a/lib/private/Security/Bruteforce/Throttler.php b/lib/private/Security/Bruteforce/Throttler.php
index 031c5ffd411..765f109fdb3 100644
--- a/lib/private/Security/Bruteforce/Throttler.php
+++ b/lib/private/Security/Bruteforce/Throttler.php
@@ -189,9 +189,10 @@ class Throttler {
* Get the throttling delay (in milliseconds)
*
* @param string $ip
+ * @param string $action optionally filter by action
* @return int
*/
- public function getDelay($ip) {
+ public function getDelay($ip, $action = '') {
$cutoffTime = (new \DateTime())
->sub($this->getCutoff(43200))
->getTimestamp();
@@ -201,6 +202,11 @@ class Throttler {
->from('bruteforce_attempts')
->where($qb->expr()->gt('occurred', $qb->createNamedParameter($cutoffTime)))
->andWhere($qb->expr()->eq('subnet', $qb->createNamedParameter($this->getSubnet($ip))));
+
+ if ($action !== '') {
+ $qb->andWhere($qb->expr()->eq('action', $qb->createNamedParameter($action)));
+ }
+
$attempts = count($qb->execute()->fetchAll());
if ($attempts === 0) {
@@ -225,10 +231,11 @@ class Throttler {
* Will sleep for the defined amount of time
*
* @param string $ip
+ * @param string $action optionally filter by action
* @return int the time spent sleeping
*/
- public function sleepDelay($ip) {
- $delay = $this->getDelay($ip);
+ public function sleepDelay($ip, $action = '') {
+ $delay = $this->getDelay($ip, $action);
usleep($delay * 1000);
return $delay;
}
diff --git a/lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php b/lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php
index 284700566d6..85ae127f5f1 100644
--- a/lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php
+++ b/lib/private/Security/CSP/ContentSecurityPolicyNonceManager.php
@@ -69,8 +69,6 @@ class ContentSecurityPolicyNonceManager {
Request::USER_AGENT_CHROME,
// Firefox 45+
'/^Mozilla\/5\.0 \([^)]+\) Gecko\/[0-9.]+ Firefox\/(4[5-9]|[5-9][0-9])\.[0-9.]+$/',
- // Safari 10+
- '/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Version\/1[0-9.]+ Safari\/[0-9.A-Z]+$/',
];
if($this->request->isUserAgent($browserWhitelist)) {
diff --git a/lib/private/Security/CertificateManager.php b/lib/private/Security/CertificateManager.php
index f7bf0df58c5..461ef9457a7 100644
--- a/lib/private/Security/CertificateManager.php
+++ b/lib/private/Security/CertificateManager.php
@@ -30,6 +30,7 @@ namespace OC\Security;
use OC\Files\Filesystem;
use OCP\ICertificateManager;
use OCP\IConfig;
+use OCP\ILogger;
/**
* Manage trusted certificates for users
@@ -51,14 +52,21 @@ class CertificateManager implements ICertificateManager {
protected $config;
/**
+ * @var ILogger
+ */
+ protected $logger;
+
+ /**
* @param string $uid
* @param \OC\Files\View $view relative to data/
* @param IConfig $config
+ * @param ILogger $logger
*/
- public function __construct($uid, \OC\Files\View $view, IConfig $config) {
+ public function __construct($uid, \OC\Files\View $view, IConfig $config, ILogger $logger) {
$this->uid = $uid;
$this->view = $view;
$this->config = $config;
+ $this->logger = $logger;
}
/**
@@ -104,6 +112,13 @@ class CertificateManager implements ICertificateManager {
$this->view->mkdir($path);
}
+ $defaultCertificates = file_get_contents(\OC::$SERVERROOT . '/resources/config/ca-bundle.crt');
+ if (strlen($defaultCertificates) < 1024) { // sanity check to verify that we have some content for our bundle
+ // log as exception so we have a stacktrace
+ $this->logger->logException(new \Exception('Shipped ca-bundle is empty, refusing to create certificate bundle'));
+ return;
+ }
+
$fhCerts = $this->view->fopen($path . '/rootcerts.crt', 'w');
// Write user certificates
@@ -117,7 +132,6 @@ class CertificateManager implements ICertificateManager {
}
// Append the default certificates
- $defaultCertificates = file_get_contents(\OC::$SERVERROOT . '/resources/config/ca-bundle.crt');
fwrite($fhCerts, $defaultCertificates);
// Append the system certificate bundle
@@ -203,7 +217,7 @@ class CertificateManager implements ICertificateManager {
}
if ($this->needsRebundling($uid)) {
if (is_null($uid)) {
- $manager = new CertificateManager(null, $this->view, $this->config);
+ $manager = new CertificateManager(null, $this->view, $this->config, $this->logger);
$manager->createCertificateBundle();
} else {
$this->createCertificateBundle();
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 2c0aac9b43c..3c716ae6ce6 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -45,8 +45,8 @@ use bantu\IniGetWrapper\IniGetWrapper;
use OC\App\AppStore\Fetcher\AppFetcher;
use OC\App\AppStore\Fetcher\CategoryFetcher;
use OC\AppFramework\Http\Request;
-use OC\AppFramework\Db\Db;
use OC\AppFramework\Utility\TimeFactory;
+use OC\Authentication\LoginCredentials\Store;
use OC\Command\AsyncBus;
use OC\Diagnostics\EventLogger;
use OC\Diagnostics\NullEventLogger;
@@ -90,6 +90,7 @@ use OC\Security\TrustedDomainHelper;
use OC\Session\CryptoWrapper;
use OC\Tagging\TagMapper;
use OCA\Theming\ThemingDefaults;
+use OCP\Authentication\LoginCredentials\IStore;
use OCP\IL10N;
use OCP\IServerContainer;
use OCP\RichObjectStrings\IValidator;
@@ -125,7 +126,8 @@ class Server extends ServerContainer implements IServerContainer {
$c->getConfig(),
$c->getRootFolder(),
$c->getAppDataDir('preview'),
- $c->getEventDispatcher()
+ $c->getEventDispatcher(),
+ $c->getSession()->get('user_id')
);
});
@@ -246,6 +248,17 @@ class Server extends ServerContainer implements IServerContainer {
});
return $groupManager;
});
+ $this->registerService(Store::class, function(Server $c) {
+ $session = $c->getSession();
+ if (\OC::$server->getSystemConfig()->getValue('installed', false)) {
+ $tokenProvider = $c->query('OC\Authentication\Token\IProvider');
+ } else {
+ $tokenProvider = null;
+ }
+ $logger = $c->getLogger();
+ return new Store($session, $logger, $tokenProvider);
+ });
+ $this->registerAlias(IStore::class, Store::class);
$this->registerService('OC\Authentication\Token\DefaultTokenMapper', function (Server $c) {
$dbConnection = $c->getDatabaseConnection();
return new Authentication\Token\DefaultTokenMapper($dbConnection);
@@ -313,11 +326,15 @@ class Server extends ServerContainer implements IServerContainer {
});
$this->registerService(\OC\Authentication\TwoFactorAuth\Manager::class, function (Server $c) {
- return new \OC\Authentication\TwoFactorAuth\Manager($c->getAppManager(), $c->getSession(), $c->getConfig());
+ return new \OC\Authentication\TwoFactorAuth\Manager($c->getAppManager(), $c->getSession(), $c->getConfig(), $c->getActivityManager(), $c->getLogger());
});
- $this->registerService('NavigationManager', function ($c) {
- return new \OC\NavigationManager();
+ $this->registerService('NavigationManager', function (Server $c) {
+ return new \OC\NavigationManager($c->getAppManager(),
+ $c->getURLGenerator(),
+ $c->getL10NFactory(),
+ $c->getUserSession(),
+ $c->getGroupManager());
});
$this->registerService('AllConfig', function (Server $c) {
return new \OC\AllConfig(
@@ -361,7 +378,8 @@ class Server extends ServerContainer implements IServerContainer {
return new CategoryFetcher(
$this->getAppDataDir('appstore'),
$this->getHTTPClientService(),
- $this->query(TimeFactory::class)
+ $this->query(TimeFactory::class),
+ $this->getConfig()
);
});
$this->registerService('UserCache', function ($c) {
@@ -376,7 +394,7 @@ class Server extends ServerContainer implements IServerContainer {
$version = implode(',', $v);
$instanceId = \OC_Util::getInstanceId();
$path = \OC::$SERVERROOT;
- $prefix = md5($instanceId . '-' . $version . '-' . $path);
+ $prefix = md5($instanceId . '-' . $version . '-' . $path . '-' . \OC::$WEBROOT);
return new \OC\Memcache\Factory($prefix, $c->getLogger(),
$config->getSystemValue('memcache.local', null),
$config->getSystemValue('memcache.distributed', null),
@@ -418,9 +436,8 @@ class Server extends ServerContainer implements IServerContainer {
);
});
$this->registerService('Logger', function (Server $c) {
- $logClass = $c->query('AllConfig')->getSystemValue('log_type', 'file');
- // TODO: Drop backwards compatibility for config in the future
- $logger = 'OC\\Log\\' . ucfirst($logClass=='owncloud' ? 'file' : $logClass);
+ $logType = $c->query('AllConfig')->getSystemValue('log_type', 'file');
+ $logger = Log::getLogClass($logType);
call_user_func(array($logger, 'init'));
return new Log($logger);
@@ -470,9 +487,6 @@ class Server extends ServerContainer implements IServerContainer {
$connection->getConfiguration()->setSQLLogger($c->getQueryLogger());
return $connection;
});
- $this->registerService('Db', function (Server $c) {
- return new Db($c->getDatabaseConnection());
- });
$this->registerService('HTTPHelper', function (Server $c) {
$config = $c->getConfig();
return new HTTPHelper(
@@ -485,7 +499,7 @@ class Server extends ServerContainer implements IServerContainer {
$uid = $user ? $user : null;
return new ClientService(
$c->getConfig(),
- new \OC\Security\CertificateManager($uid, new View(), $c->getConfig())
+ new \OC\Security\CertificateManager($uid, new View(), $c->getConfig(), $c->getLogger())
);
});
$this->registerService('EventLogger', function (Server $c) {
@@ -794,7 +808,9 @@ class Server extends ServerContainer implements IServerContainer {
$c->getConfig(),
$c->getEncryptionManager(),
$c->getUserManager(),
- $c->getLockingProvider()
+ $c->getLockingProvider(),
+ new \OC\Settings\Mapper($c->getDatabaseConnection()),
+ $c->getURLGenerator()
);
return $manager;
});
@@ -900,7 +916,6 @@ class Server extends ServerContainer implements IServerContainer {
return $this->query('SystemTagObjectMapper');
}
-
/**
* Returns the avatar manager, used for avatar functionality
*
@@ -998,7 +1013,8 @@ class Server extends ServerContainer implements IServerContainer {
*/
public function setSession(\OCP\ISession $session) {
$this->query(SessionStorage::class)->setSession($session);
- return $this->query('UserSession')->setSession($session);
+ $this->query('UserSession')->setSession($session);
+ $this->query(Store::class)->setSession($session);
}
/**
@@ -1199,16 +1215,6 @@ class Server extends ServerContainer implements IServerContainer {
}
/**
- * Returns an instance of the db facade
- *
- * @deprecated use getDatabaseConnection, will be removed in ownCloud 10
- * @return \OCP\IDb
- */
- public function getDb() {
- return $this->query('Db');
- }
-
- /**
* Returns an instance of the HTTP helper class
*
* @deprecated Use getHTTPClientService()
@@ -1233,7 +1239,7 @@ class Server extends ServerContainer implements IServerContainer {
}
$userId = $user->getUID();
}
- return new CertificateManager($userId, new View(), $this->getConfig());
+ return new CertificateManager($userId, new View(), $this->getConfig(), $this->getLogger());
}
/**
diff --git a/lib/private/Settings/Admin/Encryption.php b/lib/private/Settings/Admin/Encryption.php
index 6e93407f1a3..63020c6bce7 100644
--- a/lib/private/Settings/Admin/Encryption.php
+++ b/lib/private/Settings/Admin/Encryption.php
@@ -23,23 +23,23 @@
namespace OC\Settings\Admin;
-use OC\Encryption\Manager;
use OCP\AppFramework\Http\TemplateResponse;
+use OCP\Encryption\IManager;
use OCP\IUserManager;
use OCP\Settings\ISettings;
class Encryption implements ISettings {
- /** @var Manager */
+ /** @var IManager */
private $manager;
/** @var IUserManager */
private $userManager;
/**
- * @param Manager $manager
+ * @param IManager $manager
* @param IUserManager $userManager
*/
- public function __construct(Manager $manager, IUserManager $userManager) {
+ public function __construct(IManager $manager, IUserManager $userManager) {
$this->manager = $manager;
$this->userManager = $userManager;
}
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index 990750848d3..7a339b94199 100644
--- a/lib/private/Settings/Manager.php
+++ b/lib/private/Settings/Manager.php
@@ -29,6 +29,7 @@ use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\ILogger;
+use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Lock\ILockingProvider;
use OCP\Settings\ISettings;
@@ -43,6 +44,8 @@ class Manager implements IManager {
private $log;
/** @var IDBConnection */
private $dbc;
+ /** @var Mapper */
+ private $mapper;
/** @var IL10N */
private $l;
/** @var IConfig */
@@ -53,6 +56,8 @@ class Manager implements IManager {
private $userManager;
/** @var ILockingProvider */
private $lockingProvider;
+ /** @var IURLGenerator */
+ private $url;
/**
* @param ILogger $log
@@ -62,6 +67,8 @@ class Manager implements IManager {
* @param EncryptionManager $encryptionManager
* @param IUserManager $userManager
* @param ILockingProvider $lockingProvider
+ * @param Mapper $mapper
+ * @param IURLGenerator $url
*/
public function __construct(
ILogger $log,
@@ -70,25 +77,29 @@ class Manager implements IManager {
IConfig $config,
EncryptionManager $encryptionManager,
IUserManager $userManager,
- ILockingProvider $lockingProvider
+ ILockingProvider $lockingProvider,
+ Mapper $mapper,
+ IURLGenerator $url
) {
$this->log = $log;
$this->dbc = $dbc;
+ $this->mapper = $mapper;
$this->l = $l;
$this->config = $config;
$this->encryptionManager = $encryptionManager;
$this->userManager = $userManager;
$this->lockingProvider = $lockingProvider;
+ $this->url = $url;
}
/**
* @inheritdoc
*/
public function setupSettings(array $settings) {
- if(isset($settings[IManager::KEY_ADMIN_SECTION])) {
+ if (isset($settings[IManager::KEY_ADMIN_SECTION])) {
$this->setupAdminSection($settings[IManager::KEY_ADMIN_SECTION]);
}
- if(isset($settings[IManager::KEY_ADMIN_SETTINGS])) {
+ if (isset($settings[IManager::KEY_ADMIN_SETTINGS])) {
$this->setupAdminSettings($settings[IManager::KEY_ADMIN_SETTINGS]);
}
}
@@ -104,50 +115,33 @@ class Manager implements IManager {
public function onAppDisabled($appId) {
$appInfo = \OC_App::getAppInfo($appId); // hello static legacy
- if(isset($appInfo['settings'][IManager::KEY_ADMIN_SECTION])) {
- $this->remove(self::TABLE_ADMIN_SECTIONS, trim($appInfo['settings'][IManager::KEY_ADMIN_SECTION], '\\'));
+ if (isset($appInfo['settings'][IManager::KEY_ADMIN_SECTION])) {
+ $this->mapper->remove(self::TABLE_ADMIN_SECTIONS, trim($appInfo['settings'][IManager::KEY_ADMIN_SECTION], '\\'));
}
- if(isset($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS])) {
- $this->remove(self::TABLE_ADMIN_SETTINGS, trim($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS], '\\'));
+ if (isset($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS])) {
+ $this->mapper->remove(self::TABLE_ADMIN_SETTINGS, trim($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS], '\\'));
}
}
public function checkForOrphanedClassNames() {
- $tables = [ self::TABLE_ADMIN_SECTIONS, self::TABLE_ADMIN_SETTINGS ];
+ $tables = [self::TABLE_ADMIN_SECTIONS, self::TABLE_ADMIN_SETTINGS];
foreach ($tables as $table) {
- $classes = $this->getClasses($table);
- foreach($classes as $className) {
+ $classes = $this->mapper->getClasses($table);
+ foreach ($classes as $className) {
try {
\OC::$server->query($className);
} catch (QueryException $e) {
- $this->remove($table, $className);
+ $this->mapper->remove($table, $className);
}
}
}
}
/**
- * returns the registerd classes in the given table
- *
- * @param $table
- * @return string[]
- */
- private function getClasses($table) {
- $q = $this->dbc->getQueryBuilder();
- $resultStatement = $q->select('class')
- ->from($table)
- ->execute();
- $data = $resultStatement->fetchAll();
- $resultStatement->closeCursor();
-
- return array_map(function($row) { return $row['class']; }, $data);
- }
-
- /**
* @param string $sectionClassName
*/
private function setupAdminSection($sectionClassName) {
- if(!class_exists($sectionClassName)) {
+ if (!class_exists($sectionClassName)) {
$this->log->debug('Could not find admin section class ' . $sectionClassName);
return;
}
@@ -158,14 +152,14 @@ class Manager implements IManager {
return;
}
- if(!$section instanceof ISection) {
+ if (!$section instanceof ISection) {
$this->log->error(
'Admin section instance must implement \OCP\ISection. Invalid class: {class}',
['class' => $sectionClassName]
);
return;
}
- if(!$this->hasAdminSection(get_class($section))) {
+ if (!$this->hasAdminSection(get_class($section))) {
$this->addAdminSection($section);
} else {
$this->updateAdminSection($section);
@@ -173,7 +167,7 @@ class Manager implements IManager {
}
private function addAdminSection(ISection $section) {
- $this->add(self::TABLE_ADMIN_SECTIONS, [
+ $this->mapper->add(self::TABLE_ADMIN_SECTIONS, [
'id' => $section->getID(),
'class' => get_class($section),
'priority' => $section->getPriority(),
@@ -181,28 +175,15 @@ class Manager implements IManager {
}
private function addAdminSettings(ISettings $settings) {
- $this->add(self::TABLE_ADMIN_SETTINGS, [
+ $this->mapper->add(self::TABLE_ADMIN_SETTINGS, [
'class' => get_class($settings),
'section' => $settings->getSection(),
'priority' => $settings->getPriority(),
]);
}
- /**
- * @param string $table
- * @param array $values
- */
- private function add($table, array $values) {
- $query = $this->dbc->getQueryBuilder();
- $values = array_map(function($value) use ($query) {
- return $query->createNamedParameter($value);
- }, $values);
- $query->insert($table)->values($values);
- $query->execute();
- }
-
private function updateAdminSettings(ISettings $settings) {
- $this->update(
+ $this->mapper->update(
self::TABLE_ADMIN_SETTINGS,
'class',
get_class($settings),
@@ -214,35 +195,23 @@ class Manager implements IManager {
}
private function updateAdminSection(ISection $section) {
- $this->update(
+ $this->mapper->update(
self::TABLE_ADMIN_SECTIONS,
'class',
get_class($section),
[
- 'id' => $section->getID(),
+ 'id' => $section->getID(),
'priority' => $section->getPriority(),
]
);
}
- private function update($table, $idCol, $id, $values) {
- $query = $this->dbc->getQueryBuilder();
- $query->update($table);
- foreach($values as $key => $value) {
- $query->set($key, $query->createNamedParameter($value));
- }
- $query
- ->where($query->expr()->eq($idCol, $query->createParameter($idCol)))
- ->setParameter($idCol, $id)
- ->execute();
- }
-
/**
* @param string $className
* @return bool
*/
private function hasAdminSection($className) {
- return $this->has(self::TABLE_ADMIN_SECTIONS, $className);
+ return $this->mapper->has(self::TABLE_ADMIN_SECTIONS, $className);
}
/**
@@ -250,44 +219,11 @@ class Manager implements IManager {
* @return bool
*/
private function hasAdminSettings($className) {
- return $this->has(self::TABLE_ADMIN_SETTINGS, $className);
- }
-
- /**
- * @param string $table
- * @param string $className
- * @return bool
- */
- private function has($table, $className) {
- $query = $this->dbc->getQueryBuilder();
- $query->select('class')
- ->from($table)
- ->where($query->expr()->eq('class', $query->createNamedParameter($className)))
- ->setMaxResults(1);
-
- $result = $query->execute();
- $row = $result->fetch();
- $result->closeCursor();
-
- return (bool) $row;
- }
-
- /**
- * deletes an settings or admin entry from the given table
- *
- * @param $table
- * @param $className
- */
- private function remove($table, $className) {
- $query = $this->dbc->getQueryBuilder();
- $query->delete($table)
- ->where($query->expr()->eq('class', $query->createNamedParameter($className)));
-
- $query->execute();
+ return $this->mapper->has(self::TABLE_ADMIN_SETTINGS, $className);
}
private function setupAdminSettings($settingsClassName) {
- if(!class_exists($settingsClassName)) {
+ if (!class_exists($settingsClassName)) {
$this->log->debug('Could not find admin section class ' . $settingsClassName);
return;
}
@@ -300,14 +236,14 @@ class Manager implements IManager {
return;
}
- if(!$settings instanceof ISettings) {
+ if (!$settings instanceof ISettings) {
$this->log->error(
'Admin section instance must implement \OCP\Settings\ISection. Invalid class: {class}',
['class' => $settingsClassName]
);
return;
}
- if(!$this->hasAdminSettings(get_class($settings))) {
+ if (!$this->hasAdminSettings(get_class($settings))) {
$this->addAdminSettings($settings);
} else {
$this->updateAdminSettings($settings);
@@ -329,24 +265,17 @@ class Manager implements IManager {
public function getAdminSections() {
// built-in sections
$sections = [
- 0 => [new Section('server', $this->l->t('Server settings'), 0)],
- 5 => [new Section('sharing', $this->l->t('Sharing'), 0)],
- 45 => [new Section('encryption', $this->l->t('Encryption'), 0)],
- 98 => [new Section('additional', $this->l->t('Additional settings'), 0)],
- 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0)],
+ 0 => [new Section('server', $this->l->t('Server settings'), 0, $this->url->imagePath('settings', 'admin.svg'))],
+ 5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
+ 45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
+ 98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
+ 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0, $this->url->imagePath('settings', 'help.svg'))],
];
- $query = $this->dbc->getQueryBuilder();
- $query->selectDistinct('s.class')
- ->addSelect('s.priority')
- ->from(self::TABLE_ADMIN_SECTIONS, 's')
- ->from(self::TABLE_ADMIN_SETTINGS, 'f')
- ->where($query->expr()->eq('s.id', 'f.section'))
- ;
- $result = $query->execute();
+ $rows = $this->mapper->getAdminSectionsFromDB();
- while($row = $result->fetch()) {
- if(!isset($sections[$row['priority']])) {
+ foreach ($rows as $row) {
+ if (!isset($sections[$row['priority']])) {
$sections[$row['priority']] = [];
}
try {
@@ -355,38 +284,42 @@ class Manager implements IManager {
// skip
}
}
- $result->closeCursor();
ksort($sections);
+
return $sections;
}
+ /**
+ * @param string $section
+ * @return ISection[]
+ */
private function getBuiltInAdminSettings($section) {
$forms = [];
try {
- if($section === 'server') {
+ if ($section === 'server') {
/** @var ISettings $form */
$form = new Admin\Server($this->dbc, $this->config, $this->lockingProvider, $this->l);
$forms[$form->getPriority()] = [$form];
$form = new Admin\ServerDevNotice();
$forms[$form->getPriority()] = [$form];
}
- if($section === 'encryption') {
+ if ($section === 'encryption') {
/** @var ISettings $form */
$form = new Admin\Encryption($this->encryptionManager, $this->userManager);
$forms[$form->getPriority()] = [$form];
}
- if($section === 'sharing') {
+ if ($section === 'sharing') {
/** @var ISettings $form */
$form = new Admin\Sharing($this->config);
$forms[$form->getPriority()] = [$form];
}
- if($section === 'additional') {
+ if ($section === 'additional') {
/** @var ISettings $form */
$form = new Admin\Additional($this->config);
$forms[$form->getPriority()] = [$form];
}
- if($section === 'tips-tricks') {
+ if ($section === 'tips-tricks') {
/** @var ISettings $form */
$form = new Admin\TipsTricks($this->config);
$forms[$form->getPriority()] = [$form];
@@ -397,16 +330,15 @@ class Manager implements IManager {
return $forms;
}
- private function getAdminSettingsFromDB($section, &$settings) {
- $query = $this->dbc->getQueryBuilder();
- $query->select(['class', 'priority'])
- ->from(self::TABLE_ADMIN_SETTINGS)
- ->where($query->expr()->eq('section', $this->dbc->getQueryBuilder()->createParameter('section')))
- ->setParameter('section', $section);
+ /**
+ * @inheritdoc
+ */
+ public function getAdminSettings($section) {
+ $settings = $this->getBuiltInAdminSettings($section);
+ $dbRows = $this->mapper->getAdminSettingsFromDB($section);
- $result = $query->execute();
- while($row = $result->fetch()) {
- if(!isset($settings[$row['priority']])) {
+ foreach ($dbRows as $row) {
+ if (!isset($settings[$row['priority']])) {
$settings[$row['priority']] = [];
}
try {
@@ -415,17 +347,8 @@ class Manager implements IManager {
// skip
}
}
- $result->closeCursor();
ksort($settings);
- }
-
- /**
- * @inheritdoc
- */
- public function getAdminSettings($section) {
- $settings = $this->getBuiltInAdminSettings($section);
- $this->getAdminSettingsFromDB($section, $settings);
return $settings;
}
}
diff --git a/lib/private/Settings/Mapper.php b/lib/private/Settings/Mapper.php
new file mode 100644
index 00000000000..2525f2c9854
--- /dev/null
+++ b/lib/private/Settings/Mapper.php
@@ -0,0 +1,163 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @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 OCP\IDBConnection;
+
+class Mapper {
+ const TABLE_ADMIN_SETTINGS = 'admin_settings';
+ const TABLE_ADMIN_SECTIONS = 'admin_sections';
+
+ /** @var IDBConnection */
+ private $dbc;
+
+ /**
+ * @param IDBConnection $dbc
+ */
+ public function __construct(IDBConnection $dbc) {
+ $this->dbc = $dbc;
+ }
+
+ /**
+ * Get the configured admin settings from the database for the provided section
+ *
+ * @param string $section
+ * @return array[] [['class' => string, 'priority' => int], ...]
+ */
+ public function getAdminSettingsFromDB($section) {
+ $query = $this->dbc->getQueryBuilder();
+ $query->select(['class', 'priority'])
+ ->from(self::TABLE_ADMIN_SETTINGS)
+ ->where($query->expr()->eq('section', $this->dbc->getQueryBuilder()->createParameter('section')))
+ ->setParameter('section', $section);
+
+ $result = $query->execute();
+ return $result->fetchAll();
+ }
+
+ /**
+ * Get the configured admin sections from the database
+ *
+ * @return array[] [['class' => string, 'priority' => int], ...]
+ */
+ public function getAdminSectionsFromDB() {
+ $query = $this->dbc->getQueryBuilder();
+ $query->selectDistinct('s.class')
+ ->addSelect('s.priority')
+ ->from(self::TABLE_ADMIN_SECTIONS, 's')
+ ->from(self::TABLE_ADMIN_SETTINGS, 'f')
+ ->where($query->expr()->eq('s.id', 'f.section'));
+ $result = $query->execute();
+ return array_map(function ($row) {
+ $row['priority'] = (int)$row['priority'];
+ return $row;
+ }, $result->fetchAll());
+ }
+
+ /**
+ * @param string $table Mapper::TABLE_ADMIN_SECTIONS or Mapper::TABLE_ADMIN_SETTINGS
+ * @param array $values
+ */
+ public function add($table, array $values) {
+ $query = $this->dbc->getQueryBuilder();
+ $values = array_map(function ($value) use ($query) {
+ return $query->createNamedParameter($value);
+ }, $values);
+ $query->insert($table)->values($values);
+ $query->execute();
+ }
+
+ /**
+ * returns the registered classes in the given table
+ *
+ * @param $table Mapper::TABLE_ADMIN_SECTIONS or Mapper::TABLE_ADMIN_SETTINGS
+ * @return string[]
+ */
+ public function getClasses($table) {
+ $q = $this->dbc->getQueryBuilder();
+ $resultStatement = $q->select('class')
+ ->from($table)
+ ->execute();
+ $data = $resultStatement->fetchAll();
+ $resultStatement->closeCursor();
+
+ return array_map(function ($row) {
+ return $row['class'];
+ }, $data);
+ }
+
+ /**
+ * Check if a class is configured in the database
+ *
+ * @param string $table Mapper::TABLE_ADMIN_SECTIONS or Mapper::TABLE_ADMIN_SETTINGS
+ * @param string $className
+ * @return bool
+ */
+ public function has($table, $className) {
+ $query = $this->dbc->getQueryBuilder();
+ $query->select('class')
+ ->from($table)
+ ->where($query->expr()->eq('class', $query->createNamedParameter($className)))
+ ->setMaxResults(1);
+
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ return (bool)$row;
+ }
+
+ /**
+ * deletes an settings or admin entry from the given table
+ *
+ * @param $table Mapper::TABLE_ADMIN_SECTIONS or Mapper::TABLE_ADMIN_SETTINGS
+ * @param $className
+ */
+ public function remove($table, $className) {
+ $query = $this->dbc->getQueryBuilder();
+ $query->delete($table)
+ ->where($query->expr()->eq('class', $query->createNamedParameter($className)));
+
+ $query->execute();
+ }
+
+ /**
+ * @param $table Mapper::TABLE_ADMIN_SECTIONS or Mapper::TABLE_ADMIN_SETTINGS
+ * @param $idCol
+ * @param $id
+ * @param $values
+ */
+ public function update($table, $idCol, $id, $values) {
+ $query = $this->dbc->getQueryBuilder();
+ $query->update($table);
+ foreach ($values as $key => $value) {
+ $query->set($key, $query->createNamedParameter($value));
+ }
+ $query
+ ->where($query->expr()->eq($idCol, $query->createParameter($idCol)))
+ ->setParameter($idCol, $id)
+ ->execute();
+ }
+
+}
diff --git a/lib/private/Settings/Section.php b/lib/private/Settings/Section.php
index b3cf242279f..c89a3999c4e 100644
--- a/lib/private/Settings/Section.php
+++ b/lib/private/Settings/Section.php
@@ -23,25 +23,29 @@
namespace OC\Settings;
-use OCP\Settings\ISection;
+use OCP\Settings\IIconSection;
-class Section implements ISection {
+class Section implements IIconSection {
/** @var string */
private $id;
/** @var string */
private $name;
/** @var int */
private $priority;
+ /** @var string */
+ private $icon;
/**
* @param string $id
* @param string $name
* @param int $priority
+ * @param string $icon
*/
- public function __construct($id, $name, $priority) {
+ public function __construct($id, $name, $priority, $icon = '') {
$this->id = $id;
$this->name = $name;
$this->priority = $priority;
+ $this->icon = $icon;
}
/**
@@ -74,4 +78,15 @@ class Section implements ISection {
public function getPriority() {
return $this->priority;
}
+
+ /**
+ * returns the relative path to an 16*16 icon describing the section.
+ * e.g. '/core/img/places/files.svg'
+ *
+ * @returns string
+ * @since 12
+ */
+ public function getIcon() {
+ return $this->icon;
+ }
}
diff --git a/lib/private/Setup.php b/lib/private/Setup.php
index 81a5343fe21..d9997767684 100644
--- a/lib/private/Setup.php
+++ b/lib/private/Setup.php
@@ -125,8 +125,8 @@ class Setup {
public function getSupportedDatabases($allowAllDatabases = false) {
$availableDatabases = array(
'sqlite' => array(
- 'type' => 'class',
- 'call' => 'SQLite3',
+ 'type' => 'pdo',
+ 'call' => 'sqlite',
'name' => 'SQLite'
),
'mysql' => array(
@@ -163,9 +163,7 @@ class Setup {
$type = $availableDatabases[$database]['type'];
$call = $availableDatabases[$database]['call'];
- if($type === 'class') {
- $working = $this->class_exists($call);
- } elseif ($type === 'function') {
+ if ($type === 'function') {
$working = $this->is_callable($call);
} elseif($type === 'pdo') {
$working = in_array($call, $this->getAvailableDbDriversForPdo(), TRUE);
diff --git a/lib/private/Setup/MySQL.php b/lib/private/Setup/MySQL.php
index d1399c8821c..bafb3866b76 100644
--- a/lib/private/Setup/MySQL.php
+++ b/lib/private/Setup/MySQL.php
@@ -35,7 +35,7 @@ class MySQL extends AbstractDatabase {
public function setupDatabase($username) {
//check if the database user has admin right
- $connection = $this->connect();
+ $connection = $this->connect(['dbname' => null]);
$this->createSpecificUser($username, $connection);
@@ -152,7 +152,7 @@ class MySQL extends AbstractDatabase {
};
}
} catch (\Exception $ex) {
- $this->logger->error('Specific user creation failed: {error}', [
+ $this->logger->info('Can not create a new MySQL user, will continue with the provided user: {error}', [
'app' => 'mysql.setup',
'error' => $ex->getMessage()
]);
diff --git a/lib/private/Setup/PostgreSQL.php b/lib/private/Setup/PostgreSQL.php
index 085e8609ab2..c01e5bc0332 100644
--- a/lib/private/Setup/PostgreSQL.php
+++ b/lib/private/Setup/PostgreSQL.php
@@ -150,14 +150,16 @@ class PostgreSQL extends AbstractDatabase {
}
private function createDBUser(IDBConnection $connection) {
+ $dbUser = $this->dbUser;
try {
- if ($this->userExists($connection)) {
- // change the password
- $query = $connection->prepare("ALTER ROLE " . addslashes($this->dbUser) . " WITH CREATEDB PASSWORD '" . addslashes($this->dbPassword) . "'");
- } else {
- // create the user
- $query = $connection->prepare("CREATE USER " . addslashes($this->dbUser) . " CREATEDB PASSWORD '" . addslashes($this->dbPassword) . "'");
- }
+ $i = 1;
+ while ($this->userExists($connection)) {
+ $i++;
+ $this->dbUser = $dbUser . $i;
+ };
+
+ // create the user
+ $query = $connection->prepare("CREATE USER " . addslashes($this->dbUser) . " CREATEDB PASSWORD '" . addslashes($this->dbPassword) . "'");
$query->execute();
} catch (DatabaseException $e) {
$this->logger->error('Error while trying to create database user');
diff --git a/lib/private/Setup/Sqlite.php b/lib/private/Setup/Sqlite.php
index 63b970be42e..4d860103b60 100644
--- a/lib/private/Setup/Sqlite.php
+++ b/lib/private/Setup/Sqlite.php
@@ -33,7 +33,7 @@ class Sqlite extends AbstractDatabase {
}
public function setupDatabase($username) {
- $datadir = \OC::$server->getSystemConfig()->getValue('datadirectory');
+ $datadir = \OC::$server->getSystemConfig()->getValue('datadirectory', \OC::$SERVERROOT . '/data');
//delete the old sqlite database first, might cause infinte loops otherwise
if(file_exists("$datadir/owncloud.db")) {
diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php
index 7a602950171..23e8db34d7f 100644
--- a/lib/private/Share20/DefaultShareProvider.php
+++ b/lib/private/Share20/DefaultShareProvider.php
@@ -162,7 +162,6 @@ class DefaultShareProvider implements IShareProvider {
$this->dbConn->beginTransaction();
$qb->execute();
$id = $this->dbConn->lastInsertId('*PREFIX*share');
- $this->dbConn->commit();
// Now fetch the inserted share and create a complete share object
$qb = $this->dbConn->getQueryBuilder();
@@ -172,6 +171,7 @@ class DefaultShareProvider implements IShareProvider {
$cursor = $qb->execute();
$data = $cursor->fetch();
+ $this->dbConn->commit();
$cursor->closeCursor();
if ($data === false) {
@@ -853,7 +853,6 @@ class DefaultShareProvider implements IShareProvider {
$entryData['permissions'] = $entryData['f_permissions'];
$entryData['parent'] = $entryData['f_parent'];;
$share->setNodeCacheEntry(Cache::cacheEntryFromData($entryData,
- $entryData['storage_string_id'],
\OC::$server->getMimeTypeLoader()));
}
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index cd1d52c3bbf..acc142f62be 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -587,7 +587,6 @@ class Manager implements IManager {
$share->setPassword($this->hasher->hash($share->getPassword()));
}
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL) {
- $this->linkCreateChecks($share);
$share->setToken(
$this->secureRandom->generate(
\OC\Share\Constants::TOKEN_LENGTH,
@@ -1055,8 +1054,10 @@ class Manager implements IManager {
public function getShareByToken($token) {
$share = null;
try {
- $provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_LINK);
- $share = $provider->getShareByToken($token);
+ if($this->shareApiAllowLinks()) {
+ $provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_LINK);
+ $share = $provider->getShareByToken($token);
+ }
} catch (ProviderException $e) {
} catch (ShareNotFound $e) {
}
@@ -1072,7 +1073,7 @@ class Manager implements IManager {
}
}
- // If it is not a link share try to fetch a federated share by token
+ // If it is not a link share try to fetch a mail share by token
if ($share === null && $this->shareProviderExists(\OCP\Share::SHARE_TYPE_EMAIL)) {
try {
$provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_EMAIL);
diff --git a/lib/private/SubAdmin.php b/lib/private/SubAdmin.php
index 9a2beed09fe..0650c7c6c01 100644
--- a/lib/private/SubAdmin.php
+++ b/lib/private/SubAdmin.php
@@ -188,7 +188,7 @@ class SubAdmin extends PublicEmitter {
* @param IGroup $group
* @return bool
*/
- public function isSubAdminofGroup(IUser $user, IGroup $group) {
+ public function isSubAdminOfGroup(IUser $user, IGroup $group) {
$qb = $this->dbConn->getQueryBuilder();
/*
diff --git a/lib/private/SystemConfig.php b/lib/private/SystemConfig.php
index 1029a6619ff..e5f1adaf004 100644
--- a/lib/private/SystemConfig.php
+++ b/lib/private/SystemConfig.php
@@ -44,7 +44,6 @@ class SystemConfig {
'passwordsalt' => true,
'secret' => true,
'updater.secret' => true,
- 'ldap_agent_password' => true,
'proxyuserpwd' => true,
'log.condition' => [
'shared_secret' => true,
diff --git a/lib/private/Template/CSSResourceLocator.php b/lib/private/Template/CSSResourceLocator.php
index ffeaf765ff5..3a474a1ecfd 100644
--- a/lib/private/Template/CSSResourceLocator.php
+++ b/lib/private/Template/CSSResourceLocator.php
@@ -25,23 +25,46 @@
namespace OC\Template;
+use OCP\ILogger;
+
class CSSResourceLocator extends ResourceLocator {
+
+ /** @var SCSSCacher */
+ protected $scssCacher;
+
+ /**
+ * @param ILogger $logger
+ * @param string $theme
+ * @param array $core_map
+ * @param array $party_map
+ * @param SCSSCacher $scssCacher
+ */
+ public function __construct(ILogger $logger, $theme, $core_map, $party_map, $scssCacher) {
+ $this->scssCacher = $scssCacher;
+
+ parent::__construct($logger, $theme, $core_map, $party_map);
+ }
+
/**
* @param string $style
*/
public function doFind($style) {
+ $app = substr($style, 0, strpos($style, '/'));
if (strpos($style, '3rdparty') === 0
&& $this->appendIfExist($this->thirdpartyroot, $style.'.css')
+ || $this->cacheAndAppendScssIfExist($this->serverroot, $style.'.scss', $app)
+ || $this->cacheAndAppendScssIfExist($this->serverroot, 'core/'.$style.'.scss')
|| $this->appendIfExist($this->serverroot, $style.'.css')
|| $this->appendIfExist($this->serverroot, 'core/'.$style.'.css')
) {
return;
}
- $app = substr($style, 0, strpos($style, '/'));
$style = substr($style, strpos($style, '/')+1);
$app_path = \OC_App::getAppPath($app);
$app_url = \OC_App::getAppWebPath($app);
- $this->append($app_path, $style.'.css', $app_url);
+ if(!$this->cacheAndAppendScssIfExist($app_path, $style.'.scss', $app)) {
+ $this->append($app_path, $style.'.css', $app_url);
+ }
}
/**
@@ -53,4 +76,29 @@ class CSSResourceLocator extends ResourceLocator {
|| $this->appendIfExist($this->serverroot, $theme_dir.$style.'.css')
|| $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$style.'.css');
}
+
+ /**
+ * cache and append the scss $file if exist at $root
+ *
+ * @param string $root path to check
+ * @param string $file the filename
+ * @return bool True if the resource was found and cached, false otherwise
+ */
+ protected function cacheAndAppendScssIfExist($root, $file, $app = 'core') {
+ if (is_file($root.'/'.$file)) {
+ if($this->scssCacher !== null) {
+ if($this->scssCacher->process($root, $file, $app)) {
+ $this->append($root, $this->scssCacher->getCachedSCSS($app, $file), false);
+ return true;
+ } else {
+ $this->logger->warning('Failed to compile and/or save '.$root.'/'.$file, ['app' => 'core']);
+ return false;
+ }
+ } else {
+ $this->logger->debug('Scss is disabled for '.$root.'/'.$file.', ignoring', ['app' => 'core']);
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/lib/private/Template/ResourceLocator.php b/lib/private/Template/ResourceLocator.php
index 420317d27ac..e22ebdcab7d 100644..100755
--- a/lib/private/Template/ResourceLocator.php
+++ b/lib/private/Template/ResourceLocator.php
@@ -75,7 +75,7 @@ abstract class ResourceLocator {
$this->doFind($resource);
} catch (ResourceNotFoundException $e) {
$resourceApp = substr($resource, 0, strpos($resource, '/'));
- $this->logger->error('Could not find resource file "' . $e->getResourcePath() . '"', ['app' => $resourceApp]);
+ $this->logger->debug('Could not find resource file "' . $e->getResourcePath() . '"', ['app' => $resourceApp]);
}
}
if (!empty($this->theme)) {
@@ -84,7 +84,7 @@ abstract class ResourceLocator {
$this->doFindTheme($resource);
} catch (ResourceNotFoundException $e) {
$resourceApp = substr($resource, 0, strpos($resource, '/'));
- $this->logger->error('Could not find resource file "' . $e->getResourcePath() . '"', ['app' => $resourceApp]);
+ $this->logger->debug('Could not find resource file "' . $e->getResourcePath() . '"', ['app' => $resourceApp]);
}
}
}
diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php
new file mode 100644
index 00000000000..d6f5a2c6fd3
--- /dev/null
+++ b/lib/private/Template/SCSSCacher.php
@@ -0,0 +1,190 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016, John Molakvoæ (skjnldsv@protonmail.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\Template;
+
+use Leafo\ScssPhp\Compiler;
+use Leafo\ScssPhp\Exception\ParserException;
+use Leafo\ScssPhp\Formatter\Crunched;
+use Leafo\ScssPhp\Formatter\Expanded;
+use OC\SystemConfig;
+use OCP\Files\IAppData;
+use OCP\Files\NotFoundException;
+use OCP\Files\SimpleFS\ISimpleFolder;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+
+class SCSSCacher {
+
+ /** @var ILogger */
+ protected $logger;
+
+ /** @var IAppData */
+ protected $appData;
+
+ /** @var IURLGenerator */
+ protected $urlGenerator;
+
+ /** @var SystemConfig */
+ protected $systemConfig;
+
+ /**
+ * @param ILogger $logger
+ * @param IAppData $appData
+ * @param IURLGenerator $urlGenerator
+ * @param SystemConfig $systemConfig
+ */
+ public function __construct(ILogger $logger, IAppData $appData, IURLGenerator $urlGenerator, SystemConfig $systemConfig) {
+ $this->logger = $logger;
+ $this->appData = $appData;
+ $this->urlGenerator = $urlGenerator;
+ $this->systemConfig = $systemConfig;
+ }
+
+ /**
+ * Process the caching process if needed
+ * @param string $root Root path to the nextcloud installation
+ * @param string $file
+ * @param string $app The app name
+ * @return boolean
+ */
+ public function process($root, $file, $app) {
+ $path = explode('/', $root . '/' . $file);
+
+ $fileNameSCSS = array_pop($path);
+ $fileNameCSS = str_replace('.scss', '.css', $fileNameSCSS);
+
+ $path = implode('/', $path);
+
+ $webDir = explode('/', $file);
+ array_pop($webDir);
+ $webDir = implode('/', $webDir);
+
+ try {
+ $folder = $this->appData->getFolder($app);
+ } catch(NotFoundException $e) {
+ // creating css appdata folder
+ $folder = $this->appData->newFolder($app);
+ }
+
+ if($this->isCached($fileNameCSS, $fileNameSCSS, $folder, $path)) {
+ return true;
+ } else {
+ return $this->cache($path, $fileNameCSS, $fileNameSCSS, $folder, $webDir);
+ }
+ }
+
+ /**
+ * Check if the file is cached or not
+ * @param string $fileNameCSS
+ * @param string $fileNameSCSS
+ * @param ISimpleFolder $folder
+ * @param string $path
+ * @return boolean
+ */
+ private function isCached($fileNameCSS, $fileNameSCSS, ISimpleFolder $folder, $path) {
+ try{
+ $cachedFile = $folder->getFile($fileNameCSS);
+ if( $cachedFile->getMTime() > filemtime($path.'/'.$fileNameSCSS)
+ && $cachedFile->getSize() > 0 ) {
+ return true;
+ }
+ } catch(NotFoundException $e) {
+ return false;
+ }
+ return false;
+ }
+
+ /**
+ * Cache the file with AppData
+ * @param string $path
+ * @param string $fileNameCSS
+ * @param string $fileNameSCSS
+ * @param ISimpleFolder $folder
+ * @param string $webDir
+ * @return boolean
+ */
+ private function cache($path, $fileNameCSS, $fileNameSCSS, ISimpleFolder $folder, $webDir) {
+ $scss = new Compiler();
+ $scss->setImportPaths($path);
+ if($this->systemConfig->getValue('debug')) {
+ // Debug mode
+ $scss->setFormatter(Expanded::class);
+ $scss->setLineNumberStyle(Compiler::LINE_COMMENTS);
+ } else {
+ // Compression
+ $scss->setFormatter(Crunched::class);
+ }
+
+ try {
+ $cachedfile = $folder->getFile($fileNameCSS);
+ } catch(NotFoundException $e) {
+ $cachedfile = $folder->newFile($fileNameCSS);
+ }
+
+ // Compile
+ try {
+ $compiledScss = $scss->compile('@import "'.$fileNameSCSS.'";');
+ } catch(ParserException $e) {
+ $this->logger->error($e, ['app' => 'core']);
+ return false;
+ }
+
+ try {
+ $cachedfile->putContent($this->rebaseUrls($compiledScss, $webDir));
+ $this->logger->debug($webDir.'/'.$fileNameSCSS.' compiled and successfully cached', ['app' => 'core']);
+ return true;
+ } catch(NotFoundException $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Add the correct uri prefix to make uri valid again
+ * @param string $css
+ * @param string $webDir
+ * @return string
+ */
+ private function rebaseUrls($css, $webDir) {
+ $re = '/url\([\'"]([\.\w?=\/-]*)[\'"]\)/x';
+ // OC\Route\Router:75
+ if(($this->systemConfig->getValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true')) {
+ $subst = 'url(\'../../'.$webDir.'/$1\')';
+ } else {
+ $subst = 'url(\'../../../'.$webDir.'/$1\')';
+ }
+ return preg_replace($re, $subst, $css);
+ }
+
+ /**
+ * Return the cached css file uri
+ * @param string $appName the app name
+ * @param string $fileName
+ * @return string
+ */
+ public function getCachedSCSS($appName, $fileName) {
+ $tmpfileLoc = explode('/', $fileName);
+ $fileName = array_pop($tmpfileLoc);
+ $fileName = str_replace('.scss', '.css', $fileName);
+
+ return substr($this->urlGenerator->linkToRoute('core.Css.getCss', array('fileName' => $fileName, 'appName' => $appName)), strlen(\OC::$WEBROOT) + 1);
+ }
+}
diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php
index 8919f14216e..7ded109f76b 100644
--- a/lib/private/TemplateLayout.php
+++ b/lib/private/TemplateLayout.php
@@ -35,15 +35,8 @@
*/
namespace OC;
-use Assetic\Asset\AssetCollection;
-use Assetic\Asset\FileAsset;
-use Assetic\AssetWriter;
-use Assetic\Filter\CssImportFilter;
-use Assetic\Filter\CssMinFilter;
-use Assetic\Filter\CssRewriteFilter;
-use Assetic\Filter\JSqueezeFilter;
-use Assetic\Filter\SeparatorFilter;
use OC\Template\JSConfigHelper;
+use OC\Template\SCSSCacher;
class TemplateLayout extends \OC_Template {
@@ -164,11 +157,18 @@ class TemplateLayout extends \OC_Template {
foreach($jsFiles as $info) {
$web = $info[1];
$file = $info[2];
- $this->append( 'jsfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+ $this->append( 'jsfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
}
- // Add the css files
- $cssFiles = self::findStylesheetFiles(\OC_Util::$styles);
+ // Do not initialise scss appdata until we have a fully installed instance
+ // Do not load scss for update, errors, installation or login page
+ if(\OC::$server->getSystemConfig()->getValue('installed', false)
+ && !\OCP\Util::needUpgrade()
+ && strpos(\OC::$server->getRequest()->getRequestUri(), \OC::$server->getURLGenerator()->linkToRoute('core.login.tryLogin')) !== 0) {
+ $cssFiles = self::findStylesheetFiles(\OC_Util::$styles);
+ } else {
+ $cssFiles = self::findStylesheetFiles(\OC_Util::$styles, false);
+ }
$this->assign('cssfiles', array());
$this->assign('printcssfiles', []);
$this->assign('versionHash', self::$versionHash);
@@ -177,26 +177,47 @@ class TemplateLayout extends \OC_Template {
$file = $info[2];
if (substr($file, -strlen('print.css')) === 'print.css') {
- $this->append( 'printcssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+ $this->append( 'printcssfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
} else {
- $this->append( 'cssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+ $this->append( 'cssfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
}
}
}
+ protected function getVersionHashSuffix() {
+ if(\OC::$server->getConfig()->getSystemValue('debug', false)) {
+ // allows chrome workspace mapping in debug mode
+ return "";
+ }
+
+ return '?v=' . self::$versionHash;
+ }
+
/**
* @param array $styles
* @return array
*/
- static public function findStylesheetFiles($styles) {
+ static public function findStylesheetFiles($styles, $compileScss = true) {
// Read the selected theme from the config file
$theme = \OC_Util::getTheme();
+ if($compileScss) {
+ $SCSSCacher = new SCSSCacher(
+ \OC::$server->getLogger(),
+ \OC::$server->getAppDataDir('css'),
+ \OC::$server->getURLGenerator(),
+ \OC::$server->getSystemConfig()
+ );
+ } else {
+ $SCSSCacher = null;
+ }
+
$locator = new \OC\Template\CSSResourceLocator(
\OC::$server->getLogger(),
$theme,
array( \OC::$SERVERROOT => \OC::$WEBROOT ),
- array( \OC::$SERVERROOT => \OC::$WEBROOT ));
+ array( \OC::$SERVERROOT => \OC::$WEBROOT ),
+ $SCSSCacher);
$locator->find($styles);
return $locator->getResources();
}
diff --git a/lib/private/Updater.php b/lib/private/Updater.php
index e30777227cc..a66d49941cd 100644
--- a/lib/private/Updater.php
+++ b/lib/private/Updater.php
@@ -82,6 +82,12 @@ class Updater extends BasicEmitter {
$this->log = $log;
$this->config = $config;
$this->checker = $checker;
+
+ // If at least PHP 7.0.0 is used we don't need to disable apps as we catch
+ // fatal errors and exceptions and disable the app just instead.
+ if(version_compare(phpversion(), '7.0.0', '>=')) {
+ $this->skip3rdPartyAppsDisable = true;
+ }
}
/**
diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php
index 28cb3302858..a281572ad55 100644
--- a/lib/private/User/Database.php
+++ b/lib/private/User/Database.php
@@ -238,6 +238,12 @@ class Database extends Backend implements IUserBackend {
*/
private function loadUser($uid) {
if (!isset($this->cache[$uid])) {
+ //guests $uid could be NULL or ''
+ if ($uid === null || $uid === '') {
+ $this->cache[$uid]=false;
+ return true;
+ }
+
$query = \OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`uid`) = LOWER(?)');
$result = $query->execute(array($uid));
diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php
index 36bd45521cf..2ebe895a592 100644
--- a/lib/private/User/Session.php
+++ b/lib/private/User/Session.php
@@ -317,7 +317,7 @@ class Session implements IUserSession, Emitter {
$password,
IRequest $request,
OC\Security\Bruteforce\Throttler $throttler) {
- $currentDelay = $throttler->sleepDelay($request->getRemoteAddress());
+ $currentDelay = $throttler->sleepDelay($request->getRemoteAddress(), 'login');
if ($this->manager instanceof PublicEmitter) {
$this->manager->emit('\OC\User', 'preLogin', array($user, $password));
@@ -338,7 +338,7 @@ class Session implements IUserSession, Emitter {
$throttler->registerAttempt('login', $request->getRemoteAddress(), ['uid' => $user]);
if($currentDelay === 0) {
- $throttler->sleepDelay($request->getRemoteAddress());
+ $throttler->sleepDelay($request->getRemoteAddress(), 'login');
}
return false;
}
@@ -744,6 +744,7 @@ class Session implements IUserSession, Emitter {
//login
$this->setUser($user);
+ $this->setLoginName($this->tokenProvider->getToken($sessionId)->getLoginName());
$user->updateLastLoginTimestamp();
$this->manager->emit('\OC\User', 'postRememberedLogin', [$user]);
return true;
@@ -768,7 +769,7 @@ class Session implements IUserSession, Emitter {
try {
$this->tokenProvider->invalidateToken($this->session->getId());
} catch (SessionNotAvailableException $ex) {
-
+
}
}
$this->setUser(null);
diff --git a/lib/private/User/User.php b/lib/private/User/User.php
index 3cc6dc3b7ed..c37bb59028e 100644
--- a/lib/private/User/User.php
+++ b/lib/private/User/User.php
@@ -197,6 +197,8 @@ class User implements IUser {
if ($this->emitter) {
$this->emitter->emit('\OC\User', 'preDelete', array($this));
}
+ // get the home now because it won't return it after user deletion
+ $homePath = $this->getHome();
$result = $this->backend->deleteUser($this->uid);
if ($result) {
@@ -210,7 +212,11 @@ class User implements IUser {
\OC::$server->getConfig()->deleteAllUserValues($this->uid);
// Delete user files in /data/
- \OC_Helper::rmdirr($this->getHome());
+ if ($homePath !== false) {
+ // FIXME: this operates directly on FS, should use View instead...
+ // also this is not testable/mockable...
+ \OC_Helper::rmdirr($homePath);
+ }
// Delete the users entry in the storage table
Storage::remove('home::' . $this->uid);
@@ -261,7 +267,7 @@ class User implements IUser {
if ($this->backend->implementsActions(Backend::GET_HOME) and $home = $this->backend->getHome($this->uid)) {
$this->home = $home;
} elseif ($this->config) {
- $this->home = $this->config->getSystemValue('datadirectory') . '/' . $this->uid;
+ $this->home = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/' . $this->uid;
} else {
$this->home = \OC::$SERVERROOT . '/data/' . $this->uid;
}
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index adf29601ac6..a475b895d9f 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -273,9 +273,17 @@ class OC_App {
$appTypes = implode(',', $appData['types']);
} else {
$appTypes = '';
+ $appData['types'] = [];
}
\OC::$server->getAppConfig()->setValue($app, 'types', $appTypes);
+
+ if (\OC::$server->getAppManager()->hasProtectedAppType($appData['types'])) {
+ $enabled = \OC::$server->getAppConfig()->getValue($app, 'enabled', 'yes');
+ if ($enabled !== 'yes' && $enabled !== 'no') {
+ \OC::$server->getAppConfig()->setValue($app, 'enabled', 'yes');
+ }
+ }
}
/**
@@ -1296,43 +1304,21 @@ class OC_App {
$data['summary'] = self::findBestL10NOption($data['summary'], $lang);
}
if ($lang && isset($data['description']) && is_array($data['description'])) {
- $data['description'] = self::findBestL10NOption($data['description'], $lang);
- }
-
- // just modify the description if it is available
- // otherwise this will create a $data element with an empty 'description'
- if (isset($data['description'])) {
- if (is_string($data['description'])) {
- // sometimes the description contains line breaks and they are then also
- // shown in this way in the app management which isn't wanted as HTML
- // manages line breaks itself
-
- // first of all we split on empty lines
- $paragraphs = preg_split("!\n[[:space:]]*\n!mu", $data['description']);
-
- $result = [];
- foreach ($paragraphs as $value) {
- // replace multiple whitespace (tabs, space, newlines) inside a paragraph
- // with a single space - also trims whitespace
- $result[] = trim(preg_replace('![[:space:]]+!mu', ' ', $value));
- }
-
- // join the single paragraphs with a empty line in between
- $data['description'] = implode("\n\n", $result);
-
- } else {
- $data['description'] = '';
- }
+ $data['description'] = trim(self::findBestL10NOption($data['description'], $lang));
+ } else if (isset($data['description']) && is_string($data['description'])) {
+ $data['description'] = trim($data['description']);
+ } else {
+ $data['description'] = '';
}
return $data;
}
/**
- * @param $config
- * @param $l
- * @param $info
- * @throws Exception
+ * @param \OCP\IConfig $config
+ * @param \OCP\IL10N $l
+ * @param array $info
+ * @throws \Exception
*/
protected static function checkAppDependencies($config, $l, $info) {
$dependencyAnalyzer = new DependencyAnalyzer(new Platform($config), $l);
diff --git a/lib/private/legacy/files.php b/lib/private/legacy/files.php
index b6c6857a1bf..8c9adad0d49 100644
--- a/lib/private/legacy/files.php
+++ b/lib/private/legacy/files.php
@@ -148,6 +148,7 @@ class OC_Files {
$streamer->sendHeaders($name);
$executionTime = intval(OC::$server->getIniWrapper()->getNumeric('max_execution_time'));
set_time_limit(0);
+ ignore_user_abort(true);
if ($getType === self::ZIP_FILES) {
foreach ($files as $file) {
$file = $dir . '/' . $file;
diff --git a/lib/private/legacy/helper.php b/lib/private/legacy/helper.php
index 9c4bc895fb9..dfe2e09afff 100644
--- a/lib/private/legacy/helper.php
+++ b/lib/private/legacy/helper.php
@@ -52,6 +52,7 @@ class OC_Helper {
/**
* Creates an absolute url for public use
+ *
* @param string $service id
* @param bool $add_slash
* @return string the url
@@ -62,13 +63,14 @@ class OC_Helper {
if ($service === 'files') {
$url = OC::$server->getURLGenerator()->getAbsoluteURL('/s');
} else {
- $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php').'?service='.$service);
+ $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php') . '?service=' . $service);
}
return $url . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '');
}
/**
* Make a human file size
+ *
* @param int $bytes file size in bytes
* @return string a human readable file size
*
@@ -104,6 +106,7 @@ class OC_Helper {
/**
* Make a php file size
+ *
* @param int $bytes file size in bytes
* @return string a php parseable file size
*
@@ -130,6 +133,7 @@ class OC_Helper {
/**
* Make a computer file size
+ *
* @param string $str file size in human readable format
* @return float a file size in bytes
*
@@ -172,6 +176,7 @@ class OC_Helper {
/**
* Recursive copying of folders
+ *
* @param string $src source folder
* @param string $dest target folder
*
@@ -194,6 +199,7 @@ class OC_Helper {
/**
* Recursive deletion of folders
+ *
* @param string $dir path to the folder
* @param bool $deleteSelf if set to false only the content of the folder will be deleted
* @return bool
@@ -393,6 +399,7 @@ class OC_Helper {
/**
* performs a search in a nested array
+ *
* @param array $haystack the array to be searched
* @param string $needle the search string
* @param string $index optional, only search this key name
@@ -425,7 +432,7 @@ class OC_Helper {
* @return int number of bytes representing
*/
public static function maxUploadFilesize($dir, $freeSpace = null) {
- if (is_null($freeSpace) || $freeSpace < 0){
+ if (is_null($freeSpace) || $freeSpace < 0) {
$freeSpace = self::freeSpace($dir);
}
return min($freeSpace, self::uploadLimit());
@@ -443,7 +450,7 @@ class OC_Helper {
$freeSpace = max($freeSpace, 0);
return $freeSpace;
} else {
- return (INF > 0)? INF: PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188
+ return (INF > 0) ? INF : PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188
}
}
@@ -510,7 +517,7 @@ class OC_Helper {
if (empty($paths)) {
$paths = '/usr/local/bin /usr/bin /opt/bin /bin';
} else {
- $paths = str_replace(':',' ',getenv('PATH'));
+ $paths = str_replace(':', ' ', getenv('PATH'));
}
$command = 'find ' . $paths . ' -name ' . escapeshellarg($program) . ' 2> /dev/null';
exec($command, $output, $returnCode);
@@ -533,6 +540,12 @@ class OC_Helper {
* @throws \OCP\Files\NotFoundException
*/
public static function getStorageInfo($path, $rootInfo = null) {
+ $memcache = \OC::$server->getMemCacheFactory()->create('storageInfo');
+ $cacheKey = $rootInfo ? '__root__' . md5($path) : md5($path);
+ $cached = $memcache->get($cacheKey);
+ if (is_array($cached)) {
+ return $cached;
+ }
// return storage info without adding mount points
$includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
@@ -597,10 +610,20 @@ class OC_Helper {
$ownerId = $storage->getOwner($path);
$ownerDisplayName = '';
$owner = \OC::$server->getUserManager()->get($ownerId);
- if($owner) {
+ if ($owner) {
$ownerDisplayName = $owner->getDisplayName();
}
+ $memcache->set($cacheKey, [
+ 'free' => $free,
+ 'used' => $used,
+ 'quota' => $quota,
+ 'total' => $total,
+ 'relative' => $relative,
+ 'owner' => $ownerId,
+ 'ownerDisplayName' => $ownerDisplayName,
+ ], 5 * 60);
+
return [
'free' => $free,
'used' => $used,
@@ -645,6 +668,7 @@ class OC_Helper {
/**
* Returns whether the config file is set manually to read-only
+ *
* @return bool
*/
public static function isReadOnlyConfigEnabled() {
diff --git a/lib/private/legacy/user.php b/lib/private/legacy/user.php
index ed0d14a1ab9..0a52be7565d 100644
--- a/lib/private/legacy/user.php
+++ b/lib/private/legacy/user.php
@@ -125,9 +125,16 @@ class OC_User {
* setup the configured backends in config.php
*/
public static function setupBackends() {
- OC_App::loadApps(array('prelogin'));
- $backends = \OC::$server->getSystemConfig()->getValue('user_backends', array());
+ OC_App::loadApps(['prelogin']);
+ $backends = \OC::$server->getSystemConfig()->getValue('user_backends', []);
+ if (isset($backends['default']) && !$backends['default']) {
+ // clear default backends
+ self::clearBackends();
+ }
foreach ($backends as $i => $config) {
+ if (!is_array($config)) {
+ continue;
+ }
$class = $config['class'];
$arguments = $config['arguments'];
if (class_exists($class)) {
diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php
index 55dc5ae7c15..5ef1130d361 100644
--- a/lib/private/legacy/util.php
+++ b/lib/private/legacy/util.php
@@ -1002,27 +1002,6 @@ class OC_Util {
}
/**
- * Check if it is allowed to remember login.
- *
- * @note Every app can set 'rememberlogin' to 'false' to disable the remember login feature
- *
- * @return bool
- */
- public static function rememberLoginAllowed() {
-
- $apps = OC_App::getEnabledApps();
-
- foreach ($apps as $app) {
- $appInfo = OC_App::getAppInfo($app);
- if (isset($appInfo['rememberlogin']) && $appInfo['rememberlogin'] === 'false') {
- return false;
- }
-
- }
- return true;
- }
-
- /**
* Check if the user is a subadmin, redirects to home if not
*
* @return null|boolean $groups where the current user is subadmin
@@ -1381,12 +1360,12 @@ class OC_Util {
}
/**
- * A human readable string is generated based on version, channel and build number
+ * A human readable string is generated based on version and build number
*
* @return string
*/
public static function getHumanVersion() {
- $version = OC_Util::getVersionString() . ' (' . OC_Util::getChannel() . ')';
+ $version = OC_Util::getVersionString();
$build = OC_Util::getBuild();
if (!empty($build) and OC_Util::getChannel() === 'daily') {
$version .= ' Build:' . $build;
diff --git a/lib/public/Activity/IManager.php b/lib/public/Activity/IManager.php
index 2fe38ddb8d8..f5b495807c5 100644
--- a/lib/public/Activity/IManager.php
+++ b/lib/public/Activity/IManager.php
@@ -64,6 +64,7 @@ interface IManager {
* - setSubject()
*
* @param IEvent $event
+ * @throws \BadMethodCallException if required values have not been set
* @since 8.2.0
*/
public function publish(IEvent $event);
diff --git a/lib/public/App/IAppManager.php b/lib/public/App/IAppManager.php
index 057a964ce0a..72c99777124 100644
--- a/lib/public/App/IAppManager.php
+++ b/lib/public/App/IAppManager.php
@@ -62,6 +62,15 @@ interface IAppManager {
public function enableApp($appId);
/**
+ * Whether a list of types contains a protected app type
+ *
+ * @param string[] $types
+ * @return bool
+ * @since 12.0.0
+ */
+ public function hasProtectedAppType($types);
+
+ /**
* Enable an app only for specific groups
*
* @param string $appId
diff --git a/lib/public/AppFramework/Db/Mapper.php b/lib/public/AppFramework/Db/Mapper.php
index aa3d9cdde37..611791a4364 100644
--- a/lib/public/AppFramework/Db/Mapper.php
+++ b/lib/public/AppFramework/Db/Mapper.php
@@ -28,7 +28,6 @@
namespace OCP\AppFramework\Db;
use OCP\IDBConnection;
-use OCP\IDb;
/**
@@ -229,11 +228,7 @@ abstract class Mapper {
* @since 7.0.0
*/
protected function execute($sql, array $params=[], $limit=null, $offset=null){
- if ($this->db instanceof IDb) {
- $query = $this->db->prepareQuery($sql, $limit, $offset);
- } else {
- $query = $this->db->prepare($sql, $limit, $offset);
- }
+ $query = $this->db->prepare($sql, $limit, $offset);
if ($this->isAssocArray($params)) {
foreach ($params as $key => $param) {
@@ -251,15 +246,6 @@ abstract class Mapper {
$result = $query->execute();
- // this is only for backwards compatibility reasons and can be removed
- // in owncloud 10. IDb returns a StatementWrapper from execute, PDO,
- // Doctrine and IDbConnection don't so this needs to be done in order
- // to stay backwards compatible for the things that rely on the
- // StatementWrapper being returned
- if ($result instanceof \OC_DB_StatementWrapper) {
- return $result;
- }
-
return $query;
}
diff --git a/lib/public/AppFramework/Http/Response.php b/lib/public/AppFramework/Http/Response.php
index 8591d6abc68..051e68f3144 100644
--- a/lib/public/AppFramework/Http/Response.php
+++ b/lib/public/AppFramework/Http/Response.php
@@ -43,11 +43,11 @@ use OCP\AppFramework\Http;
class Response {
/**
- * Headers - defaults to ['Cache-Control' => 'no-cache, must-revalidate']
+ * Headers - defaults to ['Cache-Control' => 'no-cache, no-store, must-revalidate']
* @var array
*/
private $headers = array(
- 'Cache-Control' => 'no-cache, must-revalidate'
+ 'Cache-Control' => 'no-cache, no-store, must-revalidate'
);
diff --git a/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php b/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php
new file mode 100644
index 00000000000..9f9e38103f7
--- /dev/null
+++ b/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Authentication\Exceptions;
+
+use Exception;
+
+/**
+ * @since 12
+ */
+class CredentialsUnavailableException extends Exception {
+
+}
diff --git a/lib/public/Authentication/LoginCredentials/ICredentials.php b/lib/public/Authentication/LoginCredentials/ICredentials.php
new file mode 100644
index 00000000000..c5ef9574398
--- /dev/null
+++ b/lib/public/Authentication/LoginCredentials/ICredentials.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Authentication\LoginCredentials;
+
+/**
+ * @since 12
+ */
+interface ICredentials {
+
+ /**
+ * Get the user UID
+ *
+ * @since 12
+ *
+ * @return string
+ */
+ public function getUID();
+
+ /**
+ * Get the login name the users used to login
+ *
+ * @since 12
+ *
+ * @return string
+ */
+ public function getLoginName();
+
+ /**
+ * Get the password
+ *
+ * @since 12
+ *
+ * @return string
+ */
+ public function getPassword();
+}
diff --git a/lib/public/Authentication/LoginCredentials/IStore.php b/lib/public/Authentication/LoginCredentials/IStore.php
new file mode 100644
index 00000000000..4787b16d982
--- /dev/null
+++ b/lib/public/Authentication/LoginCredentials/IStore.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Authentication\LoginCredentials;
+
+use OCP\Authentication\Exceptions\CredentialsUnavailableException;
+
+/**
+ * @since 12
+ */
+interface IStore {
+
+ /**
+ * Get login credentials of the currently logged in user
+ *
+ * @since 12
+ *
+ * @throws CredentialsUnavailableException
+ * @return ICredentials the login credentials of the current user
+ */
+ public function getLoginCredentials();
+
+}
diff --git a/lib/public/Authentication/TwoFactorAuth/TwoFactorException.php b/lib/public/Authentication/TwoFactorAuth/TwoFactorException.php
new file mode 100644
index 00000000000..76e728b6ab0
--- /dev/null
+++ b/lib/public/Authentication/TwoFactorAuth/TwoFactorException.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @author Cornelius Kölbel <cornelius.koelbel@netknights.it>
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @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/>
+ *
+ */
+
+namespace OCP\Authentication\TwoFactorAuth;
+
+use Exception;
+
+/**
+ * Two Factor Authentication failed
+ *
+ * It defines an Exception a 2FA app can
+ * throw in case of an error. The 2FA Controller will catch this exception and
+ * display this error.
+ *
+ * @since 12
+ */
+class TwoFactorException extends Exception {
+
+}
diff --git a/lib/public/DB/QueryBuilder/IExpressionBuilder.php b/lib/public/DB/QueryBuilder/IExpressionBuilder.php
index 8164c738ca5..c123875b803 100644
--- a/lib/public/DB/QueryBuilder/IExpressionBuilder.php
+++ b/lib/public/DB/QueryBuilder/IExpressionBuilder.php
@@ -305,6 +305,27 @@ interface IExpressionBuilder {
*/
public function notIn($x, $y, $type = null);
+
+ /**
+ * Creates a bitwise AND comparison
+ *
+ * @param string|ILiteral $x The field or value to check
+ * @param int $y Bitmap that must be set
+ * @return IQueryFunction
+ * @since 12.0.0
+ */
+ public function bitwiseAnd($x, $y);
+
+ /**
+ * Creates a bitwise OR comparison
+ *
+ * @param string|ILiteral $x The field or value to check
+ * @param int $y Bitmap that must be set
+ * @return IQueryFunction
+ * @since 12.0.0
+ */
+ public function bitwiseOr($x, $y);
+
/**
* Quotes a given input parameter.
*
diff --git a/lib/public/Encryption/Keys/IStorage.php b/lib/public/Encryption/Keys/IStorage.php
index e17de04316b..c96d1573b38 100644
--- a/lib/public/Encryption/Keys/IStorage.php
+++ b/lib/public/Encryption/Keys/IStorage.php
@@ -170,4 +170,14 @@ interface IStorage {
*/
public function copyKeys($source, $target);
+ /**
+ * backup keys of a given encryption module
+ *
+ * @param string $encryptionModuleId
+ * @param string $purpose
+ * @param string $uid
+ * @return bool
+ * @since 12.0.0
+ */
+ public function backupUserKeys($encryptionModuleId, $purpose, $uid);
}
diff --git a/lib/public/Files/Cache/IScanner.php b/lib/public/Files/Cache/IScanner.php
index 60282996232..8aa4dc04aa9 100644
--- a/lib/public/Files/Cache/IScanner.php
+++ b/lib/public/Files/Cache/IScanner.php
@@ -32,6 +32,7 @@ interface IScanner {
const SCAN_RECURSIVE = true;
const SCAN_SHALLOW = false;
+ const REUSE_NONE = 0;
const REUSE_ETAG = 1;
const REUSE_SIZE = 2;
diff --git a/lib/public/Files/Notify/IChange.php b/lib/public/Files/Notify/IChange.php
new file mode 100644
index 00000000000..1e6aaa8abe0
--- /dev/null
+++ b/lib/public/Files/Notify/IChange.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Files\Notify;
+
+/**
+ * Represents a detected change in the storage
+ *
+ * @since 12.0.0
+ */
+interface IChange {
+ const ADDED = 1;
+ const REMOVED = 2;
+ const MODIFIED = 3;
+ const RENAMED = 4;
+
+ /**
+ * Get the type of the change
+ *
+ * @return int IChange::ADDED, IChange::REMOVED, IChange::MODIFIED or IChange::RENAMED
+ *
+ * @since 12.0.0
+ */
+ public function getType();
+
+ /**
+ * Get the path of the file that was changed relative to the root of the storage
+ *
+ * Note, for rename changes this path is the old path for the file
+ *
+ * @return mixed
+ *
+ * @since 12.0.0
+ */
+ public function getPath();
+}
diff --git a/lib/public/Files/Notify/INotifyHandler.php b/lib/public/Files/Notify/INotifyHandler.php
new file mode 100644
index 00000000000..7e0e6a610d8
--- /dev/null
+++ b/lib/public/Files/Notify/INotifyHandler.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Files\Notify;
+
+/**
+ * Provides access to detected changes in the storage by either actively listening
+ * or getting the list of changes that happened in the background
+ *
+ * @since 12.0.0
+ */
+interface INotifyHandler {
+ /**
+ * Start listening for update notifications
+ *
+ * The provided callback will be called for every incoming notification with the following parameters
+ * - IChange|IRenameChange $change
+ *
+ * Note that this call is blocking and will not exit on it's own, to stop listening for notifications return `false` from the callback
+ *
+ * @param callable $callback
+ *
+ * @since 12.0.0
+ */
+ public function listen(callable $callback);
+
+ /**
+ * Get all changes detected since the start of the notify process or the last call to getChanges
+ *
+ * @return IChange[]
+ *
+ * @since 12.0.0
+ */
+ public function getChanges();
+
+ /**
+ * Stop listening for changes
+ *
+ * Note that any pending changes will be discarded
+ *
+ * @since 12.0.0
+ */
+ public function stop();
+}
diff --git a/lib/public/Files/Notify/IRenameChange.php b/lib/public/Files/Notify/IRenameChange.php
new file mode 100644
index 00000000000..c95499a7e74
--- /dev/null
+++ b/lib/public/Files/Notify/IRenameChange.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Files\Notify;
+
+/**
+ * Represents a detected rename change
+ *
+ * @since 12.0.0
+ */
+interface IRenameChange extends IChange {
+ /**
+ * Get the new path of the renamed file relative to the storage root
+ *
+ * @return string
+ *
+ * @since 12.0.0
+ */
+ public function getTargetPath();
+}
diff --git a/lib/public/Files/Storage/INotifyStorage.php b/lib/public/Files/Storage/INotifyStorage.php
index e99124abdfd..c6fdd44724f 100644
--- a/lib/public/Files/Storage/INotifyStorage.php
+++ b/lib/public/Files/Storage/INotifyStorage.php
@@ -23,6 +23,8 @@
namespace OCP\Files\Storage;
+use OCP\Files\Notify\INotifyHandler;
+
/**
* Storage backend that support active notifications
*
@@ -48,6 +50,17 @@ interface INotifyStorage {
* @param callable $callback
*
* @since 9.1.0
+ * @deprecated 12.0.0 use INotifyStorage::notify()->listen() instead
*/
public function listen($path, callable $callback);
+
+ /**
+ * Start the notification handler for this storage
+ *
+ * @param $path
+ * @return INotifyHandler
+ *
+ * @since 12.0.0
+ */
+ public function notify($path);
}
diff --git a/lib/public/Files/Storage/IStorage.php b/lib/public/Files/Storage/IStorage.php
index b806dc3b7d1..27b8f1d0697 100644
--- a/lib/public/Files/Storage/IStorage.php
+++ b/lib/public/Files/Storage/IStorage.php
@@ -383,7 +383,7 @@ interface IStorage {
public function verifyPath($path, $fileName);
/**
- * @param \OCP\Files\Storage $sourceStorage
+ * @param \OCP\Files\Storage|\OCP\Files\Storage\IStorage $sourceStorage
* @param string $sourceInternalPath
* @param string $targetInternalPath
* @return bool
@@ -392,7 +392,7 @@ interface IStorage {
public function copyFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath);
/**
- * @param \OCP\Files\Storage $sourceStorage
+ * @param \OCP\Files\Storage|\OCP\Files\Storage\IStorage $sourceStorage
* @param string $sourceInternalPath
* @param string $targetInternalPath
* @return bool
diff --git a/lib/public/GroupInterface.php b/lib/public/GroupInterface.php
index 6f456f51fd7..97837e50b16 100644
--- a/lib/public/GroupInterface.php
+++ b/lib/public/GroupInterface.php
@@ -41,6 +41,18 @@ namespace OCP;
interface GroupInterface {
/**
+ * actions that user backends can define
+ */
+ const CREATE_GROUP = 0x00000001;
+ const DELETE_GROUP = 0x00000010;
+ const ADD_TO_GROUP = 0x00000100;
+ const REMOVE_FROM_GOUP = 0x00001000; // oops
+ const REMOVE_FROM_GROUP = 0x00001000;
+ //OBSOLETE const GET_DISPLAYNAME = 0x00010000;
+ const COUNT_USERS = 0x00100000;
+ const GROUP_DETAILS = 0x01000000;
+
+ /**
* Check if backend implements actions
* @param int $actions bitwise-or'ed actions
* @return boolean
diff --git a/lib/public/IAppConfig.php b/lib/public/IAppConfig.php
index 01aca47ad81..4a92a224840 100644
--- a/lib/public/IAppConfig.php
+++ b/lib/public/IAppConfig.php
@@ -87,6 +87,15 @@ interface IAppConfig {
public function getValues($app, $key);
/**
+ * get all values of the app or and filters out sensitive data
+ *
+ * @param string $app
+ * @return array
+ * @since 12.0.0
+ */
+ public function getFilteredValues($app);
+
+ /**
* sets a value in the appconfig
* @param string $app app
* @param string $key key
diff --git a/lib/public/IDb.php b/lib/public/IDb.php
deleted file mode 100644
index bb04cf540fa..00000000000
--- a/lib/public/IDb.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bernhard Posselt <dev@bernhard-posselt.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- *
- * @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/>
- *
- */
-
-namespace OCP;
-
-
-/**
- * Small Facade for being able to inject the database connection for tests
- * @since 7.0.0 - extends IDBConnection was added in 8.1.0
- */
-interface IDb extends IDBConnection {
-
-
- /**
- * Used to abstract the owncloud database access away
- * @param string $sql the sql query with ? placeholder for params
- * @param int $limit the maximum number of rows
- * @param int $offset from which row we want to start
- * @return \OC_DB_StatementWrapper prepared SQL query
- * @since 7.0.0
- */
- public function prepareQuery($sql, $limit=null, $offset=null);
-
-
- /**
- * Used to get the id of the just inserted element
- * @param string $tableName the name of the table where we inserted the item
- * @return int the id of the inserted element
- * @since 7.0.0
- */
- public function getInsertId($tableName);
-
-
-}
diff --git a/lib/public/IGroup.php b/lib/public/IGroup.php
index d5fcbcc5cd9..0cc62e9a8ed 100644
--- a/lib/public/IGroup.php
+++ b/lib/public/IGroup.php
@@ -4,6 +4,7 @@
*
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Vincent Petry <PVince81@owncloud.com>
*
* @license AGPL-3.0
*
@@ -37,6 +38,14 @@ interface IGroup {
public function getGID();
/**
+ * Returns the group display name
+ *
+ * @return string
+ * @since 9.2
+ */
+ public function getDisplayName();
+
+ /**
* get all users in the group
*
* @return \OCP\IUser[]
diff --git a/lib/public/IPreview.php b/lib/public/IPreview.php
index a1a03fee3e1..207539b1170 100644
--- a/lib/public/IPreview.php
+++ b/lib/public/IPreview.php
@@ -86,7 +86,7 @@ interface IPreview {
* @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly
* @return \OCP\IImage
* @since 6.0.0
- * @deprecated 9.2.0 Use getPreview
+ * @deprecated 11 Use getPreview
*/
public function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false);
diff --git a/lib/public/IServerContainer.php b/lib/public/IServerContainer.php
index 354e39bd8f9..87628be01f7 100644
--- a/lib/public/IServerContainer.php
+++ b/lib/public/IServerContainer.php
@@ -192,14 +192,6 @@ interface IServerContainer {
public function getCredentialsManager();
/**
- * Returns an instance of the db facade
- * @deprecated 8.1.0 use getDatabaseConnection, will be removed in ownCloud 10
- * @return \OCP\IDb
- * @since 7.0.0
- */
- public function getDb();
-
- /**
* Returns the app config manager
*
* @return \OCP\IAppConfig
diff --git a/lib/public/RichObjectStrings/Definitions.php b/lib/public/RichObjectStrings/Definitions.php
index fbde439c47a..f1208ae0f2c 100644
--- a/lib/public/RichObjectStrings/Definitions.php
+++ b/lib/public/RichObjectStrings/Definitions.php
@@ -152,6 +152,31 @@ class Definitions {
],
],
],
+ 'call' => [
+ 'author' => 'Nextcloud',
+ 'app' => 'spreed',
+ 'since' => '11.0.2',
+ 'parameters' => [
+ 'id' => [
+ 'since' => '11.0.2',
+ 'required' => true,
+ 'description' => 'The id used to identify the call on the instance',
+ 'example' => '42',
+ ],
+ 'name' => [
+ 'since' => '11.0.2',
+ 'required' => true,
+ 'description' => 'The display name of the call which should be used in the visual representation',
+ 'example' => 'Company call',
+ ],
+ 'call-type' => [
+ 'since' => '11.0.2',
+ 'required' => true,
+ 'description' => 'The type of the call: one2one, group or public',
+ 'example' => 'one2one',
+ ],
+ ],
+ ],
'email' => [
'author' => 'Nextcloud',
'app' => 'sharebymail',
@@ -191,7 +216,7 @@ class Definitions {
'path' => [
'since' => '11.0.0',
'required' => true,
- 'description' => 'The full path of the file for the user',
+ 'description' => 'The full path of the file for the user, should not start with a slash',
'example' => 'path/to/file.txt',
],
'link' => [
diff --git a/lib/public/Settings/IIconSection.php b/lib/public/Settings/IIconSection.php
new file mode 100644
index 00000000000..089b9b094e9
--- /dev/null
+++ b/lib/public/Settings/IIconSection.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017, Joas Schilling <coding@schilljs.com>
+ *
+ * @author 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 OCP\Settings;
+
+/**
+ * @since 12
+ */
+interface IIconSection extends ISection {
+ /**
+ * returns the relative path to an 16*16 icon describing the section.
+ * e.g. '/core/img/places/files.svg'
+ *
+ * @returns string
+ * @since 12
+ */
+ public function getIcon();
+}
diff --git a/lib/public/Settings/ISection.php b/lib/public/Settings/ISection.php
index 5edf5de0ca4..3c08b74bdc9 100644
--- a/lib/public/Settings/ISection.php
+++ b/lib/public/Settings/ISection.php
@@ -24,6 +24,7 @@
namespace OCP\Settings;
/**
+ * @deprecated 12 Use IIconSection instead
* @since 9.1
*/
interface ISection {
diff --git a/ocs/v1.php b/ocs/v1.php
index 5aec27ad981..79e74f20cdf 100644
--- a/ocs/v1.php
+++ b/ocs/v1.php
@@ -65,8 +65,10 @@ try {
} catch (MethodNotAllowedException $e) {
OC_API::setContentType();
OC_Response::setStatus(405);
-} catch (\OC\OCS\Exception $ex) {
+ exit();
+} catch (Exception $ex) {
OC_API::respond($ex->getResult(), OC_API::requestedFormat());
+ exit();
}
/*
diff --git a/resources/config/ca-bundle.crt b/resources/config/ca-bundle.crt
index aee4163d274..cce0e5835ee 100644
--- a/resources/config/ca-bundle.crt
+++ b/resources/config/ca-bundle.crt
@@ -1,20 +1,20 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Wed Sep 7 08:44:30 2016
+## Certificate data from Mozilla as of: Wed Nov 2 04:12:05 2016 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
## file (certdata.txt). This file can be found in the mozilla source tree:
-## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
+## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
##
## It contains the certificates in PEM format and therefore
## can be directly used with curl / libcurl / php_curl, or with
## an Apache+mod_ssl webserver for SSL client authentication.
## Just configure this file as the SSLCACertificateFile.
##
-## Conversion done with mk-ca-bundle.pl version 1.26.
-## SHA256: 01bbf1ecdd693f554ff4dcbe15880b3e6c33188a956c15ff845d313ca69cfeb8
+## Conversion done with mk-ca-bundle.pl version 1.27.
+## SHA256: 17e2a90c8a5cfd6a675b3475d3d467e1ab1fe0d5397e907b08206182389caa08
##
@@ -1764,7 +1764,7 @@ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
-----END CERTIFICATE-----
NetLock Arany (Class Gold) Főtanúsítvány
-============================================
+========================================
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
@@ -2280,7 +2280,7 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-----END CERTIFICATE-----
Certinomis - Autorité Racine
-=============================
+============================
-----BEGIN CERTIFICATE-----
MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
@@ -3675,7 +3675,7 @@ ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
-----END CERTIFICATE-----
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
-=========================================================
+====================================================
-----BEGIN CERTIFICATE-----
MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
@@ -3699,7 +3699,7 @@ B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
-----END CERTIFICATE-----
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
-=========================================================
+====================================================
-----BEGIN CERTIFICATE-----
MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
@@ -4034,3 +4034,33 @@ BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
-----END CERTIFICATE-----
+
+ISRG Root X1
+============
+-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE
+BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD
+EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG
+EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
+DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r
+Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1
+3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K
+b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN
+Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ
+4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf
+1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu
+hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH
+usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r
+OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G
+A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY
+9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV
+0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt
+hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw
+TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
+e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA
+JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD
+YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
+JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
+m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+-----END CERTIFICATE-----
diff --git a/resources/config/mimetypemapping.dist.json b/resources/config/mimetypemapping.dist.json
index a49a04e43f2..99638b6c02d 100644
--- a/resources/config/mimetypemapping.dist.json
+++ b/resources/config/mimetypemapping.dist.json
@@ -78,6 +78,7 @@
"key": ["application/x-iwork-keynote-sffkey"],
"keynote": ["application/x-iwork-keynote-sffkey"],
"kra": ["application/x-krita"],
+ "ldif": ["text/x-ldif"],
"lwp": ["application/vnd.lotus-wordpro"],
"m2t": ["video/mp2t"],
"m4a": ["audio/mp4"],
@@ -142,6 +143,7 @@
"rss": ["application/rss+xml"],
"rtf": ["text/rtf"],
"rw2": ["image/x-dcraw"],
+ "schema": ["text/plain"],
"sgf": ["application/sgf"],
"sh-lib": ["text/x-shellscript"],
"sh": ["text/x-shellscript"],
diff --git a/settings/Application.php b/settings/Application.php
index d907cd666fb..44747c2f681 100644
--- a/settings/Application.php
+++ b/settings/Application.php
@@ -106,7 +106,8 @@ class Application extends App {
return new CategoryFetcher(
$server->getAppDataDir('appstore'),
$server->getHTTPClientService(),
- $server->query(TimeFactory::class)
+ $server->query(TimeFactory::class),
+ $server->getConfig()
);
});
}
diff --git a/settings/Controller/AdminSettingsController.php b/settings/Controller/AdminSettingsController.php
index ef70caf5690..4bc986e708e 100644
--- a/settings/Controller/AdminSettingsController.php
+++ b/settings/Controller/AdminSettingsController.php
@@ -28,7 +28,9 @@ use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\INavigationManager;
use OCP\IRequest;
+use OCP\Settings\IIconSection;
use OCP\Settings\IManager as ISettingsManager;
+use OCP\Settings\ISection;
use OCP\Template;
/**
@@ -133,10 +135,16 @@ class AdminSettingsController extends Controller {
/** @var \OC\Settings\Section[] $prioritizedSections */
foreach($sections as $prioritizedSections) {
foreach ($prioritizedSections as $section) {
+ $icon = '';
+ if ($section instanceof IIconSection) {
+ $icon = $section->getIcon();
+ }
+
$templateParameters[] = [
'anchor' => $section->getID(),
'section-name' => $section->getName(),
'active' => $section->getID() === $currentSection,
+ 'icon' => $icon,
];
}
}
diff --git a/settings/Controller/UsersController.php b/settings/Controller/UsersController.php
index 28b8d2648d9..43a38432499 100644
--- a/settings/Controller/UsersController.php
+++ b/settings/Controller/UsersController.php
@@ -346,13 +346,12 @@ class UsersController extends Controller {
}
if (empty($groups)) {
- $groups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($currentUser);
- // New class returns IGroup[] so convert back
- $gids = [];
- foreach ($groups as $group) {
- $gids[] = $group->getGID();
- }
- $groups = $gids;
+ return new DataResponse(
+ array(
+ 'message' => $this->l10n->t('No valid group selected'),
+ ),
+ Http::STATUS_FORBIDDEN
+ );
}
}
@@ -380,7 +379,7 @@ class UsersController extends Controller {
);
}
- if($user instanceof User) {
+ if($user instanceof IUser) {
if($groups !== null) {
foreach($groups as $groupName) {
$group = $this->groupManager->get($groupName);
diff --git a/settings/ajax/togglegroups.php b/settings/ajax/togglegroups.php
deleted file mode 100644
index b9958bef0c9..00000000000
--- a/settings/ajax/togglegroups.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bart Visscher <bartv@thisnet.nl>
- * @author Christopher Schäpers <kondou@ts.unde.re>
- * @author Georg Ehrke <georg@owncloud.com>
- * @author Jakob Sack <mail@jakobsack.de>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @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/>
- *
- */
-OC_JSON::checkSubAdminUser();
-OCP\JSON::callCheck();
-
-$lastConfirm = (int) \OC::$server->getSession()->get('last-password-confirm');
-if ($lastConfirm < (time() - 30 * 60 + 15)) { // allow 15 seconds delay
- $l = \OC::$server->getL10N('core');
- OC_JSON::error(array( 'data' => array( 'message' => $l->t('Password confirmation is required'))));
- exit();
-}
-
-$success = true;
-$username = (string)$_POST['username'];
-$group = (string)$_POST['group'];
-
-if($username === OC_User::getUser() && $group === "admin" && OC_User::isAdminUser($username)) {
- $l = \OC::$server->getL10N('core');
- OC_JSON::error(array( 'data' => array( 'message' => $l->t('Admins can\'t remove themself from the admin group'))));
- exit();
-}
-
-$isUserAccessible = false;
-$isGroupAccessible = false;
-$currentUserObject = \OC::$server->getUserSession()->getUser();
-$targetUserObject = \OC::$server->getUserManager()->get($username);
-$targetGroupObject = \OC::$server->getGroupManager()->get($group);
-if($targetUserObject !== null && $currentUserObject !== null && $targetGroupObject !== null) {
- $isUserAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isUserAccessible($currentUserObject, $targetUserObject);
- $isGroupAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isSubAdminofGroup($currentUserObject, $targetGroupObject);
-}
-
-if(!OC_User::isAdminUser(OC_User::getUser())
- && (!$isUserAccessible
- || !$isGroupAccessible)) {
- $l = \OC::$server->getL10N('core');
- OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
- exit();
-}
-
-if(!OC_Group::groupExists($group)) {
- OC_Group::createGroup($group);
-}
-
-$l = \OC::$server->getL10N('settings');
-
-$error = $l->t("Unable to add user to group %s", $group);
-$action = "add";
-
-// Toggle group
-if( OC_Group::inGroup( $username, $group )) {
- $action = "remove";
- $error = $l->t("Unable to remove user from group %s", $group);
- $success = OC_Group::removeFromGroup( $username, $group );
- $usersInGroup=OC_Group::usersInGroup($group);
-}
-else{
- $success = OC_Group::addToGroup( $username, $group );
-}
-
-// Return Success story
-if( $success ) {
- OC_JSON::success(array("data" => array( "username" => $username, "action" => $action, "groupname" => $group )));
-}
-else{
- OC_JSON::error(array("data" => array( "message" => $error )));
-}
diff --git a/settings/css/settings.css b/settings/css/settings.css
index 46394d3f03d..c0c79ca65ef 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -7,6 +7,26 @@ input#openid, input#webdav { width:20em; }
/* PERSONAL */
+/* icons for sidebar */
+.nav-icon-personal-settings {
+ background-image: url('../img/personal.svg?v=1');
+}
+.nav-icon-sessions {
+ background-image: url('../img/toggle-filelist.svg?v=1');
+}
+.nav-icon-apppasswords {
+ background-image: url('../img/password.svg?v=1');
+}
+.nav-icon-clientsbox {
+ background-image: url('../img/change.svg?v=1');
+}
+.nav-icon-federated-cloud {
+ background-image: url('../img/share.svg?v=1');
+}
+.nav-icon-second-factor-backup-codes {
+ background-image: url('../img/password.svg?v=1');
+}
+
#avatarform {
width: 160px;
padding-right: 0;
@@ -104,7 +124,7 @@ input#openid, input#webdav { width:20em; }
}
#personal-settings-container > div > form span[class^="icon-checkmark"] {
position: absolute;
- left: 239px;
+ left: 228px;
top: 82px;
pointer-events: none;
}
@@ -399,7 +419,7 @@ table.grid th, table.grid td {
font-weight: normal;
}
td.name, td.password { padding-left:.8em; }
-td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; }
+td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; vertical-align: middle;}
td.password, td.quota, td.displayName { width:12em; cursor:pointer; }
td.password>span, td.quota>span, rd.displayName>span { margin-right: 1.2em; color: #C7C7C7; }
span.usersLastLoginTooltip { white-space: nowrap; }
@@ -492,6 +512,12 @@ input.userFilter {width: 200px;}
/* APPS */
+#app-content > svg.app-filter {
+ float: left;
+ height: 0;
+ width: 0;
+}
+
.appinfo { margin: 1em 40px; }
#app-navigation .appwarning {
background: #fcc;
@@ -542,6 +568,10 @@ span.version {
flex-wrap: wrap;
align-content: flex-start;
}
+#apps-list.hidden {
+ display: none;
+}
+
#apps-list .section {
position: relative;
flex: 0 0 auto;
@@ -551,6 +581,26 @@ span.version {
flex-basis: 90%;
}
+#apps-list .app-description p {
+ margin: 10px 0;
+}
+#apps-list .app-description ul {
+ list-style: disc;
+}
+#apps-list .app-description ol {
+ list-style: decimal;
+}
+#apps-list .app-description > ul,
+#apps-list .app-description > ol {
+ margin-left: 19px;
+}
+#apps-list .app-description ol ol,
+#apps-list .app-description ol ul,
+#apps-list .app-description ul ol,
+#apps-list .app-description ul ul {
+ padding-left: 15px;
+}
+
@media (min-width: 1601px) {
#apps-list .section {
width: 22%;
@@ -634,9 +684,6 @@ form.section {
.app-description {
clear: both;
}
-.app-description pre {
- white-space: pre-line;
-}
#apps-list .groups-enable {
margin-top: 8px;
@@ -686,6 +733,17 @@ table.grid td.date{
}
/* ADMIN */
+
+/* Navigation icons */
+#app-navigation img {
+ margin-bottom: -3px;
+ margin-right: 6px;
+ width: 16px;
+}
+#app-navigation li span.no-icon {
+ padding-left: 32px;
+}
+
#security-warning li {
list-style: initial;
margin: 10px 0;
@@ -787,9 +845,9 @@ span.indeterminate {
/* PASSWORD */
#passwordform .strengthify-wrapper {
position: absolute;
- left: 186px;
- width: 131px;
- margin-top: -7px;
+ left: 0;
+ width: 130px;
+ margin-top: -6px;
}
/* OPERA hack for strengthify*/
diff --git a/settings/img/change.svg b/settings/img/change.svg
new file mode 100644
index 00000000000..cbc5d982b30
--- /dev/null
+++ b/settings/img/change.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1">
+ <path d="m7.9375 0c-3.1175 0.023214-6.0756 1.876-7.3438 4.9375l2.7812 1.1563c1.0568-2.5513 3.98-3.7756 6.5312-2.7188 0.8628 0.3573 1.5738 0.9274 2.0938 1.625l-2 2h6v-6l-1.875 1.875c-0.802-0.9616-1.825-1.7688-3.063-2.2812-1.02-0.4227-2.0853-0.60149-3.1245-0.59375z"/>
+ <path d="m0 9.5v6l2.0938-2.094c0.7676 0.843 1.7205 1.535 2.8437 2 4.082 1.691 8.7775-0.262 10.468-4.344l-2.781-1.1558c-1.057 2.5508-3.98 3.7758-6.5312 2.7188-0.7435-0.308-1.3509-0.805-1.8438-1.375l1.75-1.75h-6z"/>
+</svg>
diff --git a/settings/img/password.svg b/settings/img/password.svg
new file mode 100644
index 00000000000..3d161917f6e
--- /dev/null
+++ b/settings/img/password.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 71 100"><path d="M35.5 6.25c-13.807 0-25 11.193-25 25v12.5H4.25V87.5h62.5V43.75H60.5v-12.5c0-13.807-11.194-25-25-25zm0 12.5c6.904 0 12.5 5.596 12.5 12.5v12.5H23v-12.5c0-6.904 5.596-12.5 12.5-12.5z"/></svg> \ No newline at end of file
diff --git a/settings/img/share.svg b/settings/img/share.svg
new file mode 100644
index 00000000000..68f2100e490
--- /dev/null
+++ b/settings/img/share.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16"><path d="M12.228 1a2.457 2.457 0 0 0-2.46 2.454c0 .075.01.15.016.224L5.05 6.092a2.445 2.445 0 0 0-1.596-.586A2.453 2.453 0 0 0 1 7.96a2.453 2.453 0 0 0 2.454 2.455 2.45 2.45 0 0 0 1.46-.477l4.865 2.474c-.004.044-.01.09-.01.134a2.457 2.457 0 1 0 .804-1.818l-4.696-2.4c.02-.123.035-.25.035-.378 0-.072-.01-.144-.015-.214l4.74-2.414A2.457 2.457 0 1 0 12.228.99z"/></svg> \ No newline at end of file
diff --git a/settings/img/toggle-filelist.svg b/settings/img/toggle-filelist.svg
new file mode 100644
index 00000000000..47f019057ea
--- /dev/null
+++ b/settings/img/toggle-filelist.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16" version="1"><rect rx=".5" ry=".5" height="4" width="4" y="1" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="2" x="6"/><rect rx=".5" ry=".5" height="4" width="4" y="6" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="7" x="6"/><rect rx=".5" ry=".5" height="4" width="4" y="11" x="1"/><rect rx=".5" ry=".5" height="1" width="9" y="12" x="6"/></svg> \ No newline at end of file
diff --git a/settings/js/apps.js b/settings/js/apps.js
index de35cd53672..1538e71a491 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -19,6 +19,8 @@ Handlebars.registerHelper('level', function() {
OC.Settings = OC.Settings || {};
OC.Settings.Apps = OC.Settings.Apps || {
+ markedOptions: {},
+
setupGroupsSelect: function($elements) {
OC.Settings.setupGroupsSelect($elements, {
placeholder: t('core', 'All')
@@ -186,6 +188,25 @@ OC.Settings.Apps = OC.Settings.Apps || {
app.author = app.author['@value'];
}
+ // Parse markdown in app description
+ app.description = DOMPurify.sanitize(
+ marked(app.description.trim(), OC.Settings.Apps.markedOptions),
+ {
+ SAFE_FOR_JQUERY: true,
+ ALLOWED_TAGS: [
+ 'strong',
+ 'p',
+ 'a',
+ 'ul',
+ 'ol',
+ 'li',
+ 'em',
+ 'del',
+ 'blockquote'
+ ]
+ }
+ );
+
var html = template(app);
if (selector) {
selector.html(html);
@@ -271,7 +292,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
OC.Settings.Apps.hideErrorMessage(appId);
groups = groups || [];
var appItem = $('div#app-'+appId+'');
- element.val(t('settings','Please wait....'));
+ element.val(t('settings','Enabling app …'));
if(active && !groups.length) {
$.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appId},function(result) {
if(!result || result.status !== 'success') {
@@ -633,6 +654,50 @@ OC.Settings.Apps = OC.Settings.Apps || {
* Initializes the apps list
*/
initialize: function($el) {
+
+ var renderer = new marked.Renderer();
+ renderer.link = function(href, title, text) {
+ try {
+ var prot = decodeURIComponent(unescape(href))
+ .replace(/[^\w:]/g, '')
+ .toLowerCase();
+ } catch (e) {
+ return '';
+ }
+
+ if (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {
+ return '';
+ }
+
+ var out = '<a href="' + href + '" rel="noreferrer noopener"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += '>' + text + '</a>';
+ return out;
+ };
+ renderer.image = function(href, title, text) {
+ if (text) {
+ return text;
+ }
+ return title;
+ };
+ renderer.blockquote = function(quote) {
+ return quote;
+ };
+
+ OC.Settings.Apps.markedOptions = {
+ renderer: renderer,
+ gfm: false,
+ highlight: false,
+ tables: false,
+ breaks: false,
+ pedantic: false,
+ sanitize: true,
+ smartLists: true,
+ smartypants: false
+ };
+
OC.Plugins.register('OCA.Search', OC.Settings.Apps.Search);
OC.Settings.Apps.loadCategories();
OC.Util.History.addOnPopStateHandler(_.bind(this._onPopState, this));
diff --git a/settings/js/federationscopemenu.js b/settings/js/federationscopemenu.js
index 0862556a2c3..872f59c5de8 100644
--- a/settings/js/federationscopemenu.js
+++ b/settings/js/federationscopemenu.js
@@ -37,7 +37,7 @@
*/
var FederationScopeMenu = OC.Backbone.View.extend({
tagName: 'div',
- className: 'federationScopeMenu popovermenu bubble hidden open menu',
+ className: 'federationScopeMenu popovermenu bubble hidden menu',
field: undefined,
_scopes: undefined,
diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js
index cfe01c17530..aac1609bce7 100644
--- a/settings/js/users/groups.js
+++ b/settings/js/users/groups.js
@@ -225,7 +225,9 @@ GroupList = {
toggleAddGroup: function (event) {
if (GroupList.isAddGroupButtonVisible()) {
- event.stopPropagation();
+ if (event) {
+ event.stopPropagation();
+ }
$('#newgroup-form').show();
$('#newgroup-init').hide();
$('#newgroupname').focus();
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index 0e3067db7c7..3cf7b5e810a 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -420,42 +420,63 @@ var UserList = {
var $element = $(element);
- var checkHandler = null;
+ var addUserToGroup = null,
+ removeUserFromGroup = null;
if(user) { // Only if in a user row, and not the #newusergroups select
- checkHandler = function (group) {
- if (user === OC.currentUser && group === 'admin') {
+ var handleUserGroupMembership = function (group, add) {
+ if (user === OC.getCurrentUser().uid && group === 'admin') {
return false;
}
if (!OC.isUserAdmin() && checked.length === 1 && checked[0] === group) {
return false;
}
- $.post(
- OC.filePath('settings', 'ajax', 'togglegroups.php'),
- {
- username: user,
- group: group
+
+ if (add && OC.isUserAdmin() && UserList.availableGroups.indexOf(group) === -1) {
+ GroupList.createGroup(group);
+ if (UserList.availableGroups.indexOf(group) === -1) {
+ UserList.availableGroups.push(group);
+ }
+ }
+
+ $.ajax({
+ url: OC.linkToOCS('cloud/users/' + user , 2) + 'groups',
+ data: {
+ groupid: group
},
- function (response) {
- if (response.status === 'success') {
- GroupList.update();
- var groupName = response.data.groupname;
- if (UserList.availableGroups.indexOf(groupName) === -1 &&
- response.data.action === 'add'
- ) {
- UserList.availableGroups.push(groupName);
- }
+ type: add ? 'POST' : 'DELETE',
+ beforeSend: function (request) {
+ request.setRequestHeader('Accept', 'application/json');
+ },
+ success: function() {
+ GroupList.update();
+ if (add && UserList.availableGroups.indexOf(group) === -1) {
+ UserList.availableGroups.push(group);
+ }
- if (response.data.action === 'add') {
- GroupList.incGroupCount(groupName);
- } else {
- GroupList.decGroupCount(groupName);
- }
+ if (add) {
+ GroupList.incGroupCount(group);
+ } else {
+ GroupList.decGroupCount(group);
}
- if (response.data.message) {
- OC.Notification.show(response.data.message);
+ },
+ error: function() {
+ if (add) {
+ OC.Notification.show(t('settings', 'Unable to add user to group {group}', {
+ group: group
+ }));
+ } else {
+ OC.Notification.show(t('settings', 'Unable to remove user from group {group}', {
+ group: group
+ }));
}
}
- );
+ });
+ };
+ addUserToGroup = function (group) {
+ return handleUserGroupMembership(group, true);
+ };
+ removeUserFromGroup = function (group) {
+ return handleUserGroupMembership(group, false);
};
}
var addGroup = function (select, group) {
@@ -473,8 +494,8 @@ var UserList = {
createText: label,
selectedFirst: true,
checked: checked,
- oncheck: checkHandler,
- onuncheck: checkHandler,
+ oncheck: addUserToGroup,
+ onuncheck: removeUserFromGroup,
minWidth: 100
});
},
@@ -704,9 +725,9 @@ $(document).ready(function () {
blurFunction = _.bind(blurFunction, $input);
if(isRestoreDisabled) {
$tr.addClass('row-warning');
- // add tipsy if the password change could cause data loss - no recovery enabled
- $input.tipsy({gravity:'s'});
+ // add tooltip if the password change could cause data loss - no recovery enabled
$input.attr('title', t('settings', 'Changing the password will result in data loss, because data recovery is not available for this user'));
+ $input.tooltip({placement:'bottom'});
}
$td.find('img').hide();
$td.children('span').replaceWith($input);
diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js
index f9a316a51ab..7567276456c 100644
--- a/settings/l10n/ar.js
+++ b/settings/l10n/ar.js
@@ -15,13 +15,9 @@ OC.L10N.register(
"Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
"Your full name has been changed." : "اسمك الكامل تم تغييره.",
"Email saved" : "تم حفظ البريد الإلكتروني",
- "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين",
- "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s",
- "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s",
"Couldn't update app." : "تعذر تحديث التطبيق.",
"Sending..." : "جاري الارسال ...",
"All" : "الكل",
- "Please wait...." : "الرجاء الانتظار ...",
"Error while disabling app" : "خطا عند تعطيل البرنامج",
"Disable" : "إيقاف",
"Enable" : "تفعيل",
@@ -66,7 +62,6 @@ OC.L10N.register(
"days" : "أيام",
"Allow resharing" : "السماح بإعادة المشاركة ",
"Documentation:" : "التوثيق",
- "Uninstall App" : "أزالة تطبيق",
"Valid until" : "صالح حتى",
"Forum" : "منتدى",
"Profile picture" : "صورة الملف الشخصي",
@@ -97,7 +92,11 @@ OC.L10N.register(
"set new password" : "اعداد كلمة مرور جديدة",
"Default" : "افتراضي",
"Language changed" : "تم تغيير اللغة",
+ "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين",
+ "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s",
+ "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
+ "Please wait...." : "الرجاء الانتظار ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
"Info, warnings, errors and fatal issues" : "معلومات , تحذيرات , اخطاء , مشاكل فادحة ",
"Warnings, errors and fatal issues" : "تحذيرات , اخطاء , مشاكل فادحة ",
@@ -109,6 +108,7 @@ OC.L10N.register(
"Less" : "أقل",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "قاعدة البيانات المستخدمة هي SQLite. ننصح باستخدام قاعدة بيانات أخرى للحصول على أداء افضل.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "استخدام SQLite غير مناسب خاصتا اذا تم استخدام برنامج المزامنة على الجهاز الشخصي.",
+ "Uninstall App" : "أزالة تطبيق",
"Group" : "مجموعة"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json
index 913ee8bdc91..a44eebfbfa8 100644
--- a/settings/l10n/ar.json
+++ b/settings/l10n/ar.json
@@ -13,13 +13,9 @@
"Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل",
"Your full name has been changed." : "اسمك الكامل تم تغييره.",
"Email saved" : "تم حفظ البريد الإلكتروني",
- "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين",
- "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s",
- "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s",
"Couldn't update app." : "تعذر تحديث التطبيق.",
"Sending..." : "جاري الارسال ...",
"All" : "الكل",
- "Please wait...." : "الرجاء الانتظار ...",
"Error while disabling app" : "خطا عند تعطيل البرنامج",
"Disable" : "إيقاف",
"Enable" : "تفعيل",
@@ -64,7 +60,6 @@
"days" : "أيام",
"Allow resharing" : "السماح بإعادة المشاركة ",
"Documentation:" : "التوثيق",
- "Uninstall App" : "أزالة تطبيق",
"Valid until" : "صالح حتى",
"Forum" : "منتدى",
"Profile picture" : "صورة الملف الشخصي",
@@ -95,7 +90,11 @@
"set new password" : "اعداد كلمة مرور جديدة",
"Default" : "افتراضي",
"Language changed" : "تم تغيير اللغة",
+ "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين",
+ "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s",
+ "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
+ "Please wait...." : "الرجاء الانتظار ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
"Info, warnings, errors and fatal issues" : "معلومات , تحذيرات , اخطاء , مشاكل فادحة ",
"Warnings, errors and fatal issues" : "تحذيرات , اخطاء , مشاكل فادحة ",
@@ -107,6 +106,7 @@
"Less" : "أقل",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "قاعدة البيانات المستخدمة هي SQLite. ننصح باستخدام قاعدة بيانات أخرى للحصول على أداء افضل.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "استخدام SQLite غير مناسب خاصتا اذا تم استخدام برنامج المزامنة على الجهاز الشخصي.",
+ "Uninstall App" : "أزالة تطبيق",
"Group" : "مجموعة"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
} \ No newline at end of file
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 6a169af7467..5c0a54c4083 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -18,14 +18,10 @@ OC.L10N.register(
"Your full name has been changed." : "Camudóse'l nome completu.",
"Email saved" : "Corréu-e guardáu",
"Couldn't remove app." : "Nun pudo desaniciase l'aplicación.",
- "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador",
- "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s",
- "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s",
"Couldn't update app." : "Nun pudo anovase l'aplicación.",
"Add trusted domain" : "Amestar dominiu de confianza",
"Sending..." : "Unviando...",
"All" : "Toos",
- "Please wait...." : "Espera, por favor....",
"Error while disabling app" : "Fallu mientres se desactivaba l'aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -99,7 +95,6 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos van poder siguir recibiendo conteníos compartíos, pero nun van poder anicialos",
"Documentation:" : "Documentación:",
"Enable only for specific groups" : "Habilitar namái pa grupos específicos",
- "Uninstall App" : "Desinstalar aplicación",
"Cheers!" : "¡Salú!",
"Forum" : "Foru",
"Profile picture" : "Semeya de perfil",
@@ -133,7 +128,11 @@ OC.L10N.register(
"set new password" : "afitar nueva contraseña",
"Default" : "Predetermináu",
"Language changed" : "Camudóse la llingua",
+ "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador",
+ "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s",
+ "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?",
+ "Please wait...." : "Espera, por favor....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Too (Información, Avisos, Fallos, debug y problemes fatales)",
"Info, warnings, errors and fatal issues" : "Información, Avisos, Fallos y problemes fatales",
"Warnings, errors and fatal issues" : "Avisos, fallos y problemes fatales",
@@ -143,8 +142,7 @@ OC.L10N.register(
"More" : "Más",
"Less" : "Menos",
"Allow users to send mail notification for shared files" : "Permitir a los usuarios unviar mensaxes de notificación pa ficheros compartíos",
- "Group" : "Grupu",
- "External Storage" : "Almacenamientu esternu",
- "Updates" : "Anovamientos"
+ "Uninstall App" : "Desinstalar aplicación",
+ "Group" : "Grupu"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index 3a703d0ef84..847b3822dc3 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -16,14 +16,10 @@
"Your full name has been changed." : "Camudóse'l nome completu.",
"Email saved" : "Corréu-e guardáu",
"Couldn't remove app." : "Nun pudo desaniciase l'aplicación.",
- "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador",
- "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s",
- "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s",
"Couldn't update app." : "Nun pudo anovase l'aplicación.",
"Add trusted domain" : "Amestar dominiu de confianza",
"Sending..." : "Unviando...",
"All" : "Toos",
- "Please wait...." : "Espera, por favor....",
"Error while disabling app" : "Fallu mientres se desactivaba l'aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -97,7 +93,6 @@
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos van poder siguir recibiendo conteníos compartíos, pero nun van poder anicialos",
"Documentation:" : "Documentación:",
"Enable only for specific groups" : "Habilitar namái pa grupos específicos",
- "Uninstall App" : "Desinstalar aplicación",
"Cheers!" : "¡Salú!",
"Forum" : "Foru",
"Profile picture" : "Semeya de perfil",
@@ -131,7 +126,11 @@
"set new password" : "afitar nueva contraseña",
"Default" : "Predetermináu",
"Language changed" : "Camudóse la llingua",
+ "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador",
+ "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s",
+ "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?",
+ "Please wait...." : "Espera, por favor....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Too (Información, Avisos, Fallos, debug y problemes fatales)",
"Info, warnings, errors and fatal issues" : "Información, Avisos, Fallos y problemes fatales",
"Warnings, errors and fatal issues" : "Avisos, fallos y problemes fatales",
@@ -141,8 +140,7 @@
"More" : "Más",
"Less" : "Menos",
"Allow users to send mail notification for shared files" : "Permitir a los usuarios unviar mensaxes de notificación pa ficheros compartíos",
- "Group" : "Grupu",
- "External Storage" : "Almacenamientu esternu",
- "Updates" : "Anovamientos"
+ "Uninstall App" : "Desinstalar aplicación",
+ "Group" : "Grupu"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/az.js b/settings/l10n/az.js
index 33da041addb..a48f28672bc 100644
--- a/settings/l10n/az.js
+++ b/settings/l10n/az.js
@@ -32,16 +32,12 @@ OC.L10N.register(
"Unable to change mail address" : "Mail ünvanını dəyişmək olmur",
"Email saved" : "Məktub yadda saxlanıldı",
"Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.",
- "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz",
- "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı",
- "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı",
"Couldn't update app." : "Proqram təminatını yeniləmək mümkün deyil.",
"Add trusted domain" : "İnamlı domainlərə əlavə et",
"Sending..." : "Göndərilir...",
"All" : "Hamısı",
"Update to %s" : "Yenilə bunadək %s",
"No apps found for your version" : "Sizin versiya üçün proqram tapılmadı",
- "Please wait...." : "Xahiş olunur gözləyəsiniz.",
"Error while disabling app" : "Proqram təminatını dayandırdıqda səhv baş verdi",
"Disable" : "Dayandır",
"Enable" : "İşə sal",
@@ -134,7 +130,6 @@ OC.L10N.register(
"Hide description …" : "Açıqlamanı gizlət ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Bu proqram yüklənə bilməz ona görə ki, göstərilən asılılıqlar yerinə yetirilməyib:",
"Enable only for specific groups" : "Yalnız spesifik qruplara izin ver",
- "Uninstall App" : "Proqram təminatını sil",
"Common Name" : "Ümumi ad",
"Valid until" : "Vaxtadək keçərlidir",
"Issued By" : "Tərəfindən yaradılıb",
@@ -186,7 +181,11 @@ OC.L10N.register(
"Default" : "Susmaya görə",
"log-level out of allowed range" : "jurnal-səviyyəsi izin verilən aralıqdan kənardır",
"Language changed" : "Dil dəyişdirildi",
+ "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz",
+ "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı",
+ "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?",
+ "Please wait...." : "Xahiş olunur gözləyəsiniz.",
"Everything (fatal issues, errors, warnings, info, debug)" : "Hər şey(ən pis hadisələr, səhvlər, xəbərdarlıqlar, məlmat, araşdırma səhvləri)",
"Info, warnings, errors and fatal issues" : "Məlmat, xəbərdarlıqlar, səhvlər və ən pis hadisələr",
"Warnings, errors and fatal issues" : "Xəbərdarlıqlar, səhvlər və ən pis hadisələr",
@@ -201,10 +200,9 @@ OC.L10N.register(
"Allow users to send mail notification for shared files to other users" : "İstifadəçilərə etdikləri paylaşımı digər istifadəçilərə mail vasitəsilə xəbərdarlıq göndərilməsinə izin verin",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLinte verilənlər bazası kimi istifadə edilir. Geniş tətbiq üçün, biz məsləhət görürük ki, arxa sonluqda fərqli verilənlər bazasından istifadə edəsiniz. ",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Xüsusilə fayl sinxronizasiyası üçün desktop client-dən istifadə edilərsə, SQLite məsləhət görülmür.",
+ "Uninstall App" : "Proqram təminatını sil",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ey ora,<br><br>ancaq deyirik ki, sizin artiq %s hesabınız var.<br><br>Sizin istifadəçi adınız: %s<br>Yetkilidir: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ey ora,\n\nancaq deyirik ki, sizin artiq %s hesabınız var.\n\nizin istifadəçi adınız: %s\nYetkilidir: %s\n\n",
- "Group" : "Qrup",
- "External Storage" : "Kənar depo",
- "Updates" : "Yenilənmələr"
+ "Group" : "Qrup"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/az.json b/settings/l10n/az.json
index c786765bc3e..c1c57e15a07 100644
--- a/settings/l10n/az.json
+++ b/settings/l10n/az.json
@@ -30,16 +30,12 @@
"Unable to change mail address" : "Mail ünvanını dəyişmək olmur",
"Email saved" : "Məktub yadda saxlanıldı",
"Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.",
- "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz",
- "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı",
- "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı",
"Couldn't update app." : "Proqram təminatını yeniləmək mümkün deyil.",
"Add trusted domain" : "İnamlı domainlərə əlavə et",
"Sending..." : "Göndərilir...",
"All" : "Hamısı",
"Update to %s" : "Yenilə bunadək %s",
"No apps found for your version" : "Sizin versiya üçün proqram tapılmadı",
- "Please wait...." : "Xahiş olunur gözləyəsiniz.",
"Error while disabling app" : "Proqram təminatını dayandırdıqda səhv baş verdi",
"Disable" : "Dayandır",
"Enable" : "İşə sal",
@@ -132,7 +128,6 @@
"Hide description …" : "Açıqlamanı gizlət ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Bu proqram yüklənə bilməz ona görə ki, göstərilən asılılıqlar yerinə yetirilməyib:",
"Enable only for specific groups" : "Yalnız spesifik qruplara izin ver",
- "Uninstall App" : "Proqram təminatını sil",
"Common Name" : "Ümumi ad",
"Valid until" : "Vaxtadək keçərlidir",
"Issued By" : "Tərəfindən yaradılıb",
@@ -184,7 +179,11 @@
"Default" : "Susmaya görə",
"log-level out of allowed range" : "jurnal-səviyyəsi izin verilən aralıqdan kənardır",
"Language changed" : "Dil dəyişdirildi",
+ "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz",
+ "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı",
+ "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?",
+ "Please wait...." : "Xahiş olunur gözləyəsiniz.",
"Everything (fatal issues, errors, warnings, info, debug)" : "Hər şey(ən pis hadisələr, səhvlər, xəbərdarlıqlar, məlmat, araşdırma səhvləri)",
"Info, warnings, errors and fatal issues" : "Məlmat, xəbərdarlıqlar, səhvlər və ən pis hadisələr",
"Warnings, errors and fatal issues" : "Xəbərdarlıqlar, səhvlər və ən pis hadisələr",
@@ -199,10 +198,9 @@
"Allow users to send mail notification for shared files to other users" : "İstifadəçilərə etdikləri paylaşımı digər istifadəçilərə mail vasitəsilə xəbərdarlıq göndərilməsinə izin verin",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLinte verilənlər bazası kimi istifadə edilir. Geniş tətbiq üçün, biz məsləhət görürük ki, arxa sonluqda fərqli verilənlər bazasından istifadə edəsiniz. ",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Xüsusilə fayl sinxronizasiyası üçün desktop client-dən istifadə edilərsə, SQLite məsləhət görülmür.",
+ "Uninstall App" : "Proqram təminatını sil",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ey ora,<br><br>ancaq deyirik ki, sizin artiq %s hesabınız var.<br><br>Sizin istifadəçi adınız: %s<br>Yetkilidir: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ey ora,\n\nancaq deyirik ki, sizin artiq %s hesabınız var.\n\nizin istifadəçi adınız: %s\nYetkilidir: %s\n\n",
- "Group" : "Qrup",
- "External Storage" : "Kənar depo",
- "Updates" : "Yenilənmələr"
+ "Group" : "Qrup"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js
index 3a97ceb0093..b92b3642b7a 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -32,16 +32,12 @@ OC.L10N.register(
"Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща",
"Email saved" : "Имейлът е запазен",
"Couldn't remove app." : "Приложението не бе премахнато.",
- "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".",
- "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.",
- "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.",
"Couldn't update app." : "Приложението не бе обновено.",
"Add trusted domain" : "Добавяне на сигурен домейн",
"Sending..." : "Изпращане...",
"All" : "Всички",
"Update to %s" : "Обнови до %s",
"No apps found for your version" : "Няма намерени приложения за версията, която ползвате",
- "Please wait...." : "Моля, изчакайте....",
"Error while disabling app" : "Грешка при изключване на приложението",
"Disable" : "Изключване",
"Enable" : "Включване",
@@ -163,7 +159,6 @@ OC.L10N.register(
"Hide description …" : "Скрии описание ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Приложението не може да бъде инсталирано, защото следните зависимости не са удовлетворени:",
"Enable only for specific groups" : "Включи само за определени групи",
- "Uninstall App" : "Премахни приложението",
"Common Name" : "Познато Име",
"Valid until" : "Валиден до",
"Issued By" : "Издаден от",
@@ -207,6 +202,7 @@ OC.L10N.register(
"Name" : "Име",
"Username" : "Потребител",
"Done" : "Завършен",
+ "Subscribe to our newsletter!" : "Абонирайте се за нашата емисия!",
"Show storage location" : "Покажи мястото на хранилището",
"Show last log in" : "Покажи последно вписване",
"Send email to new user" : "Изпращай писмо към нов потребител",
@@ -230,7 +226,11 @@ OC.L10N.register(
"Default" : "Стандарт",
"log-level out of allowed range" : "Ниво на проследяване \\(log-level\\) e извън допустимия обхват",
"Language changed" : "Езикът е променен",
+ "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".",
+ "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.",
+ "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?",
+ "Please wait...." : "Моля, изчакайте....",
"iPhone" : "iPhone",
"Everything (fatal issues, errors, warnings, info, debug)" : "Всичко (фатални проблеми, грешки, предупреждения, информация, дебъгване)",
"Info, warnings, errors and fatal issues" : "информация, предупреждения, грешки и фатални проблеми",
@@ -246,16 +246,13 @@ OC.L10N.register(
"Allow users to send mail notification for shared files to other users" : "Разреши на потребителите да изпращат уведомителни писма за споделени файлове към други потребители.",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite е използваната база данни. За по-големи инсталации Ви препоръчваме да изберете друг сървър за бази данни.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Използването на SQLite не се препоръчва, особено ако ползвате клиента за настолен компютър.",
+ "Uninstall App" : "Премахни приложението",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Здрасти,<br><br>Само да ти кажа, че имаш %s профил<br><br> Потребителя ти е: %s<br>Достъпи го: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здрасти,\n\nСамо да ти кажа, че имаш %s профил.\n\nПотребителя ти е: %s\nДостъпи го: %s\n",
"Group" : "Група",
"Default Quota" : "Стандартна квота",
"Group Admin for" : "Групов Администратор за",
"Storage Location" : "Дисково пространство",
- "Last Login" : "Последно вписване",
- "Redis" : "Redis",
- "External Storage" : "Външно хранилище",
- "Updates" : "Обновления",
- "An error occurred: {message}" : "Възникна грешка: {message}"
+ "Last Login" : "Последно вписване"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index 64d76926da1..ec1e46f7719 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -30,16 +30,12 @@
"Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща",
"Email saved" : "Имейлът е запазен",
"Couldn't remove app." : "Приложението не бе премахнато.",
- "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".",
- "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.",
- "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.",
"Couldn't update app." : "Приложението не бе обновено.",
"Add trusted domain" : "Добавяне на сигурен домейн",
"Sending..." : "Изпращане...",
"All" : "Всички",
"Update to %s" : "Обнови до %s",
"No apps found for your version" : "Няма намерени приложения за версията, която ползвате",
- "Please wait...." : "Моля, изчакайте....",
"Error while disabling app" : "Грешка при изключване на приложението",
"Disable" : "Изключване",
"Enable" : "Включване",
@@ -161,7 +157,6 @@
"Hide description …" : "Скрии описание ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Приложението не може да бъде инсталирано, защото следните зависимости не са удовлетворени:",
"Enable only for specific groups" : "Включи само за определени групи",
- "Uninstall App" : "Премахни приложението",
"Common Name" : "Познато Име",
"Valid until" : "Валиден до",
"Issued By" : "Издаден от",
@@ -205,6 +200,7 @@
"Name" : "Име",
"Username" : "Потребител",
"Done" : "Завършен",
+ "Subscribe to our newsletter!" : "Абонирайте се за нашата емисия!",
"Show storage location" : "Покажи мястото на хранилището",
"Show last log in" : "Покажи последно вписване",
"Send email to new user" : "Изпращай писмо към нов потребител",
@@ -228,7 +224,11 @@
"Default" : "Стандарт",
"log-level out of allowed range" : "Ниво на проследяване \\(log-level\\) e извън допустимия обхват",
"Language changed" : "Езикът е променен",
+ "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".",
+ "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.",
+ "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?",
+ "Please wait...." : "Моля, изчакайте....",
"iPhone" : "iPhone",
"Everything (fatal issues, errors, warnings, info, debug)" : "Всичко (фатални проблеми, грешки, предупреждения, информация, дебъгване)",
"Info, warnings, errors and fatal issues" : "информация, предупреждения, грешки и фатални проблеми",
@@ -244,16 +244,13 @@
"Allow users to send mail notification for shared files to other users" : "Разреши на потребителите да изпращат уведомителни писма за споделени файлове към други потребители.",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite е използваната база данни. За по-големи инсталации Ви препоръчваме да изберете друг сървър за бази данни.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Използването на SQLite не се препоръчва, особено ако ползвате клиента за настолен компютър.",
+ "Uninstall App" : "Премахни приложението",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Здрасти,<br><br>Само да ти кажа, че имаш %s профил<br><br> Потребителя ти е: %s<br>Достъпи го: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здрасти,\n\nСамо да ти кажа, че имаш %s профил.\n\nПотребителя ти е: %s\nДостъпи го: %s\n",
"Group" : "Група",
"Default Quota" : "Стандартна квота",
"Group Admin for" : "Групов Администратор за",
"Storage Location" : "Дисково пространство",
- "Last Login" : "Последно вписване",
- "Redis" : "Redis",
- "External Storage" : "Външно хранилище",
- "Updates" : "Обновления",
- "An error occurred: {message}" : "Възникна грешка: {message}"
+ "Last Login" : "Последно вписване"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/bn_BD.js b/settings/l10n/bn_BD.js
index 9d08bd440a7..195745a1b8e 100644
--- a/settings/l10n/bn_BD.js
+++ b/settings/l10n/bn_BD.js
@@ -12,9 +12,6 @@ OC.L10N.register(
"Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
"Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা",
- "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না",
- "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ",
- "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
"Couldn't update app." : "অ্যাপ নবায়ন করা গেলনা।",
"All" : "সবাই",
"Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
@@ -72,9 +69,11 @@ OC.L10N.register(
"set new password" : "নতুন কূটশব্দ নির্ধারণ করুন",
"Default" : "পূর্বনির্ধারিত",
"Language changed" : "ভাষা পরিবর্তন করা হয়েছে",
+ "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না",
+ "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ",
+ "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
"More" : "বেশী",
"Less" : "কম",
- "Group" : "গোষ্ঠীসমূহ",
- "External Storage" : "বাহ্যিক সংরক্ষণাগার"
+ "Group" : "গোষ্ঠীসমূহ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/bn_BD.json b/settings/l10n/bn_BD.json
index 4a6d100e842..6c6794cbe26 100644
--- a/settings/l10n/bn_BD.json
+++ b/settings/l10n/bn_BD.json
@@ -10,9 +10,6 @@
"Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
"Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা",
- "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না",
- "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ",
- "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
"Couldn't update app." : "অ্যাপ নবায়ন করা গেলনা।",
"All" : "সবাই",
"Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
@@ -70,9 +67,11 @@
"set new password" : "নতুন কূটশব্দ নির্ধারণ করুন",
"Default" : "পূর্বনির্ধারিত",
"Language changed" : "ভাষা পরিবর্তন করা হয়েছে",
+ "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না",
+ "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ",
+ "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না",
"More" : "বেশী",
"Less" : "কম",
- "Group" : "গোষ্ঠীসমূহ",
- "External Storage" : "বাহ্যিক সংরক্ষণাগার"
+ "Group" : "গোষ্ঠীসমূহ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js
index 4e0745f6c21..f1d6d4a48e7 100644
--- a/settings/l10n/bs.js
+++ b/settings/l10n/bs.js
@@ -28,15 +28,11 @@ OC.L10N.register(
"Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte",
"Email saved" : "E-pošta je spremljena",
"Couldn't remove app." : "Nije moguće ukloniti aplikaciju.",
- "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
- "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
- "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Couldn't update app." : "Ažuriranje aplikacije nije moguće.",
"Add trusted domain" : "Dodaj pouzdanu domenu",
"Sending..." : "Slanje...",
"All" : "Sve",
"Update to %s" : "Ažuriraj na %s",
- "Please wait...." : "Molim pričekajte...",
"Error while disabling app" : "Greška pri onemogućavanju aplikacije",
"Disable" : "Onemogući",
"Enable" : "Omogući",
@@ -115,7 +111,6 @@ OC.L10N.register(
"Documentation:" : "Dokumentacija:",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ova aplikacija se ne može instalirati zbog slijedećih neispunjenih ovisnosti:",
"Enable only for specific groups" : "Omogućite samo za specifične grupe",
- "Uninstall App" : "Deinstaliraj aplikaciju",
"Common Name" : "Opće Ime",
"Valid until" : "Validno do",
"Issued By" : "Izdano od",
@@ -160,7 +155,11 @@ OC.L10N.register(
"change email address" : "promjeni adresu e-pošte",
"Default" : "Zadano",
"Language changed" : "Jezik je promijenjen",
+ "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
+ "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
+ "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
+ "Please wait...." : "Molim pričekajte...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Sve (fatalni problemi, greške, upozorenja, info, ispravljanje pogrešaka)",
"Info, warnings, errors and fatal issues" : "Informacije, upozorenja, greške i fatalni problemi",
"Warnings, errors and fatal issues" : "Upozorenja, greške i fatalni problemi",
@@ -171,8 +170,8 @@ OC.L10N.register(
"Less" : "Manje",
"Allow users to send mail notification for shared files" : "Dozvoli korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
"Allow users to send mail notification for shared files to other users" : "Dozvoli korisnicima slanje notifikacijske e-pošte za podijeljene datoteke ka ostalim korisnicima",
+ "Uninstall App" : "Deinstaliraj aplikaciju",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej,<br><br>samo da javim da sad imate %s račum.<br><br>Vaše korisničko ime: %s<br>Pristupite mu: <a href=\"%s\">%s</a><br><br>",
- "Group" : "Grupa",
- "Updates" : "Ažuriranja"
+ "Group" : "Grupa"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json
index 4329671aca7..b45efaeea0c 100644
--- a/settings/l10n/bs.json
+++ b/settings/l10n/bs.json
@@ -26,15 +26,11 @@
"Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte",
"Email saved" : "E-pošta je spremljena",
"Couldn't remove app." : "Nije moguće ukloniti aplikaciju.",
- "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
- "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
- "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Couldn't update app." : "Ažuriranje aplikacije nije moguće.",
"Add trusted domain" : "Dodaj pouzdanu domenu",
"Sending..." : "Slanje...",
"All" : "Sve",
"Update to %s" : "Ažuriraj na %s",
- "Please wait...." : "Molim pričekajte...",
"Error while disabling app" : "Greška pri onemogućavanju aplikacije",
"Disable" : "Onemogući",
"Enable" : "Omogući",
@@ -113,7 +109,6 @@
"Documentation:" : "Dokumentacija:",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ova aplikacija se ne može instalirati zbog slijedećih neispunjenih ovisnosti:",
"Enable only for specific groups" : "Omogućite samo za specifične grupe",
- "Uninstall App" : "Deinstaliraj aplikaciju",
"Common Name" : "Opće Ime",
"Valid until" : "Validno do",
"Issued By" : "Izdano od",
@@ -158,7 +153,11 @@
"change email address" : "promjeni adresu e-pošte",
"Default" : "Zadano",
"Language changed" : "Jezik je promijenjen",
+ "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
+ "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
+ "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
+ "Please wait...." : "Molim pričekajte...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Sve (fatalni problemi, greške, upozorenja, info, ispravljanje pogrešaka)",
"Info, warnings, errors and fatal issues" : "Informacije, upozorenja, greške i fatalni problemi",
"Warnings, errors and fatal issues" : "Upozorenja, greške i fatalni problemi",
@@ -169,8 +168,8 @@
"Less" : "Manje",
"Allow users to send mail notification for shared files" : "Dozvoli korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
"Allow users to send mail notification for shared files to other users" : "Dozvoli korisnicima slanje notifikacijske e-pošte za podijeljene datoteke ka ostalim korisnicima",
+ "Uninstall App" : "Deinstaliraj aplikaciju",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej,<br><br>samo da javim da sad imate %s račum.<br><br>Vaše korisničko ime: %s<br>Pristupite mu: <a href=\"%s\">%s</a><br><br>",
- "Group" : "Grupa",
- "Updates" : "Ažuriranja"
+ "Group" : "Grupa"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index 4476465edee..917f5d41e4e 100644
--- a/settings/l10n/ca.js
+++ b/settings/l10n/ca.js
@@ -34,9 +34,6 @@ OC.L10N.register(
"Unable to change mail address" : "No es pot canviar l'adreça de correu electrònic",
"Email saved" : "S'ha desat el correu electrònic",
"Couldn't remove app." : "No s'ha pogut eliminar l'aplicació",
- "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin",
- "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s",
- "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s",
"Couldn't update app." : "No s'ha pogut actualitzar l'aplicació.",
"Add trusted domain" : "Afegir domini de confiança",
"Migration in progress. Please wait until the migration is finished" : "Migració en progrés. Si us plau, espereu fins que finalitzi la migració",
@@ -46,7 +43,6 @@ OC.L10N.register(
"All" : "Tots",
"Update to %s" : "Actualitzar a %s",
"No apps found for your version" : "No s'han trobat aplicacions per la seva versió",
- "Please wait...." : "Espereu...",
"Error while disabling app" : "Error en desactivar l'aplicació",
"Disable" : "Desactiva",
"Enable" : "Habilita",
@@ -152,7 +148,6 @@ OC.L10N.register(
"Hide description …" : "Amagar descripció...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Aquesta aplicació no es pot instal·lar perquè les següents dependències no es compleixen:",
"Enable only for specific groups" : "Activa només per grups específics",
- "Uninstall App" : "Desinstal·la l'aplicació",
"Common Name" : "Nom comú",
"Valid until" : "Valid fins",
"Issued By" : "Emès Per",
@@ -206,7 +201,11 @@ OC.L10N.register(
"Default" : "Per defecte",
"log-level out of allowed range" : "Nivell d'autenticació fora del rang permès",
"Language changed" : "S'ha canviat l'idioma",
+ "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin",
+ "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s",
+ "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
+ "Please wait...." : "Espereu...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)",
"Info, warnings, errors and fatal issues" : "Informació, avisos, errors i problemes fatals",
"Warnings, errors and fatal issues" : "Avisos, errors i problemes fatals",
@@ -222,13 +221,9 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "S'utilitza SQLite com a base de dades. Per a instal·lacions mes grans es recomana canviar a un altre sistema de base de dades.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'ús de SQLite està desaconsellat especialment quan s'usa el client d'escriptori per sincronitzar els fitxers.",
"Experimental applications ahead" : "A partir d'aquest punt hi ha aplicacions experimentals",
+ "Uninstall App" : "Desinstal·la l'aplicació",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Què tal?,<br><br>aquest missatge és per fer-li saber que ara té uncompte %s.<br><br>El seu nom d'usuari: %s<br>Accedeixi en: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, què tal?,\n\nAquest missatge és per fer-li saber que ara té un compte %s.\n\n El seu nom d'usuari: %s\nAccedeixi en: %s\n\n",
- "Group" : "Grup",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Emmagatzemament extern",
- "Updates" : "Actualitzacions",
- "An error occurred: {message}" : "S'ha produït un error: {message}"
+ "Group" : "Grup"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json
index 28fffa03244..67b310b196e 100644
--- a/settings/l10n/ca.json
+++ b/settings/l10n/ca.json
@@ -32,9 +32,6 @@
"Unable to change mail address" : "No es pot canviar l'adreça de correu electrònic",
"Email saved" : "S'ha desat el correu electrònic",
"Couldn't remove app." : "No s'ha pogut eliminar l'aplicació",
- "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin",
- "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s",
- "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s",
"Couldn't update app." : "No s'ha pogut actualitzar l'aplicació.",
"Add trusted domain" : "Afegir domini de confiança",
"Migration in progress. Please wait until the migration is finished" : "Migració en progrés. Si us plau, espereu fins que finalitzi la migració",
@@ -44,7 +41,6 @@
"All" : "Tots",
"Update to %s" : "Actualitzar a %s",
"No apps found for your version" : "No s'han trobat aplicacions per la seva versió",
- "Please wait...." : "Espereu...",
"Error while disabling app" : "Error en desactivar l'aplicació",
"Disable" : "Desactiva",
"Enable" : "Habilita",
@@ -150,7 +146,6 @@
"Hide description …" : "Amagar descripció...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Aquesta aplicació no es pot instal·lar perquè les següents dependències no es compleixen:",
"Enable only for specific groups" : "Activa només per grups específics",
- "Uninstall App" : "Desinstal·la l'aplicació",
"Common Name" : "Nom comú",
"Valid until" : "Valid fins",
"Issued By" : "Emès Per",
@@ -204,7 +199,11 @@
"Default" : "Per defecte",
"log-level out of allowed range" : "Nivell d'autenticació fora del rang permès",
"Language changed" : "S'ha canviat l'idioma",
+ "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin",
+ "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s",
+ "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
+ "Please wait...." : "Espereu...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)",
"Info, warnings, errors and fatal issues" : "Informació, avisos, errors i problemes fatals",
"Warnings, errors and fatal issues" : "Avisos, errors i problemes fatals",
@@ -220,13 +219,9 @@
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "S'utilitza SQLite com a base de dades. Per a instal·lacions mes grans es recomana canviar a un altre sistema de base de dades.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'ús de SQLite està desaconsellat especialment quan s'usa el client d'escriptori per sincronitzar els fitxers.",
"Experimental applications ahead" : "A partir d'aquest punt hi ha aplicacions experimentals",
+ "Uninstall App" : "Desinstal·la l'aplicació",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Què tal?,<br><br>aquest missatge és per fer-li saber que ara té uncompte %s.<br><br>El seu nom d'usuari: %s<br>Accedeixi en: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, què tal?,\n\nAquest missatge és per fer-li saber que ara té un compte %s.\n\n El seu nom d'usuari: %s\nAccedeixi en: %s\n\n",
- "Group" : "Grup",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Emmagatzemament extern",
- "Updates" : "Actualitzacions",
- "An error occurred: {message}" : "S'ha produït un error: {message}"
+ "Group" : "Grup"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index c3ee85073fd..ebc36fcd119 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -25,12 +25,14 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Pro možnost odeslání zkušebních emailů musíte nejprve nastavit svou emailovou adresu.",
"Invalid request" : "Neplatný požadavek",
"Invalid mail address" : "Neplatná emailová adresa",
+ "No valid group selected" : "Není vybrána platná skupina",
"A user with that name already exists." : "Uživatel tohoto jména již existuje.",
"Unable to create user." : "Nelze vytvořit uživatele.",
"Your %s account was created" : "Účet %s byl vytvořen",
"Unable to delete user." : "Nelze smazat uživatele.",
"Settings saved" : "Nastavení uloženo",
"Unable to change full name" : "Nelze změnit celé jméno",
+ "Unable to change email address" : "Nepodařilo se změnit e-mailovou adresu",
"Your full name has been changed." : "Vaše celé jméno bylo změněno.",
"Forbidden" : "Zakázáno",
"Invalid user" : "Neplatný uživatel",
@@ -38,9 +40,6 @@ OC.L10N.register(
"Email saved" : "Email uložen",
"Password confirmation is required" : "Je vyžadováno potvrzení hesla",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
- "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
- "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
- "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s",
"Couldn't update app." : "Nelze aktualizovat aplikaci.",
"Are you really sure you want add {domain} as trusted domain?" : "Jste si jisti, že chcete přidat {domain} mezi důvěryhodné domény?",
"Add trusted domain" : "Přidat důvěryhodnou doménu",
@@ -57,7 +56,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Oficiální aplikace jsou vyvíjeny komunitou. Poskytují klíčovou funkcionalitu a jsou připravené na produkční nasazení.",
"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." : "Schválené aplikace jsou vyvíjeny důvěryhodnými vývojáři a prošly zběžným bezpečnostním prověřením. Jsou aktivně udržovány v repozitáři s otevřeným kódem a jejich správci je považují za stabilní pro občasné až normální použití.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "U této aplikace nebyla provedena kontrola na bezpečnostní problémy. Aplikace je nová nebo nestabilní. Instalujte pouze na vlastní nebezpečí.",
- "Please wait...." : "Čekejte prosím...",
+ "Enabling app …" : "Povolování aplikace …",
"Error while disabling app" : "Chyba při zakazování aplikace",
"Disable" : "Zakázat",
"Enable" : "Povolit",
@@ -85,6 +84,8 @@ OC.L10N.register(
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome pro Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "iOS klient",
"Android Client" : "Android klient",
"Sync client - {os}" : "Sync klient - {os}",
@@ -122,6 +123,8 @@ OC.L10N.register(
"undo" : "vrátit zpět",
"never" : "nikdy",
"deleted {userName}" : "smazán {userName}",
+ "Unable to add user to group {group}" : "Nelze přidat uživatele do skupiny {group}",
+ "Unable to remove user from group {group}" : "Nelze odebrat uživatele ze skupiny {group}",
"Add group" : "Přidat skupinu",
"Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"",
"no group" : "není ve skupině",
@@ -244,14 +247,16 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Tato aplikace nemá nastavenou žádnou maximální verzi Nextcloudu. To se v budoucnu projeví jako chyba.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Tuto aplikaci nelze nainstalovat, protože nejsou splněny následující závislosti:",
"Enable only for specific groups" : "Povolit pouze pro vybrané skupiny",
- "Uninstall App" : "Odinstalovat aplikaci",
+ "Uninstall app" : "Odinstalovat aplikaci",
"SSL Root Certificates" : "Kořenové certifikáty SSL",
"Common Name" : "Common Name",
"Valid until" : "Platný do",
"Issued By" : "Vydal",
"Valid until %s" : "Platný do %s",
"Import root certificate" : "Import kořenového certifikátu",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Vítej,<br><br>jen ti dáváme vědět, že nyní máš %s účet.<br><br>Tvé uživatelské jméno: <strong>%s</strong><br>Přístup: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Ať slouží!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Vítej,\n\njen ti dáváme vědět, že nyní máš %s účet.\n\nTvé uživatelské jméno: %s\nPřístup: %s\n\n",
"Administrator documentation" : "Dokumentace administrátora",
"Online documentation" : "Online dokumentace",
"Forum" : "Fórum",
@@ -336,7 +341,11 @@ OC.L10N.register(
"Default" : "Výchozí",
"log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
"Language changed" : "Jazyk byl změněn",
+ "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
+ "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
+ "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?",
+ "Please wait...." : "Čekejte prosím...",
"iPhone" : "iPhone",
"add group" : "přidat skupinu",
"Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)",
@@ -356,6 +365,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.",
"Experimental applications ahead" : "Experimentální aplikace v pořadí",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentální aplikace nejsou prověřovány na bezpečnostní chyby, mohou být nestabilní a velmi se měnit. Jejich instalací můžete způsobit ztrátu dat nebo bezpečnostní problémy.",
+ "Uninstall App" : "Odinstalovat aplikaci",
"Enable experimental apps" : "Povolit experimentální aplikace",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ahoj,<br><br>toto je oznámení o nově vytvořeném %s účtu.<br><br>Uživatelské jméno: %s<br>Přihlásit se dá zde: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámení o nově vytvořeném %s účtu.\n\nUživatelské jméno: %s\nPřihlásit se dá zde: %s\n",
@@ -367,24 +377,6 @@ OC.L10N.register(
"Group Admin for" : "Správce skupiny pro",
"Storage Location" : "Úložiště dat",
"User Backend" : "Uživatelé vedeni pomocí",
- "Last Login" : "Poslední přihlášení",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externí úložiště",
- "Updates" : "Aktualizace",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Oficiální aplikace jsou vyvíjeny Nextcloud komunitou. Poskytují klíčové funkce Nextcloud a jsou připravené na produkční nasazení.",
- "No apps found for \"{query}\"" : "Nebyly nalezeny žádné aplikace pro \"{query}\"",
- "An error occurred: {message}" : "Nastala chyba: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle <a target=\"_blank\" href=\"%s\">instalační dokumentace ↗</a>, hlavně při použití php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze neběží s úrovní izolace transakcí \"READ COMMITED\". Toto může způsobit problémy při paralelním spouštění více akcí současně.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Server běží v prostředí Microsoft Windows. Pro optimální uživatelské pohodlí doporučujeme přejít na Linux.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů je vypnuto, což může vést k problémům s \"race\" podmínkami. Pro zabránění těmto problémům povolte 'filelocking.enabled' v souboru config.php. Více informací lze nalézt v <a target=\"_blank\" href=\"%s\">dokumentaci ↗</a>.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Prosím překontrolujte <a target=\"_blank\" href=\"%s\">instalační pokyny ↗</a> a zkontrolujte jakékoliv chyby a varování v <a href=\"#log-section\">logu</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě negarantuje bezpečnost systému. Přečtěte si prosím Nextcloud dokumentaci, chcete-li se dozvědět více informací o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pro migraci na jinou databázi použijte v příkazovém řádku nástroj: 'occ db:convert-type' nebo nahlédněte do <a target=\"_blank\" href=\"%s\">dokumentace ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Tato aplikace nemá nastavenou žádnou nejnižší podporovanou verzi Nextcloud. Toto bude hlášeno jako chyba ve verzi Nextcloud 11 a pozdější.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Tato aplikace nemá nastavenou žádnou nejvyšší podporovanou verzi Nextcloud. Toto bude hlášeno jako chyba ve verzi Nextcloud 11 a pozdější.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Chcete-li projekt podpořit\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">připojte se k vývoji</a>\n\t\tnebo\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pomáhejte ostatním uživatelům</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Vyvíjeno {communityopen}Nextcloud komunitou{linkclose}, {githubopen}zdrojový kód{linkclose} je licencován pod {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Poslední přihlášení"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index 5deae267890..7e73f9f6989 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -23,12 +23,14 @@
"You need to set your user email before being able to send test emails." : "Pro možnost odeslání zkušebních emailů musíte nejprve nastavit svou emailovou adresu.",
"Invalid request" : "Neplatný požadavek",
"Invalid mail address" : "Neplatná emailová adresa",
+ "No valid group selected" : "Není vybrána platná skupina",
"A user with that name already exists." : "Uživatel tohoto jména již existuje.",
"Unable to create user." : "Nelze vytvořit uživatele.",
"Your %s account was created" : "Účet %s byl vytvořen",
"Unable to delete user." : "Nelze smazat uživatele.",
"Settings saved" : "Nastavení uloženo",
"Unable to change full name" : "Nelze změnit celé jméno",
+ "Unable to change email address" : "Nepodařilo se změnit e-mailovou adresu",
"Your full name has been changed." : "Vaše celé jméno bylo změněno.",
"Forbidden" : "Zakázáno",
"Invalid user" : "Neplatný uživatel",
@@ -36,9 +38,6 @@
"Email saved" : "Email uložen",
"Password confirmation is required" : "Je vyžadováno potvrzení hesla",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
- "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
- "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
- "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s",
"Couldn't update app." : "Nelze aktualizovat aplikaci.",
"Are you really sure you want add {domain} as trusted domain?" : "Jste si jisti, že chcete přidat {domain} mezi důvěryhodné domény?",
"Add trusted domain" : "Přidat důvěryhodnou doménu",
@@ -55,7 +54,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Oficiální aplikace jsou vyvíjeny komunitou. Poskytují klíčovou funkcionalitu a jsou připravené na produkční nasazení.",
"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." : "Schválené aplikace jsou vyvíjeny důvěryhodnými vývojáři a prošly zběžným bezpečnostním prověřením. Jsou aktivně udržovány v repozitáři s otevřeným kódem a jejich správci je považují za stabilní pro občasné až normální použití.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "U této aplikace nebyla provedena kontrola na bezpečnostní problémy. Aplikace je nová nebo nestabilní. Instalujte pouze na vlastní nebezpečí.",
- "Please wait...." : "Čekejte prosím...",
+ "Enabling app …" : "Povolování aplikace …",
"Error while disabling app" : "Chyba při zakazování aplikace",
"Disable" : "Zakázat",
"Enable" : "Povolit",
@@ -83,6 +82,8 @@
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome pro Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "iOS klient",
"Android Client" : "Android klient",
"Sync client - {os}" : "Sync klient - {os}",
@@ -120,6 +121,8 @@
"undo" : "vrátit zpět",
"never" : "nikdy",
"deleted {userName}" : "smazán {userName}",
+ "Unable to add user to group {group}" : "Nelze přidat uživatele do skupiny {group}",
+ "Unable to remove user from group {group}" : "Nelze odebrat uživatele ze skupiny {group}",
"Add group" : "Přidat skupinu",
"Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"",
"no group" : "není ve skupině",
@@ -242,14 +245,16 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Tato aplikace nemá nastavenou žádnou maximální verzi Nextcloudu. To se v budoucnu projeví jako chyba.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Tuto aplikaci nelze nainstalovat, protože nejsou splněny následující závislosti:",
"Enable only for specific groups" : "Povolit pouze pro vybrané skupiny",
- "Uninstall App" : "Odinstalovat aplikaci",
+ "Uninstall app" : "Odinstalovat aplikaci",
"SSL Root Certificates" : "Kořenové certifikáty SSL",
"Common Name" : "Common Name",
"Valid until" : "Platný do",
"Issued By" : "Vydal",
"Valid until %s" : "Platný do %s",
"Import root certificate" : "Import kořenového certifikátu",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Vítej,<br><br>jen ti dáváme vědět, že nyní máš %s účet.<br><br>Tvé uživatelské jméno: <strong>%s</strong><br>Přístup: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Ať slouží!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Vítej,\n\njen ti dáváme vědět, že nyní máš %s účet.\n\nTvé uživatelské jméno: %s\nPřístup: %s\n\n",
"Administrator documentation" : "Dokumentace administrátora",
"Online documentation" : "Online dokumentace",
"Forum" : "Fórum",
@@ -334,7 +339,11 @@
"Default" : "Výchozí",
"log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
"Language changed" : "Jazyk byl změněn",
+ "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
+ "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
+ "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?",
+ "Please wait...." : "Čekejte prosím...",
"iPhone" : "iPhone",
"add group" : "přidat skupinu",
"Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)",
@@ -354,6 +363,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.",
"Experimental applications ahead" : "Experimentální aplikace v pořadí",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentální aplikace nejsou prověřovány na bezpečnostní chyby, mohou být nestabilní a velmi se měnit. Jejich instalací můžete způsobit ztrátu dat nebo bezpečnostní problémy.",
+ "Uninstall App" : "Odinstalovat aplikaci",
"Enable experimental apps" : "Povolit experimentální aplikace",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ahoj,<br><br>toto je oznámení o nově vytvořeném %s účtu.<br><br>Uživatelské jméno: %s<br>Přihlásit se dá zde: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámení o nově vytvořeném %s účtu.\n\nUživatelské jméno: %s\nPřihlásit se dá zde: %s\n",
@@ -365,24 +375,6 @@
"Group Admin for" : "Správce skupiny pro",
"Storage Location" : "Úložiště dat",
"User Backend" : "Uživatelé vedeni pomocí",
- "Last Login" : "Poslední přihlášení",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externí úložiště",
- "Updates" : "Aktualizace",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Oficiální aplikace jsou vyvíjeny Nextcloud komunitou. Poskytují klíčové funkce Nextcloud a jsou připravené na produkční nasazení.",
- "No apps found for \"{query}\"" : "Nebyly nalezeny žádné aplikace pro \"{query}\"",
- "An error occurred: {message}" : "Nastala chyba: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle <a target=\"_blank\" href=\"%s\">instalační dokumentace ↗</a>, hlavně při použití php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze neběží s úrovní izolace transakcí \"READ COMMITED\". Toto může způsobit problémy při paralelním spouštění více akcí současně.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Server běží v prostředí Microsoft Windows. Pro optimální uživatelské pohodlí doporučujeme přejít na Linux.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů je vypnuto, což může vést k problémům s \"race\" podmínkami. Pro zabránění těmto problémům povolte 'filelocking.enabled' v souboru config.php. Více informací lze nalézt v <a target=\"_blank\" href=\"%s\">dokumentaci ↗</a>.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Prosím překontrolujte <a target=\"_blank\" href=\"%s\">instalační pokyny ↗</a> a zkontrolujte jakékoliv chyby a varování v <a href=\"#log-section\">logu</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě negarantuje bezpečnost systému. Přečtěte si prosím Nextcloud dokumentaci, chcete-li se dozvědět více informací o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pro migraci na jinou databázi použijte v příkazovém řádku nástroj: 'occ db:convert-type' nebo nahlédněte do <a target=\"_blank\" href=\"%s\">dokumentace ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Tato aplikace nemá nastavenou žádnou nejnižší podporovanou verzi Nextcloud. Toto bude hlášeno jako chyba ve verzi Nextcloud 11 a pozdější.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Tato aplikace nemá nastavenou žádnou nejvyšší podporovanou verzi Nextcloud. Toto bude hlášeno jako chyba ve verzi Nextcloud 11 a pozdější.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Chcete-li projekt podpořit\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">připojte se k vývoji</a>\n\t\tnebo\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pomáhejte ostatním uživatelům</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Vyvíjeno {communityopen}Nextcloud komunitou{linkclose}, {githubopen}zdrojový kód{linkclose} je licencován pod {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Poslední přihlášení"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index 7879562cb11..474007513ce 100644
--- a/settings/l10n/da.js
+++ b/settings/l10n/da.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Kan ikke ændre mailadresse",
"Email saved" : "E-mailadressen er gemt",
"Couldn't remove app." : "Kunne ikke fjerne app'en.",
- "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen",
- "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s",
- "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s",
"Couldn't update app." : "Kunne ikke opdatere app'en.",
"Add trusted domain" : "Tilføj et domæne som du har tillid til",
"Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet",
@@ -50,7 +47,6 @@ OC.L10N.register(
"No apps found for your version" : "Ingen apps fundet til din verion",
"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." : "Godkendte programmer er udviklet af betroet udviklere som har bestået en let sikkerheds gennemgang. De er aktivt vedligeholdt i et åben kode lager og udviklerne vurdere programmet til at være stabilt for normalt brug.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Dette program er ikke kontrolleret for sikkerhedsproblemer, og er nyt eller kendt for at være ustabilt. Installer på eget ansvar.",
- "Please wait...." : "Vent venligst...",
"Error while disabling app" : "Kunne ikke deaktivere app",
"Disable" : "Deaktiver",
"Enable" : "Aktiver",
@@ -168,7 +164,6 @@ OC.L10N.register(
"Hide description …" : "Skjul beskrivelse",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Dette program kan ikke installeres, da følgende afhængigheder ikke imødekommes:",
"Enable only for specific groups" : "Aktivér kun for udvalgte grupper",
- "Uninstall App" : "Afinstallér app",
"Common Name" : "Almindeligt navn",
"Valid until" : "Gyldig indtil",
"Issued By" : "Udstedt af",
@@ -226,7 +221,11 @@ OC.L10N.register(
"Default" : "Standard",
"log-level out of allowed range" : "niveau for logregistrering går ud over tilladte interval",
"Language changed" : "Sprog ændret",
+ "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen",
+ "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s",
+ "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?",
+ "Please wait...." : "Vent venligst...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alt (alvorlige fejl, fejl, advarsler, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, advarsler, fejl og alvorlige fejl",
"Warnings, errors and fatal issues" : "Advarsler, fejl og alvorlige fejl",
@@ -243,14 +242,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Brug af SQLite frarådes især når skrivebordsklienten anvendes til filsynkronisering.",
"Experimental applications ahead" : "Kommende eksperimentale programmer",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Eksperimentale programmer er ikke undersøgt for sikkerheds problemer. Kendt for at være ustabil og stadig under intensiv udvikling. Installering af disse programmer kan medføre datatab og/eller udgøre en sikkerhedsrisiko.",
+ "Uninstall App" : "Afinstallér app",
"Enable experimental apps" : "Aktiver eksperimentale programmer",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hejsa,<br><br>dette er blot en besked om, at du nu har en %s-konto.<br><br>Dit brugernavn: %s<br>Tilgå den: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hejsa,\n\ndette er blot en besked om, at du nu har en %s-konto.\n\nDit brugernavn: %s\nTilgå den: %s\n\n",
- "Group" : "Gruppe",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Ekstern opbevaring",
- "Updates" : "Opdateringer",
- "An error occurred: {message}" : "Der opstod en fejl:{message}"
+ "Group" : "Gruppe"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 112eaa65253..70af6ed51a0 100644
--- a/settings/l10n/da.json
+++ b/settings/l10n/da.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Kan ikke ændre mailadresse",
"Email saved" : "E-mailadressen er gemt",
"Couldn't remove app." : "Kunne ikke fjerne app'en.",
- "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen",
- "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s",
- "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s",
"Couldn't update app." : "Kunne ikke opdatere app'en.",
"Add trusted domain" : "Tilføj et domæne som du har tillid til",
"Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet",
@@ -48,7 +45,6 @@
"No apps found for your version" : "Ingen apps fundet til din verion",
"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." : "Godkendte programmer er udviklet af betroet udviklere som har bestået en let sikkerheds gennemgang. De er aktivt vedligeholdt i et åben kode lager og udviklerne vurdere programmet til at være stabilt for normalt brug.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Dette program er ikke kontrolleret for sikkerhedsproblemer, og er nyt eller kendt for at være ustabilt. Installer på eget ansvar.",
- "Please wait...." : "Vent venligst...",
"Error while disabling app" : "Kunne ikke deaktivere app",
"Disable" : "Deaktiver",
"Enable" : "Aktiver",
@@ -166,7 +162,6 @@
"Hide description …" : "Skjul beskrivelse",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Dette program kan ikke installeres, da følgende afhængigheder ikke imødekommes:",
"Enable only for specific groups" : "Aktivér kun for udvalgte grupper",
- "Uninstall App" : "Afinstallér app",
"Common Name" : "Almindeligt navn",
"Valid until" : "Gyldig indtil",
"Issued By" : "Udstedt af",
@@ -224,7 +219,11 @@
"Default" : "Standard",
"log-level out of allowed range" : "niveau for logregistrering går ud over tilladte interval",
"Language changed" : "Sprog ændret",
+ "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen",
+ "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s",
+ "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?",
+ "Please wait...." : "Vent venligst...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alt (alvorlige fejl, fejl, advarsler, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, advarsler, fejl og alvorlige fejl",
"Warnings, errors and fatal issues" : "Advarsler, fejl og alvorlige fejl",
@@ -241,14 +240,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Brug af SQLite frarådes især når skrivebordsklienten anvendes til filsynkronisering.",
"Experimental applications ahead" : "Kommende eksperimentale programmer",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Eksperimentale programmer er ikke undersøgt for sikkerheds problemer. Kendt for at være ustabil og stadig under intensiv udvikling. Installering af disse programmer kan medføre datatab og/eller udgøre en sikkerhedsrisiko.",
+ "Uninstall App" : "Afinstallér app",
"Enable experimental apps" : "Aktiver eksperimentale programmer",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hejsa,<br><br>dette er blot en besked om, at du nu har en %s-konto.<br><br>Dit brugernavn: %s<br>Tilgå den: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hejsa,\n\ndette er blot en besked om, at du nu har en %s-konto.\n\nDit brugernavn: %s\nTilgå den: %s\n\n",
- "Group" : "Gruppe",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Ekstern opbevaring",
- "Updates" : "Opdateringer",
- "An error occurred: {message}" : "Der opstod en fejl:{message}"
+ "Group" : "Gruppe"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 2c728859082..fdbb8cab3b3 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Zunächst muss die Benutzer-E-Mail-Adresse angegeben werden, bevor Test-E-Mails verschickt werden können.",
"Invalid request" : "Fehlerhafte Anfrage",
"Invalid mail address" : "Ungültige E-Mail-Adresse",
+ "No valid group selected" : "Keine gültige Gruppe ausgewählt",
"A user with that name already exists." : "Ein Benutzer mit diesem Namen existiert bereits.",
"Unable to create user." : "Benutzer konnte nicht erstellt werden.",
"Your %s account was created" : "Dein %s-Konto wurde erstellt",
@@ -39,13 +40,10 @@ OC.L10N.register(
"Email saved" : "E-Mail-Adresse gespeichert",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
- "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
- "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." : "Die App konnte nicht aktualisiert werden.",
"Are you really sure you want add {domain} as trusted domain?" : "Bist du sicher, dass du {domain} als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
- "Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migrationabgeschlossen ist",
+ "Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migration abgeschlossen ist",
"Migration started …" : "Migration begonnen…",
"Not saved" : "Nicht gespeichert",
"Sending..." : "Senden…",
@@ -58,7 +56,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.",
"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." : "Geprüfte Apps werden von vertrauenswürdigen Entwicklern entwickelt und haben eine oberflächliche Sicherheitsprüfung durchlaufen. Sie werden innerhalb eines offenen Code-Repositorys aktiv gepflegt und ihre Betreuer erachten sie als stabil genug für für den gelegentlichen bis normalen Einsatz.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Diese App ist nicht auf Sicherheitsprobleme hin überprüft und ist neu oder bekanntermaßen instabil. Die Installation erfolgt auf eigenes Risiko.",
- "Please wait...." : "Bitte warten…",
+ "Enabling app …" : "Aktiviere App ...",
"Error while disabling app" : "Beim Deaktivieren der App ist ein Fehler aufgetreten",
"Disable" : "Deaktivieren",
"Enable" : "Aktivieren",
@@ -88,8 +86,8 @@ OC.L10N.register(
"Google Chrome for Android" : "Google Chrome für Android",
"iPhone iOS" : "iPhone iOS",
"iPad iOS" : "iPad iOS",
- "iOS Client" : "iOS Client",
- "Android Client" : "Android Client",
+ "iOS Client" : "iOS-Client",
+ "Android Client" : "Android-Client",
"Sync client - {os}" : "Sync-Client - {os}",
"This session" : "Diese Sitzung",
"Copy" : "Kopieren",
@@ -125,6 +123,8 @@ OC.L10N.register(
"undo" : "rückgängig machen",
"never" : "niemals",
"deleted {userName}" : "{userName} gelöscht",
+ "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ",
+ "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ",
"Add group" : "Gruppe hinzufügen",
"Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"",
"no group" : "Keine Gruppe",
@@ -139,7 +139,7 @@ OC.L10N.register(
"Unlimited" : "Unbegrenzt",
"Personal info" : "Persönliche Informationen",
"Sessions" : "Sitzungen",
- "App passwords" : "App-Passwörter",
+ "App passwords" : "App-PINs",
"Sync clients" : "Sync-Clients",
"None" : "Nichts",
"Login" : "Anmelden",
@@ -247,7 +247,7 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Die App kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind:",
"Enable only for specific groups" : "Nur für bestimmte Gruppen aktivieren",
- "Uninstall App" : "App deinstallieren",
+ "Uninstall app" : "App deinstallieren",
"SSL Root Certificates" : "SSL Root Zertifikate",
"Common Name" : "Allgemeiner Name",
"Valid until" : "Gültig bis",
@@ -276,7 +276,7 @@ OC.L10N.register(
"Email" : "E-Mail",
"Your email address" : "Deine E-Mail-Adresse",
"No email address set" : "Keine E-Mail-Adresse angegeben",
- "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen",
"Phone number" : "Telefonnummer",
"Your phone number" : "Deine Telefonnummer",
"Address" : "Adresse",
@@ -341,7 +341,11 @@ OC.L10N.register(
"Default" : "Standard",
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Language changed" : "Sprache geändert",
+ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
+ "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
+ "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?",
+ "Please wait...." : "Bitte warten…",
"iPhone" : "iPhone",
"add group" : "Gruppe hinzufügen",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)",
@@ -361,6 +365,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
"Experimental applications ahead" : "Experimentelle Apps nachfolgend",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.",
+ "Uninstall App" : "App deinstallieren",
"Enable experimental apps" : "Experimentelle Apps aktivieren",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.<br><br>Dein Benutzername: %s<br>Zugriff: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.\n\nDein Benutzername: %s\nLoslegen: %s\n\n",
@@ -372,24 +377,6 @@ OC.L10N.register(
"Group Admin for" : "Gruppenadministrator für",
"Storage Location" : "Speicherort",
"User Backend" : "Benutzer-Backend",
- "Last Login" : "Letzte Anmeldung",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externer Speicher",
- "Updates" : "Updates",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.",
- "No apps found for \"{query}\"" : "Keine Applikationen für \"{query}\" gefunden",
- "An error occurred: {message}" : "Ein Fehler ist aufgetreten: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration des Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Dein Server wird mit Microsoft Windows betrieben. Für ein optimales Nutzungserlebnis empfehlen wir dringend Linux.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. 'filelocking.enabled' in der config.php aktivieren, um diese Probleme zu vermeiden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfe noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrolliere das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-App funktioniert und welche Anwendungsfälle unterstützt werden.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutze bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Wenn du das Projekt unterstützen möchtest\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf anderen Nutzern</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar."
+ "Last Login" : "Letzte Anmeldung"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 349c71916f0..b451209d753 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -23,6 +23,7 @@
"You need to set your user email before being able to send test emails." : "Zunächst muss die Benutzer-E-Mail-Adresse angegeben werden, bevor Test-E-Mails verschickt werden können.",
"Invalid request" : "Fehlerhafte Anfrage",
"Invalid mail address" : "Ungültige E-Mail-Adresse",
+ "No valid group selected" : "Keine gültige Gruppe ausgewählt",
"A user with that name already exists." : "Ein Benutzer mit diesem Namen existiert bereits.",
"Unable to create user." : "Benutzer konnte nicht erstellt werden.",
"Your %s account was created" : "Dein %s-Konto wurde erstellt",
@@ -37,13 +38,10 @@
"Email saved" : "E-Mail-Adresse gespeichert",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
- "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
- "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." : "Die App konnte nicht aktualisiert werden.",
"Are you really sure you want add {domain} as trusted domain?" : "Bist du sicher, dass du {domain} als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
- "Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migrationabgeschlossen ist",
+ "Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migration abgeschlossen ist",
"Migration started …" : "Migration begonnen…",
"Not saved" : "Nicht gespeichert",
"Sending..." : "Senden…",
@@ -56,7 +54,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.",
"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." : "Geprüfte Apps werden von vertrauenswürdigen Entwicklern entwickelt und haben eine oberflächliche Sicherheitsprüfung durchlaufen. Sie werden innerhalb eines offenen Code-Repositorys aktiv gepflegt und ihre Betreuer erachten sie als stabil genug für für den gelegentlichen bis normalen Einsatz.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Diese App ist nicht auf Sicherheitsprobleme hin überprüft und ist neu oder bekanntermaßen instabil. Die Installation erfolgt auf eigenes Risiko.",
- "Please wait...." : "Bitte warten…",
+ "Enabling app …" : "Aktiviere App ...",
"Error while disabling app" : "Beim Deaktivieren der App ist ein Fehler aufgetreten",
"Disable" : "Deaktivieren",
"Enable" : "Aktivieren",
@@ -86,8 +84,8 @@
"Google Chrome for Android" : "Google Chrome für Android",
"iPhone iOS" : "iPhone iOS",
"iPad iOS" : "iPad iOS",
- "iOS Client" : "iOS Client",
- "Android Client" : "Android Client",
+ "iOS Client" : "iOS-Client",
+ "Android Client" : "Android-Client",
"Sync client - {os}" : "Sync-Client - {os}",
"This session" : "Diese Sitzung",
"Copy" : "Kopieren",
@@ -123,6 +121,8 @@
"undo" : "rückgängig machen",
"never" : "niemals",
"deleted {userName}" : "{userName} gelöscht",
+ "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ",
+ "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ",
"Add group" : "Gruppe hinzufügen",
"Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"",
"no group" : "Keine Gruppe",
@@ -137,7 +137,7 @@
"Unlimited" : "Unbegrenzt",
"Personal info" : "Persönliche Informationen",
"Sessions" : "Sitzungen",
- "App passwords" : "App-Passwörter",
+ "App passwords" : "App-PINs",
"Sync clients" : "Sync-Clients",
"None" : "Nichts",
"Login" : "Anmelden",
@@ -245,7 +245,7 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Die App kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind:",
"Enable only for specific groups" : "Nur für bestimmte Gruppen aktivieren",
- "Uninstall App" : "App deinstallieren",
+ "Uninstall app" : "App deinstallieren",
"SSL Root Certificates" : "SSL Root Zertifikate",
"Common Name" : "Allgemeiner Name",
"Valid until" : "Gültig bis",
@@ -274,7 +274,7 @@
"Email" : "E-Mail",
"Your email address" : "Deine E-Mail-Adresse",
"No email address set" : "Keine E-Mail-Adresse angegeben",
- "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen",
"Phone number" : "Telefonnummer",
"Your phone number" : "Deine Telefonnummer",
"Address" : "Adresse",
@@ -339,7 +339,11 @@
"Default" : "Standard",
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Language changed" : "Sprache geändert",
+ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
+ "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
+ "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?",
+ "Please wait...." : "Bitte warten…",
"iPhone" : "iPhone",
"add group" : "Gruppe hinzufügen",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)",
@@ -359,6 +363,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
"Experimental applications ahead" : "Experimentelle Apps nachfolgend",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.",
+ "Uninstall App" : "App deinstallieren",
"Enable experimental apps" : "Experimentelle Apps aktivieren",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.<br><br>Dein Benutzername: %s<br>Zugriff: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.\n\nDein Benutzername: %s\nLoslegen: %s\n\n",
@@ -370,24 +375,6 @@
"Group Admin for" : "Gruppenadministrator für",
"Storage Location" : "Speicherort",
"User Backend" : "Benutzer-Backend",
- "Last Login" : "Letzte Anmeldung",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externer Speicher",
- "Updates" : "Updates",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.",
- "No apps found for \"{query}\"" : "Keine Applikationen für \"{query}\" gefunden",
- "An error occurred: {message}" : "Ein Fehler ist aufgetreten: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration des Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Dein Server wird mit Microsoft Windows betrieben. Für ein optimales Nutzungserlebnis empfehlen wir dringend Linux.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. 'filelocking.enabled' in der config.php aktivieren, um diese Probleme zu vermeiden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfe noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrolliere das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-App funktioniert und welche Anwendungsfälle unterstützt werden.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutze bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Wenn du das Projekt unterstützen möchtest\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf anderen Nutzern</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar."
+ "Last Login" : "Letzte Anmeldung"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 97b3efdcdb2..edb78c317c5 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Sie müssen Ihre Benutzer-E-Mail-Adresse einstellen, bevor Sie Test-E-Mails versenden können.",
"Invalid request" : "Ungültige Anforderung",
"Invalid mail address" : "Ungültige E-Mail-Adresse",
+ "No valid group selected" : "Keine gültige Gruppe ausgewählt",
"A user with that name already exists." : "Ein Benutzer mit diesem Namen existiert bereits.",
"Unable to create user." : "Benutzer konnte nicht erstellt werden.",
"Your %s account was created" : "Ihr %s-Konto wurde erstellt",
@@ -39,9 +40,6 @@ OC.L10N.register(
"Email saved" : "E-Mail-Adresse gespeichert",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
- "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
- "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." : "Die App konnte nicht aktualisiert werden.",
"Are you really sure you want add {domain} as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie {domain} als vertrauenswürdige Domain hinzufügen möchten?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
@@ -52,13 +50,13 @@ OC.L10N.register(
"Official" : "Offiziell",
"All" : "Alle",
"Update to %s" : "Aktualisierung auf %s",
- "_You have %n app update pending_::_You have %n app updates pending_" : ["Sie haben %n Aktualisierung verfügbar","Es sind %n App-Aktualisierungen für Sie verfügbar"],
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Es ist %n App-Aktualisierung verfügbar","Es sind %n App-Aktualisierungen verfügbar"],
"No apps found for your version" : "Es wurden keine Apps für Ihre Version gefunden",
"The app will be downloaded from the app store" : "Die App wird aus dem App-Store heruntergeladen",
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.",
"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." : "Geprüfte Apps werden von vertrauenswürdigen Entwicklern entwickelt und haben eine oberflächliche Sicherheitsprüfung durchlaufen. Sie werden innerhalb eines offenen Code-Repositorys aktiv gepflegt und ihre Betreuer erachten sie als stabil genug für für den gelegentlichen bis normalen Einsatz.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Diese App ist nicht auf Sicherheitsprobleme hin überprüft und ist neu oder bekanntermaßen instabil. Die Installation erfolgt auf eigenes Risiko.",
- "Please wait...." : "Bitte warten…",
+ "Enabling app …" : "Aktiviere App ...",
"Error while disabling app" : "Beim Deaktivieren der App ist ein Fehler aufgetreten",
"Disable" : "Deaktivieren",
"Enable" : "Aktivieren",
@@ -125,6 +123,8 @@ OC.L10N.register(
"undo" : "rückgängig machen",
"never" : "niemals",
"deleted {userName}" : "{userName} gelöscht",
+ "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ",
+ "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ",
"Add group" : "Gruppe hinzufügen",
"Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"",
"no group" : "Keine Gruppe",
@@ -139,7 +139,7 @@ OC.L10N.register(
"Unlimited" : "Unbegrenzt",
"Personal info" : "Persönliche Informationen",
"Sessions" : "Sitzungen",
- "App passwords" : "App-Passwörter",
+ "App passwords" : "App-PINs",
"Sync clients" : "Sync-Clients",
"None" : "Keine",
"Login" : "Anmelden",
@@ -198,8 +198,8 @@ OC.L10N.register(
"Cron" : "Cron",
"Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.",
"Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.",
- "Cron was not executed yet!" : "Cron wurde bis jetzt noch nicht ausgeführt!",
- "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden der Seite ausführen",
+ "Cron was not executed yet!" : "Cron wurde bislang noch nicht ausgeführt!",
+ "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden einer Seite ausführen",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Benutzen Sie den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.",
"The cron.php needs to be executed by the system user \"%s\"." : "Die cron.php muss durch den Systemnutzer \"%s\" ausgeführt werden.",
@@ -236,18 +236,18 @@ OC.L10N.register(
"by %s" : "von %s",
"%s-licensed" : "%s-Lizensiert",
"Documentation:" : "Dokumentation:",
- "User documentation" : "Dokumentation für Benutzer",
- "Admin documentation" : "Dokumentation für Administratoren",
+ "User documentation" : "Benutzer-Dokumentation",
+ "Admin documentation" : "Administratoren-Dokumentation",
"Visit website" : "Webseite besuchen",
"Report a bug" : "Melden Sie einen technischen Fehler",
"Show description …" : "Beschreibung anzeigen…",
"Hide description …" : "Beschreibung ausblenden…",
- "This app has an update available." : "Es ist eine Aktualisierung für diese Anwendung verfügbar.",
+ "This app has an update available." : "Für diese Anwendung ist eine Aktualisierung verfügbar.",
"This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Diese App kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind:",
"Enable only for specific groups" : "Nur für bestimmte Gruppen aktivieren",
- "Uninstall App" : "App deinstallieren",
+ "Uninstall app" : "App deinstallieren",
"SSL Root Certificates" : "SSL Root Zertifikate",
"Common Name" : "Allgemeiner Name",
"Valid until" : "Gültig bis",
@@ -276,7 +276,7 @@ OC.L10N.register(
"Email" : "E-Mail",
"Your email address" : "Ihre E-Mail-Adresse",
"No email address set" : "Keine E-Mail-Adresse angegeben",
- "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen",
"Phone number" : "Telefonnummer",
"Your phone number" : "Ihre Telefonnummer",
"Address" : "Adresse",
@@ -341,7 +341,11 @@ OC.L10N.register(
"Default" : "Standard",
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Language changed" : "Sprache geändert",
+ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
+ "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
+ "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?",
+ "Please wait...." : "Bitte warten…",
"iPhone" : "iPhone",
"add group" : "Gruppe hinzufügen",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)",
@@ -361,6 +365,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
"Experimental applications ahead" : "Experimentelle Apps nachfolgend",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.",
+ "Uninstall App" : "App deinstallieren",
"Enable experimental apps" : "Experimentelle Apps aktivieren",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass Sie jetzt ein %s-Konto haben.<br><br>Ihr Benutzername: %s<br>Greifen Sie darauf zu: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass Sie jetzt ein %s-Konto haben.\n\nIhr Benutzername: %s\nGreifen Sie darauf zu: %s\n\n",
@@ -372,24 +377,6 @@ OC.L10N.register(
"Group Admin for" : "Gruppenadministrator für",
"Storage Location" : "Speicherort",
"User Backend" : "Benutzer-Backend",
- "Last Login" : "Letzte Anmeldung",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externer Speicher",
- "Updates" : "Updates",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der Nextcloud-Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.",
- "No apps found for \"{query}\"" : "Keine Applikationen für \"{query}\" gefunden",
- "An error occurred: {message}" : "Ein Fehler ist aufgetreten: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte schauen Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzen.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "ihre Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ihr Server wird mit Microsoft Windows betrieben. Für ein optimales Nutzungserlebnis empfehlen wir dringend Linux.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. Aktivieren Sie 'filelocking.enabled' in der config.php diese Probleme zu vermeiden. Weitere Informationen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfen Sie noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrollieren Sie das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-App funktioniert und welche Anwendungsfälle unterstützt werden.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutzen Sie bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird ab Nextcloud 11 als Fehler behandelt.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird ab Nextcloud 11 als Fehler behandelt.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Wenn Sie das Projekt unterstützen möchten\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie anderen Nutzern</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar."
+ "Last Login" : "Letzte Anmeldung"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index ca67df83f5d..b52a89d8a41 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -23,6 +23,7 @@
"You need to set your user email before being able to send test emails." : "Sie müssen Ihre Benutzer-E-Mail-Adresse einstellen, bevor Sie Test-E-Mails versenden können.",
"Invalid request" : "Ungültige Anforderung",
"Invalid mail address" : "Ungültige E-Mail-Adresse",
+ "No valid group selected" : "Keine gültige Gruppe ausgewählt",
"A user with that name already exists." : "Ein Benutzer mit diesem Namen existiert bereits.",
"Unable to create user." : "Benutzer konnte nicht erstellt werden.",
"Your %s account was created" : "Ihr %s-Konto wurde erstellt",
@@ -37,9 +38,6 @@
"Email saved" : "E-Mail-Adresse gespeichert",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
- "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
- "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
- "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." : "Die App konnte nicht aktualisiert werden.",
"Are you really sure you want add {domain} as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie {domain} als vertrauenswürdige Domain hinzufügen möchten?",
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
@@ -50,13 +48,13 @@
"Official" : "Offiziell",
"All" : "Alle",
"Update to %s" : "Aktualisierung auf %s",
- "_You have %n app update pending_::_You have %n app updates pending_" : ["Sie haben %n Aktualisierung verfügbar","Es sind %n App-Aktualisierungen für Sie verfügbar"],
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Es ist %n App-Aktualisierung verfügbar","Es sind %n App-Aktualisierungen verfügbar"],
"No apps found for your version" : "Es wurden keine Apps für Ihre Version gefunden",
"The app will be downloaded from the app store" : "Die App wird aus dem App-Store heruntergeladen",
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.",
"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." : "Geprüfte Apps werden von vertrauenswürdigen Entwicklern entwickelt und haben eine oberflächliche Sicherheitsprüfung durchlaufen. Sie werden innerhalb eines offenen Code-Repositorys aktiv gepflegt und ihre Betreuer erachten sie als stabil genug für für den gelegentlichen bis normalen Einsatz.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Diese App ist nicht auf Sicherheitsprobleme hin überprüft und ist neu oder bekanntermaßen instabil. Die Installation erfolgt auf eigenes Risiko.",
- "Please wait...." : "Bitte warten…",
+ "Enabling app …" : "Aktiviere App ...",
"Error while disabling app" : "Beim Deaktivieren der App ist ein Fehler aufgetreten",
"Disable" : "Deaktivieren",
"Enable" : "Aktivieren",
@@ -123,6 +121,8 @@
"undo" : "rückgängig machen",
"never" : "niemals",
"deleted {userName}" : "{userName} gelöscht",
+ "Unable to add user to group {group}" : "Benutzer kann nicht zur Gruppe {group} hinzugefügt werden ",
+ "Unable to remove user from group {group}" : "Benutzer kann nicht aus der Gruppe {group} entfernt werden ",
"Add group" : "Gruppe hinzufügen",
"Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"",
"no group" : "Keine Gruppe",
@@ -137,7 +137,7 @@
"Unlimited" : "Unbegrenzt",
"Personal info" : "Persönliche Informationen",
"Sessions" : "Sitzungen",
- "App passwords" : "App-Passwörter",
+ "App passwords" : "App-PINs",
"Sync clients" : "Sync-Clients",
"None" : "Keine",
"Login" : "Anmelden",
@@ -196,8 +196,8 @@
"Cron" : "Cron",
"Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.",
"Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.",
- "Cron was not executed yet!" : "Cron wurde bis jetzt noch nicht ausgeführt!",
- "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden der Seite ausführen",
+ "Cron was not executed yet!" : "Cron wurde bislang noch nicht ausgeführt!",
+ "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden einer Seite ausführen",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Benutzen Sie den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.",
"The cron.php needs to be executed by the system user \"%s\"." : "Die cron.php muss durch den Systemnutzer \"%s\" ausgeführt werden.",
@@ -234,18 +234,18 @@
"by %s" : "von %s",
"%s-licensed" : "%s-Lizensiert",
"Documentation:" : "Dokumentation:",
- "User documentation" : "Dokumentation für Benutzer",
- "Admin documentation" : "Dokumentation für Administratoren",
+ "User documentation" : "Benutzer-Dokumentation",
+ "Admin documentation" : "Administratoren-Dokumentation",
"Visit website" : "Webseite besuchen",
"Report a bug" : "Melden Sie einen technischen Fehler",
"Show description …" : "Beschreibung anzeigen…",
"Hide description …" : "Beschreibung ausblenden…",
- "This app has an update available." : "Es ist eine Aktualisierung für diese Anwendung verfügbar.",
+ "This app has an update available." : "Für diese Anwendung ist eine Aktualisierung verfügbar.",
"This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Diese App kann nicht installiert werden, weil die folgenden Abhängigkeiten nicht erfüllt sind:",
"Enable only for specific groups" : "Nur für bestimmte Gruppen aktivieren",
- "Uninstall App" : "App deinstallieren",
+ "Uninstall app" : "App deinstallieren",
"SSL Root Certificates" : "SSL Root Zertifikate",
"Common Name" : "Allgemeiner Name",
"Valid until" : "Gültig bis",
@@ -274,7 +274,7 @@
"Email" : "E-Mail",
"Your email address" : "Ihre E-Mail-Adresse",
"No email address set" : "Keine E-Mail-Adresse angegeben",
- "For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen",
"Phone number" : "Telefonnummer",
"Your phone number" : "Ihre Telefonnummer",
"Address" : "Adresse",
@@ -339,7 +339,11 @@
"Default" : "Standard",
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Language changed" : "Sprache geändert",
+ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
+ "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
+ "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?",
+ "Please wait...." : "Bitte warten…",
"iPhone" : "iPhone",
"add group" : "Gruppe hinzufügen",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)",
@@ -359,6 +363,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
"Experimental applications ahead" : "Experimentelle Apps nachfolgend",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.",
+ "Uninstall App" : "App deinstallieren",
"Enable experimental apps" : "Experimentelle Apps aktivieren",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass Sie jetzt ein %s-Konto haben.<br><br>Ihr Benutzername: %s<br>Greifen Sie darauf zu: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass Sie jetzt ein %s-Konto haben.\n\nIhr Benutzername: %s\nGreifen Sie darauf zu: %s\n\n",
@@ -370,24 +375,6 @@
"Group Admin for" : "Gruppenadministrator für",
"Storage Location" : "Speicherort",
"User Backend" : "Benutzer-Backend",
- "Last Login" : "Letzte Anmeldung",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externer Speicher",
- "Updates" : "Updates",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der Nextcloud-Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.",
- "No apps found for \"{query}\"" : "Keine Applikationen für \"{query}\" gefunden",
- "An error occurred: {message}" : "Ein Fehler ist aufgetreten: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte schauen Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzen.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "ihre Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ihr Server wird mit Microsoft Windows betrieben. Für ein optimales Nutzungserlebnis empfehlen wir dringend Linux.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. Aktivieren Sie 'filelocking.enabled' in der config.php diese Probleme zu vermeiden. Weitere Informationen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfen Sie noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrollieren Sie das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-App funktioniert und welche Anwendungsfälle unterstützt werden.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutzen Sie bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird ab Nextcloud 11 als Fehler behandelt.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird ab Nextcloud 11 als Fehler behandelt.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Wenn Sie das Projekt unterstützen möchten\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie anderen Nutzern</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar."
+ "Last Login" : "Letzte Anmeldung"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 131765857ac..053632812e2 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
"Email saved" : "Το email αποθηκεύτηκε ",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
- "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
- "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
- "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s",
"Couldn't update app." : "Αδυναμία ενημέρωσης εφαρμογής",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
@@ -51,7 +48,6 @@ OC.L10N.register(
"No apps found for your version" : "Δεν βρέθηκαν εφαρμογές για αυτή την έκδοση",
"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." : "Οι εγκεκριμένες εφαρμογές αναπτύχθηκαν από αξιόπιστους προγραμματιστές και έχουν περάσει έναν συνοπτικό έλεγχο ασφαλείας. Διατηρούνται ενεργά σε ένα αποθετήριο ανοιχτού κώδικα και οι συντηρητές θεωρούν οτι είναι σταθερές για κανονική χρήση.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Η εφαρμογή αυτή δεν ελέγχεται για θέματα ασφάλειας και είναι νέα ή είναι γνωστό ότι είναι ασταθής. Η εγκατάσταση γίνεται με δική σας ευθύνη.",
- "Please wait...." : "Παρακαλώ περιμένετε...",
"Error while disabling app" : "Σφάλμα κατά την απενεργοποίηση εισόδου",
"Disable" : "Απενεργοποίηση",
"Enable" : "Ενεργοποίηση",
@@ -206,7 +202,7 @@ OC.L10N.register(
"This app has an update available." : "Αυτή η εφαρμογή έχει διαθέσιμη ενημέρωση.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Αυτή η εφαρμογή δεν μπορεί να εγκατασταθεί διότι δεν εκπληρώνονται οι ακόλουθες εξαρτήσεις:",
"Enable only for specific groups" : "Ενεργοποίηση μόνο για καθορισμένες ομάδες",
- "Uninstall App" : "Απεγκατάσταση Εφαρμογής",
+ "Uninstall app" : "Απεγκατάσταση εφαρμογης",
"SSL Root Certificates" : "Πιστοποιητικά SSL του Root",
"Common Name" : "Κοινό Όνομα",
"Valid until" : "Έγκυρο έως",
@@ -233,6 +229,8 @@ OC.L10N.register(
"Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας",
"No email address set" : "Δεν ορίστηκε διεύθυνση email",
"For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις",
+ "Website" : "Ιστοσελίδα",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:",
"Password" : "Συνθηματικό",
"Current password" : "Τρέχων συνθηματικό",
@@ -281,7 +279,11 @@ OC.L10N.register(
"Default" : "Προκαθορισμένο",
"log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου",
"Language changed" : "Η γλώσσα άλλαξε",
+ "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
+ "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
+ "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
+ "Please wait...." : "Παρακαλώ περιμένετε...",
"iPhone" : "iPhone",
"add group" : "προσθήκη ομάδας",
"Everything (fatal issues, errors, warnings, info, debug)" : "Όλα (καίρια ζητήματα, σφάλματα, προειδοποιήσεις, πληροφορίες, αποσφαλμάτωση)",
@@ -300,6 +302,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Ειδικά όταν χρησιμοποιείτε τον πελάτη για συγχρονισμό στον υπολογιστή σας, δεν συνίσταται η χρήση της SQLite.",
"Experimental applications ahead" : "Πειραματικές εφαρμογές",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Οι πειραματικές εφαρμογές δεν ελέγχονται για θέματα ασφάλειας, είναι ασταθείς και υπό συνεχή εξέλιξη. Η εγκατάσταση τους μπορεί να προκαλέσει απώλεια δεδομένων ή παραβιάσεις της ασφάλειας.",
+ "Uninstall App" : "Απεγκατάσταση Εφαρμογής",
"Enable experimental apps" : "Ενεργοποίηση πειραματικών εφαρμογών",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Χαίρεται,<br><br>απλά σας κάνουμε γνωστό ότι διαθέτετε έναν %s λογαριασμό.<br><br>Το όνομά σας είναι: %s<br>Έχετε πρόσβαση: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Χαίρεται, \nαπλά σας κάνουμε γνωστό ότι διαθέτετε έναν %s λογαριασμό.\nΤο όνομά σας είναι: %s\nΈχετε πρόσβαση: %s\n",
@@ -310,17 +313,6 @@ OC.L10N.register(
"Full Name" : "Πλήρες όνομα",
"Storage Location" : "Τοποθεσία αποθηκευτικού χώρου",
"User Backend" : "Σύστημα υποστήριξης χρήστη",
- "Last Login" : "Τελευταία είσοδος",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο",
- "Updates" : "Ενημερώσεις",
- "No apps found for \"{query}\"" : "Δεν βρέθηκαν εφαρμογές για \"{query}\"",
- "An error occurred: {message}" : "Παρουσιάστηκε σφάλμα: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" href=\"%s\">τεκμηρίωση εγκατάστασης ↗</a> για τις σημειώσεις ρυθμίσεων php και για τις ρυθμίσεις της php του διακομιστή, ειδικότερα όταν χρησιμοποιείτε το php-fpm.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ο διακομιστής σας εκτελείται σε Microsoft Windows. Σας συνιστούμε το Linux για μια βέλτιστη εμπειρία χρήστη.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Παρακαλώ ελέγξτε διπλά τα <a target=\"_blank\" href=\"%s\">εγχειρίδια εγκατάστασης ↗</a>, και ελέγξτε για σφάλματα ή προειδοποιήσεις στο <a href=\"#log-section\">ιστορικό</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Μονάχα η κρυπτογράφηση δεν σας εγγυάται την ασφάλεια του συστήματος. Παρακαλώ δείτε στην τεκμηρίωση του Nextcloud για περισσότερες πληροφορίες σχετικά με τον τρόπο που δουλεύει η εφαρμογή κρυπτογράφησης, και τις υποστηριζόμενες περιπτώσεις.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Για να μεταφερθείτε σε άλλη βάση δεδομένων χρησιμοποιήστε το εργαλείο της γραμμής εντολών: 'occ db:convert-type', ή δείτε στην <a target=\"_blank\" href=\"%s\">τεκμηρίωση ↗</a>."
+ "Last Login" : "Τελευταία είσοδος"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 3360d1b1c64..bfb69683f69 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
"Email saved" : "Το email αποθηκεύτηκε ",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
- "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
- "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
- "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s",
"Couldn't update app." : "Αδυναμία ενημέρωσης εφαρμογής",
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
@@ -49,7 +46,6 @@
"No apps found for your version" : "Δεν βρέθηκαν εφαρμογές για αυτή την έκδοση",
"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." : "Οι εγκεκριμένες εφαρμογές αναπτύχθηκαν από αξιόπιστους προγραμματιστές και έχουν περάσει έναν συνοπτικό έλεγχο ασφαλείας. Διατηρούνται ενεργά σε ένα αποθετήριο ανοιχτού κώδικα και οι συντηρητές θεωρούν οτι είναι σταθερές για κανονική χρήση.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Η εφαρμογή αυτή δεν ελέγχεται για θέματα ασφάλειας και είναι νέα ή είναι γνωστό ότι είναι ασταθής. Η εγκατάσταση γίνεται με δική σας ευθύνη.",
- "Please wait...." : "Παρακαλώ περιμένετε...",
"Error while disabling app" : "Σφάλμα κατά την απενεργοποίηση εισόδου",
"Disable" : "Απενεργοποίηση",
"Enable" : "Ενεργοποίηση",
@@ -204,7 +200,7 @@
"This app has an update available." : "Αυτή η εφαρμογή έχει διαθέσιμη ενημέρωση.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Αυτή η εφαρμογή δεν μπορεί να εγκατασταθεί διότι δεν εκπληρώνονται οι ακόλουθες εξαρτήσεις:",
"Enable only for specific groups" : "Ενεργοποίηση μόνο για καθορισμένες ομάδες",
- "Uninstall App" : "Απεγκατάσταση Εφαρμογής",
+ "Uninstall app" : "Απεγκατάσταση εφαρμογης",
"SSL Root Certificates" : "Πιστοποιητικά SSL του Root",
"Common Name" : "Κοινό Όνομα",
"Valid until" : "Έγκυρο έως",
@@ -231,6 +227,8 @@
"Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας",
"No email address set" : "Δεν ορίστηκε διεύθυνση email",
"For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις",
+ "Website" : "Ιστοσελίδα",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:",
"Password" : "Συνθηματικό",
"Current password" : "Τρέχων συνθηματικό",
@@ -279,7 +277,11 @@
"Default" : "Προκαθορισμένο",
"log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου",
"Language changed" : "Η γλώσσα άλλαξε",
+ "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
+ "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
+ "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
+ "Please wait...." : "Παρακαλώ περιμένετε...",
"iPhone" : "iPhone",
"add group" : "προσθήκη ομάδας",
"Everything (fatal issues, errors, warnings, info, debug)" : "Όλα (καίρια ζητήματα, σφάλματα, προειδοποιήσεις, πληροφορίες, αποσφαλμάτωση)",
@@ -298,6 +300,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Ειδικά όταν χρησιμοποιείτε τον πελάτη για συγχρονισμό στον υπολογιστή σας, δεν συνίσταται η χρήση της SQLite.",
"Experimental applications ahead" : "Πειραματικές εφαρμογές",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Οι πειραματικές εφαρμογές δεν ελέγχονται για θέματα ασφάλειας, είναι ασταθείς και υπό συνεχή εξέλιξη. Η εγκατάσταση τους μπορεί να προκαλέσει απώλεια δεδομένων ή παραβιάσεις της ασφάλειας.",
+ "Uninstall App" : "Απεγκατάσταση Εφαρμογής",
"Enable experimental apps" : "Ενεργοποίηση πειραματικών εφαρμογών",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Χαίρεται,<br><br>απλά σας κάνουμε γνωστό ότι διαθέτετε έναν %s λογαριασμό.<br><br>Το όνομά σας είναι: %s<br>Έχετε πρόσβαση: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Χαίρεται, \nαπλά σας κάνουμε γνωστό ότι διαθέτετε έναν %s λογαριασμό.\nΤο όνομά σας είναι: %s\nΈχετε πρόσβαση: %s\n",
@@ -308,17 +311,6 @@
"Full Name" : "Πλήρες όνομα",
"Storage Location" : "Τοποθεσία αποθηκευτικού χώρου",
"User Backend" : "Σύστημα υποστήριξης χρήστη",
- "Last Login" : "Τελευταία είσοδος",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο",
- "Updates" : "Ενημερώσεις",
- "No apps found for \"{query}\"" : "Δεν βρέθηκαν εφαρμογές για \"{query}\"",
- "An error occurred: {message}" : "Παρουσιάστηκε σφάλμα: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" href=\"%s\">τεκμηρίωση εγκατάστασης ↗</a> για τις σημειώσεις ρυθμίσεων php και για τις ρυθμίσεις της php του διακομιστή, ειδικότερα όταν χρησιμοποιείτε το php-fpm.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ο διακομιστής σας εκτελείται σε Microsoft Windows. Σας συνιστούμε το Linux για μια βέλτιστη εμπειρία χρήστη.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Παρακαλώ ελέγξτε διπλά τα <a target=\"_blank\" href=\"%s\">εγχειρίδια εγκατάστασης ↗</a>, και ελέγξτε για σφάλματα ή προειδοποιήσεις στο <a href=\"#log-section\">ιστορικό</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Μονάχα η κρυπτογράφηση δεν σας εγγυάται την ασφάλεια του συστήματος. Παρακαλώ δείτε στην τεκμηρίωση του Nextcloud για περισσότερες πληροφορίες σχετικά με τον τρόπο που δουλεύει η εφαρμογή κρυπτογράφησης, και τις υποστηριζόμενες περιπτώσεις.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Για να μεταφερθείτε σε άλλη βάση δεδομένων χρησιμοποιήστε το εργαλείο της γραμμής εντολών: 'occ db:convert-type', ή δείτε στην <a target=\"_blank\" href=\"%s\">τεκμηρίωση ↗</a>."
+ "Last Login" : "Τελευταία είσοδος"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index af8e8b30796..930205ba494 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Unable to change mail address",
"Email saved" : "Email saved",
"Couldn't remove app." : "Couldn't remove app.",
- "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
- "Unable to add user to group %s" : "Unable to add user to group %s",
- "Unable to remove user from group %s" : "Unable to remove user from group %s",
"Couldn't update app." : "Couldn't update app.",
"Add trusted domain" : "Add trusted domain",
"Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished",
@@ -53,7 +50,6 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Official apps are developed by the community. They offer additional functionality and are ready for production use.",
"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." : "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.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "This app is not checked for security issues and is new or known to be unstable. Install at your own risk.",
- "Please wait...." : "Please wait....",
"Error while disabling app" : "Error whilst disabling app",
"Disable" : "Disable",
"Enable" : "Enable",
@@ -201,7 +197,6 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "This app has no maximum Nextcloud version assigned. This will cause an error in the future.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "This app cannot be installed because the following dependencies are not fulfilled:",
"Enable only for specific groups" : "Enable only for specific groups",
- "Uninstall App" : "Uninstall App",
"SSL Root Certificates" : "SSL Root Certificates",
"Common Name" : "Common Name",
"Valid until" : "Valid until",
@@ -266,7 +261,11 @@ OC.L10N.register(
"Default" : "Default",
"log-level out of allowed range" : "log-level out of allowed range",
"Language changed" : "Language changed",
+ "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
+ "Unable to add user to group %s" : "Unable to add user to group %s",
+ "Unable to remove user from group %s" : "Unable to remove user from group %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
+ "Please wait...." : "Please wait....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues",
"Warnings, errors and fatal issues" : "Warnings, errors and fatal issues",
@@ -284,14 +283,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.",
"Experimental applications ahead" : "Experimental applications ahead",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches.",
+ "Uninstall App" : "Uninstall App",
"Enable experimental apps" : "Enable experimental apps",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n",
- "Group" : "Group",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "External Storage",
- "Updates" : "Updates",
- "An error occurred: {message}" : "An error occurred: {message}"
+ "Group" : "Group"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index 4c52e4a8010..0584f6a5bb1 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Unable to change mail address",
"Email saved" : "Email saved",
"Couldn't remove app." : "Couldn't remove app.",
- "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
- "Unable to add user to group %s" : "Unable to add user to group %s",
- "Unable to remove user from group %s" : "Unable to remove user from group %s",
"Couldn't update app." : "Couldn't update app.",
"Add trusted domain" : "Add trusted domain",
"Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished",
@@ -51,7 +48,6 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Official apps are developed by the community. They offer additional functionality and are ready for production use.",
"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." : "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.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "This app is not checked for security issues and is new or known to be unstable. Install at your own risk.",
- "Please wait...." : "Please wait....",
"Error while disabling app" : "Error whilst disabling app",
"Disable" : "Disable",
"Enable" : "Enable",
@@ -199,7 +195,6 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "This app has no maximum Nextcloud version assigned. This will cause an error in the future.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "This app cannot be installed because the following dependencies are not fulfilled:",
"Enable only for specific groups" : "Enable only for specific groups",
- "Uninstall App" : "Uninstall App",
"SSL Root Certificates" : "SSL Root Certificates",
"Common Name" : "Common Name",
"Valid until" : "Valid until",
@@ -264,7 +259,11 @@
"Default" : "Default",
"log-level out of allowed range" : "log-level out of allowed range",
"Language changed" : "Language changed",
+ "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
+ "Unable to add user to group %s" : "Unable to add user to group %s",
+ "Unable to remove user from group %s" : "Unable to remove user from group %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
+ "Please wait...." : "Please wait....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues",
"Warnings, errors and fatal issues" : "Warnings, errors and fatal issues",
@@ -282,14 +281,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.",
"Experimental applications ahead" : "Experimental applications ahead",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches.",
+ "Uninstall App" : "Uninstall App",
"Enable experimental apps" : "Enable experimental apps",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n",
- "Group" : "Group",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "External Storage",
- "Updates" : "Updates",
- "An error occurred: {message}" : "An error occurred: {message}"
+ "Group" : "Group"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js
index 8d5599ee970..57bacd60c50 100644
--- a/settings/l10n/eo.js
+++ b/settings/l10n/eo.js
@@ -14,13 +14,9 @@ OC.L10N.register(
"Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
"Your full name has been changed." : "Via plena nomo ŝanĝitas.",
"Email saved" : "La retpoŝtadreso konserviĝis",
- "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.",
- "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s",
- "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s",
"Couldn't update app." : "Ne eblis ĝisdatigi la aplikaĵon.",
"Sending..." : "Sendante...",
"All" : "Ĉio",
- "Please wait...." : "Bonvolu atendi...",
"Error while disabling app" : "Eraris malkapabligo de aplikaĵo",
"Disable" : "Malkapabligi",
"Enable" : "Kapabligi",
@@ -85,7 +81,6 @@ OC.L10N.register(
"Show description …" : "Montri priskribon...",
"Hide description …" : "Malmontri priskribon...",
"Enable only for specific groups" : "Kapabligi nur por specifajn grupojn",
- "Uninstall App" : "Malinstali aplikaĵon",
"Common Name" : "Komuna nomo",
"Valid until" : "Valida ĝis",
"Valid until %s" : "Valida ĝis %s",
@@ -126,6 +121,10 @@ OC.L10N.register(
"change email address" : "ŝanĝi retpoŝtadreson",
"Default" : "Defaŭlta",
"Language changed" : "La lingvo estas ŝanĝita",
+ "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.",
+ "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s",
+ "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s",
+ "Please wait...." : "Bonvolu atendi...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Ĉio (fatalaĵoj, eraroj, avertoj, informoj, sencimigaj mesaĝoj)",
"Info, warnings, errors and fatal issues" : "Informoj, avertoj, eraroj kaj fatalaĵoj",
"Warnings, errors and fatal issues" : "Avertoj, eraroj kaj fatalaĵoj",
@@ -137,8 +136,7 @@ OC.L10N.register(
"More" : "Pli",
"Less" : "Malpli",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite uziĝas kiel datumbazo. Por pli grandaj instaloj ni rekomendas ŝanĝi ĝin per malsama datumbazomotoro.",
- "Group" : "Grupo",
- "External Storage" : "Malena memorilo",
- "Updates" : "Ĝisdatigoj"
+ "Uninstall App" : "Malinstali aplikaĵon",
+ "Group" : "Grupo"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json
index db55cf74440..adb48f15be5 100644
--- a/settings/l10n/eo.json
+++ b/settings/l10n/eo.json
@@ -12,13 +12,9 @@
"Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon",
"Your full name has been changed." : "Via plena nomo ŝanĝitas.",
"Email saved" : "La retpoŝtadreso konserviĝis",
- "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.",
- "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s",
- "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s",
"Couldn't update app." : "Ne eblis ĝisdatigi la aplikaĵon.",
"Sending..." : "Sendante...",
"All" : "Ĉio",
- "Please wait...." : "Bonvolu atendi...",
"Error while disabling app" : "Eraris malkapabligo de aplikaĵo",
"Disable" : "Malkapabligi",
"Enable" : "Kapabligi",
@@ -83,7 +79,6 @@
"Show description …" : "Montri priskribon...",
"Hide description …" : "Malmontri priskribon...",
"Enable only for specific groups" : "Kapabligi nur por specifajn grupojn",
- "Uninstall App" : "Malinstali aplikaĵon",
"Common Name" : "Komuna nomo",
"Valid until" : "Valida ĝis",
"Valid until %s" : "Valida ĝis %s",
@@ -124,6 +119,10 @@
"change email address" : "ŝanĝi retpoŝtadreson",
"Default" : "Defaŭlta",
"Language changed" : "La lingvo estas ŝanĝita",
+ "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.",
+ "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s",
+ "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s",
+ "Please wait...." : "Bonvolu atendi...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Ĉio (fatalaĵoj, eraroj, avertoj, informoj, sencimigaj mesaĝoj)",
"Info, warnings, errors and fatal issues" : "Informoj, avertoj, eraroj kaj fatalaĵoj",
"Warnings, errors and fatal issues" : "Avertoj, eraroj kaj fatalaĵoj",
@@ -135,8 +134,7 @@
"More" : "Pli",
"Less" : "Malpli",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite uziĝas kiel datumbazo. Por pli grandaj instaloj ni rekomendas ŝanĝi ĝin per malsama datumbazomotoro.",
- "Group" : "Grupo",
- "External Storage" : "Malena memorilo",
- "Updates" : "Ĝisdatigoj"
+ "Uninstall App" : "Malinstali aplikaĵon",
+ "Group" : "Grupo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index e7ac03ebd14..946576aba14 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Tiene que configurar su dirección de correo electrónico antes de poder enviar mensajes de prueba.",
"Invalid request" : "Petición no válida",
"Invalid mail address" : "Dirección de correo inválida",
+ "No valid group selected" : "No se ha seleccionado un grupo válido",
"A user with that name already exists." : "Ya existe un usuario con ese nombre.",
"Unable to create user." : "No se pudo crear el usuario.",
"Your %s account was created" : "Se ha creado su cuenta de %s",
@@ -39,9 +40,6 @@ OC.L10N.register(
"Email saved" : "Correo electrónico guardado",
"Password confirmation is required" : "Se requiere confirmar la contraseña",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la aplicación.",
"Are you really sure you want add {domain} as trusted domain?" : "¿Está realmente seguro de que quiere añadir {domain} como dominio de confianza?",
"Add trusted domain" : "Agregar dominio de confianza",
@@ -58,7 +56,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las apps oficiales están desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad central y están preparadas para uso en producción.",
"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." : "Las aplicaciones aprobadas las desarrollan desarrolladores de confianza y han pasado un control de seguridad superficial. Estas se mantienen activamente en un repositorio de código abierto y sus encargados las consideran estables para un uso normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "No se han verificado los posibles problemas de seguridad de esta app. Es nueva o bien es conocida por ser inestable. Instálela bajo su propio riesgo.",
- "Please wait...." : "Espere, por favor....",
+ "Enabling app …" : "Activando app ...",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -125,6 +123,8 @@ OC.L10N.register(
"undo" : "deshacer",
"never" : "nunca",
"deleted {userName}" : "borrado {userName}",
+ "Unable to add user to group {group}" : "No se puede añadir el usuario al grupo {group}",
+ "Unable to remove user from group {group}" : "No se puede eliminar el usuario del grupo {group}",
"Add group" : "Añadir grupo",
"Invalid quota value \"{val}\"" : "Valor de cuota inválido \"{val}\"",
"no group" : "sin grupo",
@@ -247,7 +247,7 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta app no tiene una versión máxima de Nextcloud asignada. Esto será un error en el futuro.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede instalarse porque las siguientes dependencias no están cumplimentadas:",
"Enable only for specific groups" : "Activar solamente para grupos específicos",
- "Uninstall App" : "Desinstalar aplicación",
+ "Uninstall app" : "Desinstalar aplicación",
"SSL Root Certificates" : "Raíz de certificados SSL ",
"Common Name" : "Nombre común",
"Valid until" : "Válido hasta",
@@ -296,6 +296,7 @@ OC.L10N.register(
"Desktop client" : "Cliente de escritorio",
"Android app" : "Aplicación de Android",
"iOS app" : "La aplicación de iOS",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Si deseas apoyar el proyecto, ¡{contributeopen}únete al desarrollo{linkclose} o {contributeopen}difúnde la palabra{linkclose}!",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
"Web, desktop and mobile clients currently logged in to your account." : "Clientes web, móviles y de escritorio actualmente conectados a tu cuenta.",
"Device" : "Dispositivo",
@@ -308,8 +309,12 @@ OC.L10N.register(
"For security reasons this password will only be shown once." : "Para seguridad, esta contraseña será mostrado solamente una vez.",
"Username" : "Nombre de usuario",
"Done" : "Hecho",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud{linkclose}, el {githubopen}código fuente{linkclose} está licenciado bajo la {licenseopen}AGPL{linkclose}.",
"Follow us on Google Plus!" : "¡Síganos en Google+!",
+ "Like our facebook page!" : "¡Da a Me gusta en nuestra página de Facebook!",
"Subscribe to our twitter channel!" : "Suscríbete a nuestro canal de Twitter!",
+ "Subscribe to our news feed!" : "¡Suscríbete a nuestro feed de noticias!",
+ "Subscribe to our newsletter!" : "¡Suscríbete a nuestro boletín!",
"Show storage location" : "Mostrar la ubicación del almacenamiento",
"Show last log in" : "Mostrar el último inicio de sesión",
"Show user backend" : "Mostrar motor de usuario",
@@ -336,7 +341,11 @@ OC.L10N.register(
"Default" : "Predeterminado",
"log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
+ "Please wait...." : "Espere, por favor....",
"iPhone" : "iPhone",
"add group" : "añadir grupo",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
@@ -356,22 +365,18 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite está desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.",
"Experimental applications ahead" : "Aplicaciones experimentales más adelante",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Las aplicaciones experimentales no están verificadas por problemas de seguridad, recientes o conocidas por ser inestables y/o bajo un fuerte desarrollo. Instalándolas pueden causar pérdida de datos o violación de seguridades.",
+ "Uninstall App" : "Desinstalar aplicación",
"Enable experimental apps" : "Habilitar aplicaciones experimentales",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "¿Qué tal?,<br><br>este mensaje es para hacerle saber que ahora tiene una %s cuenta.<br><br>Su nombre de usuario: %s<br>Acceda en: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, ¿qué tal?,\n\nEste mensaje es para hacerle saber que ahora tiene una cuenta %s.\n\nSu nombre de usuario: %s\nAcceda en: %s\n\n",
"If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">únase al desarrollo</a>\n\t\to\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">difunda la palabra</a>.",
"Add Group" : "Agregar grupo",
"Group" : "Grupo",
+ "Default Quota" : "Cuota por defecto.",
"Full Name" : "Nombre completo",
"Group Admin for" : "Grupo administrador para",
"Storage Location" : "Ubicación de almacenamiento",
"User Backend" : "Usuario de backend",
- "Last Login" : "Último inicio de sesión",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Almacenamiento externo",
- "Updates" : "Actualizaciones",
- "No apps found for \"{query}\"" : "No se han encontrado apps para {query}",
- "An error occurred: {message}" : "Ocurrió un error: {message}"
+ "Last Login" : "Último inicio de sesión"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 2ad9f67d3f1..c410fb3a279 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -23,6 +23,7 @@
"You need to set your user email before being able to send test emails." : "Tiene que configurar su dirección de correo electrónico antes de poder enviar mensajes de prueba.",
"Invalid request" : "Petición no válida",
"Invalid mail address" : "Dirección de correo inválida",
+ "No valid group selected" : "No se ha seleccionado un grupo válido",
"A user with that name already exists." : "Ya existe un usuario con ese nombre.",
"Unable to create user." : "No se pudo crear el usuario.",
"Your %s account was created" : "Se ha creado su cuenta de %s",
@@ -37,9 +38,6 @@
"Email saved" : "Correo electrónico guardado",
"Password confirmation is required" : "Se requiere confirmar la contraseña",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la aplicación.",
"Are you really sure you want add {domain} as trusted domain?" : "¿Está realmente seguro de que quiere añadir {domain} como dominio de confianza?",
"Add trusted domain" : "Agregar dominio de confianza",
@@ -56,7 +54,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las apps oficiales están desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad central y están preparadas para uso en producción.",
"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." : "Las aplicaciones aprobadas las desarrollan desarrolladores de confianza y han pasado un control de seguridad superficial. Estas se mantienen activamente en un repositorio de código abierto y sus encargados las consideran estables para un uso normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "No se han verificado los posibles problemas de seguridad de esta app. Es nueva o bien es conocida por ser inestable. Instálela bajo su propio riesgo.",
- "Please wait...." : "Espere, por favor....",
+ "Enabling app …" : "Activando app ...",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -123,6 +121,8 @@
"undo" : "deshacer",
"never" : "nunca",
"deleted {userName}" : "borrado {userName}",
+ "Unable to add user to group {group}" : "No se puede añadir el usuario al grupo {group}",
+ "Unable to remove user from group {group}" : "No se puede eliminar el usuario del grupo {group}",
"Add group" : "Añadir grupo",
"Invalid quota value \"{val}\"" : "Valor de cuota inválido \"{val}\"",
"no group" : "sin grupo",
@@ -245,7 +245,7 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta app no tiene una versión máxima de Nextcloud asignada. Esto será un error en el futuro.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede instalarse porque las siguientes dependencias no están cumplimentadas:",
"Enable only for specific groups" : "Activar solamente para grupos específicos",
- "Uninstall App" : "Desinstalar aplicación",
+ "Uninstall app" : "Desinstalar aplicación",
"SSL Root Certificates" : "Raíz de certificados SSL ",
"Common Name" : "Nombre común",
"Valid until" : "Válido hasta",
@@ -294,6 +294,7 @@
"Desktop client" : "Cliente de escritorio",
"Android app" : "Aplicación de Android",
"iOS app" : "La aplicación de iOS",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Si deseas apoyar el proyecto, ¡{contributeopen}únete al desarrollo{linkclose} o {contributeopen}difúnde la palabra{linkclose}!",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
"Web, desktop and mobile clients currently logged in to your account." : "Clientes web, móviles y de escritorio actualmente conectados a tu cuenta.",
"Device" : "Dispositivo",
@@ -306,8 +307,12 @@
"For security reasons this password will only be shown once." : "Para seguridad, esta contraseña será mostrado solamente una vez.",
"Username" : "Nombre de usuario",
"Done" : "Hecho",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud{linkclose}, el {githubopen}código fuente{linkclose} está licenciado bajo la {licenseopen}AGPL{linkclose}.",
"Follow us on Google Plus!" : "¡Síganos en Google+!",
+ "Like our facebook page!" : "¡Da a Me gusta en nuestra página de Facebook!",
"Subscribe to our twitter channel!" : "Suscríbete a nuestro canal de Twitter!",
+ "Subscribe to our news feed!" : "¡Suscríbete a nuestro feed de noticias!",
+ "Subscribe to our newsletter!" : "¡Suscríbete a nuestro boletín!",
"Show storage location" : "Mostrar la ubicación del almacenamiento",
"Show last log in" : "Mostrar el último inicio de sesión",
"Show user backend" : "Mostrar motor de usuario",
@@ -334,7 +339,11 @@
"Default" : "Predeterminado",
"log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
+ "Please wait...." : "Espere, por favor....",
"iPhone" : "iPhone",
"add group" : "añadir grupo",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
@@ -354,22 +363,18 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite está desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.",
"Experimental applications ahead" : "Aplicaciones experimentales más adelante",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Las aplicaciones experimentales no están verificadas por problemas de seguridad, recientes o conocidas por ser inestables y/o bajo un fuerte desarrollo. Instalándolas pueden causar pérdida de datos o violación de seguridades.",
+ "Uninstall App" : "Desinstalar aplicación",
"Enable experimental apps" : "Habilitar aplicaciones experimentales",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "¿Qué tal?,<br><br>este mensaje es para hacerle saber que ahora tiene una %s cuenta.<br><br>Su nombre de usuario: %s<br>Acceda en: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, ¿qué tal?,\n\nEste mensaje es para hacerle saber que ahora tiene una cuenta %s.\n\nSu nombre de usuario: %s\nAcceda en: %s\n\n",
"If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">únase al desarrollo</a>\n\t\to\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">difunda la palabra</a>.",
"Add Group" : "Agregar grupo",
"Group" : "Grupo",
+ "Default Quota" : "Cuota por defecto.",
"Full Name" : "Nombre completo",
"Group Admin for" : "Grupo administrador para",
"Storage Location" : "Ubicación de almacenamiento",
"User Backend" : "Usuario de backend",
- "Last Login" : "Último inicio de sesión",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Almacenamiento externo",
- "Updates" : "Actualizaciones",
- "No apps found for \"{query}\"" : "No se han encontrado apps para {query}",
- "An error occurred: {message}" : "Ocurrió un error: {message}"
+ "Last Login" : "Último inicio de sesión"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index d98c87764a6..a557cec74b1 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -16,13 +16,9 @@ OC.L10N.register(
"Unable to change full name" : "Imposible cambiar el nombre completo",
"Your full name has been changed." : "Su nombre completo ha sido cambiado.",
"Email saved" : "e-mail guardado",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
- "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
- "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la App.",
"Sending..." : "Enviando...",
"All" : "Todos",
- "Please wait...." : "Por favor, esperá....",
"Error while disabling app" : "Se ha producido un error mientras se deshabilitaba la aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -104,6 +100,10 @@ OC.L10N.register(
"set new password" : "Configurar nueva contraseña",
"Default" : "Predeterminado",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
+ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s",
+ "Please wait...." : "Por favor, esperá....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (notificaciones fatales, errores, advertencias, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, advertencias, errores y notificaciones fatales",
"Warnings, errors and fatal issues" : "Advertencias, errores y notificaciones fatales",
@@ -113,9 +113,6 @@ OC.L10N.register(
"More" : "Más",
"Less" : "Menos",
"Allow users to send mail notification for shared files" : "Habilitar a los usuarios para enviar notificaciones por correo para archivos compartidos",
- "Group" : "Grupo",
- "APCu" : "APCu",
- "External Storage" : "Almacenamiento externo",
- "Updates" : "Actualizaciones"
+ "Group" : "Grupo"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index a6bbbdba054..2d6ed9b8c32 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -14,13 +14,9 @@
"Unable to change full name" : "Imposible cambiar el nombre completo",
"Your full name has been changed." : "Su nombre completo ha sido cambiado.",
"Email saved" : "e-mail guardado",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
- "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
- "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la App.",
"Sending..." : "Enviando...",
"All" : "Todos",
- "Please wait...." : "Por favor, esperá....",
"Error while disabling app" : "Se ha producido un error mientras se deshabilitaba la aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -102,6 +98,10 @@
"set new password" : "Configurar nueva contraseña",
"Default" : "Predeterminado",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden quitar a si mismos del grupo administrador. ",
+ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s",
+ "Please wait...." : "Por favor, esperá....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (notificaciones fatales, errores, advertencias, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, advertencias, errores y notificaciones fatales",
"Warnings, errors and fatal issues" : "Advertencias, errores y notificaciones fatales",
@@ -111,9 +111,6 @@
"More" : "Más",
"Less" : "Menos",
"Allow users to send mail notification for shared files" : "Habilitar a los usuarios para enviar notificaciones por correo para archivos compartidos",
- "Group" : "Grupo",
- "APCu" : "APCu",
- "External Storage" : "Almacenamiento externo",
- "Updates" : "Actualizaciones"
+ "Group" : "Grupo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index bd7b9dc7c9a..c07e9a94267 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -14,12 +14,8 @@ OC.L10N.register(
"Unable to change full name" : "No se puede cambiar el nombre completo",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
"Email saved" : "Correo electrónico guardado",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la aplicación.",
"All" : "Todos",
- "Please wait...." : "Espere, por favor....",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -80,6 +76,10 @@ OC.L10N.register(
"set new password" : "establecer nueva contraseña",
"Default" : "Predeterminado",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
+ "Please wait...." : "Espere, por favor....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
"Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales",
"Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales",
@@ -87,7 +87,6 @@ OC.L10N.register(
"Fatal issues only" : "Problemas fatales solamente",
"Log" : "Registro",
"More" : "Más",
- "Less" : "Menos",
- "External Storage" : "Almacenamiento externo"
+ "Less" : "Menos"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index 79ea5692cd2..0eca2bb49ae 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -12,12 +12,8 @@
"Unable to change full name" : "No se puede cambiar el nombre completo",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
"Email saved" : "Correo electrónico guardado",
- "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
"Couldn't update app." : "No se pudo actualizar la aplicación.",
"All" : "Todos",
- "Please wait...." : "Espere, por favor....",
"Error while disabling app" : "Error mientras se desactivaba la aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -78,6 +74,10 @@
"set new password" : "establecer nueva contraseña",
"Default" : "Predeterminado",
"Language changed" : "Idioma cambiado",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s",
+ "Please wait...." : "Espere, por favor....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
"Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales",
"Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales",
@@ -85,7 +85,6 @@
"Fatal issues only" : "Problemas fatales solamente",
"Log" : "Registro",
"More" : "Más",
- "Less" : "Menos",
- "External Storage" : "Almacenamiento externo"
+ "Less" : "Menos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index 2c259f5626f..58ebcc50cd3 100644
--- a/settings/l10n/et_EE.js
+++ b/settings/l10n/et_EE.js
@@ -30,9 +30,6 @@ OC.L10N.register(
"Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus",
"Email saved" : "Kiri on salvestatud",
"Couldn't remove app." : "Ei suutnud rakendit eemaldada.",
- "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada",
- "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s",
- "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s",
"Couldn't update app." : "Rakenduse uuendamine ebaõnnestus.",
"Add trusted domain" : "Lis ausaldusväärne domeen",
"Migration in progress. Please wait until the migration is finished" : "Kolimine on käimas. Palun oota, kuni see on lõpetatud",
@@ -42,7 +39,6 @@ OC.L10N.register(
"All" : "Kõik",
"Update to %s" : "Uuenda versioonile %s",
"No apps found for your version" : "Sinu versiooni jaoks ei leitud ühtegi rakendust",
- "Please wait...." : "Palun oota...",
"Error while disabling app" : "Viga rakenduse keelamisel",
"Disable" : "Lülita välja",
"Enable" : "Lülita sisse",
@@ -145,7 +141,6 @@ OC.L10N.register(
"Show description …" : "Näita kirjeldist ...",
"Hide description …" : "Peida kirjeldus ...",
"Enable only for specific groups" : "Luba ainult kindlad grupid",
- "Uninstall App" : "Eemada rakend",
"SSL Root Certificates" : "SLL Juur sertifikaadid",
"Common Name" : "Üldnimetus",
"Valid until" : "Kehtib kuni",
@@ -199,7 +194,11 @@ OC.L10N.register(
"change email address" : "muuda e-posti aadressi",
"Default" : "Vaikeväärtus",
"Language changed" : "Keel on muudetud",
+ "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada",
+ "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s",
+ "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
+ "Please wait...." : "Palun oota...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Kõik (tõsised probleemid, veateated, hoiatused, info, veatuvastus)",
"Info, warnings, errors and fatal issues" : "Info, hoiatused, veateted ja tõsised probleemid",
"Warnings, errors and fatal issues" : "Hoiatused, veateated ja tõsised probleemid",
@@ -213,11 +212,8 @@ OC.L10N.register(
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logifail on suurem kui 100 MB. Allalaadimine võib veidi aega võtta!",
"Allow users to send mail notification for shared files" : "Luba kasutajatel saata e-posti teavitusi jagatud failide kohta",
"Experimental applications ahead" : "Ees on katsetusjärgus rakendused",
+ "Uninstall App" : "Eemada rakend",
"Enable experimental apps" : "Luba katsetusjärgus rakenduste kasutamine",
- "Group" : "Grupp",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Väline salvestuskoht",
- "Updates" : "Uuendused"
+ "Group" : "Grupp"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index 03a4c54f9c0..d8732c4e338 100644
--- a/settings/l10n/et_EE.json
+++ b/settings/l10n/et_EE.json
@@ -28,9 +28,6 @@
"Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus",
"Email saved" : "Kiri on salvestatud",
"Couldn't remove app." : "Ei suutnud rakendit eemaldada.",
- "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada",
- "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s",
- "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s",
"Couldn't update app." : "Rakenduse uuendamine ebaõnnestus.",
"Add trusted domain" : "Lis ausaldusväärne domeen",
"Migration in progress. Please wait until the migration is finished" : "Kolimine on käimas. Palun oota, kuni see on lõpetatud",
@@ -40,7 +37,6 @@
"All" : "Kõik",
"Update to %s" : "Uuenda versioonile %s",
"No apps found for your version" : "Sinu versiooni jaoks ei leitud ühtegi rakendust",
- "Please wait...." : "Palun oota...",
"Error while disabling app" : "Viga rakenduse keelamisel",
"Disable" : "Lülita välja",
"Enable" : "Lülita sisse",
@@ -143,7 +139,6 @@
"Show description …" : "Näita kirjeldist ...",
"Hide description …" : "Peida kirjeldus ...",
"Enable only for specific groups" : "Luba ainult kindlad grupid",
- "Uninstall App" : "Eemada rakend",
"SSL Root Certificates" : "SLL Juur sertifikaadid",
"Common Name" : "Üldnimetus",
"Valid until" : "Kehtib kuni",
@@ -197,7 +192,11 @@
"change email address" : "muuda e-posti aadressi",
"Default" : "Vaikeväärtus",
"Language changed" : "Keel on muudetud",
+ "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada",
+ "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s",
+ "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
+ "Please wait...." : "Palun oota...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Kõik (tõsised probleemid, veateated, hoiatused, info, veatuvastus)",
"Info, warnings, errors and fatal issues" : "Info, hoiatused, veateted ja tõsised probleemid",
"Warnings, errors and fatal issues" : "Hoiatused, veateated ja tõsised probleemid",
@@ -211,11 +210,8 @@
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logifail on suurem kui 100 MB. Allalaadimine võib veidi aega võtta!",
"Allow users to send mail notification for shared files" : "Luba kasutajatel saata e-posti teavitusi jagatud failide kohta",
"Experimental applications ahead" : "Ees on katsetusjärgus rakendused",
+ "Uninstall App" : "Eemada rakend",
"Enable experimental apps" : "Luba katsetusjärgus rakenduste kasutamine",
- "Group" : "Grupp",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Väline salvestuskoht",
- "Updates" : "Uuendused"
+ "Group" : "Grupp"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index 31e6a91a8d2..ac332f20a21 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -29,15 +29,11 @@ OC.L10N.register(
"Unable to change mail address" : "Ezin izan da posta helbidea aldatu",
"Email saved" : "Eposta gorde da",
"Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..",
- "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
- "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu",
- "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Couldn't update app." : "Ezin izan da aplikazioa eguneratu.",
"Add trusted domain" : "Gehitu domeinu fidagarria",
"Sending..." : "Bidaltzen...",
"All" : "Denak",
"Update to %s" : "Eguneratu %sra",
- "Please wait...." : "Itxoin mesedez...",
"Error while disabling app" : "Erroea izan da aplikazioa desgaitzerakoan",
"Disable" : "Ez-gaitu",
"Enable" : "Gaitu",
@@ -118,7 +114,6 @@ OC.L10N.register(
"Documentation:" : "Dokumentazioa:",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Aplikazioa ezin da instalatu hurrengo menpekotasunak betetzen ez direlako:",
"Enable only for specific groups" : "Baimendu bakarri talde espezifikoetarako",
- "Uninstall App" : "Desinstalatu aplikazioa",
"Common Name" : "Izen arrunta",
"Valid until" : "Data hau arte baliogarria",
"Issued By" : "Honek bidalita",
@@ -167,7 +162,11 @@ OC.L10N.register(
"Default" : "Lehenetsia",
"log-level out of allowed range" : "erregistro-maila baimendutako tartetik at",
"Language changed" : "Hizkuntza aldatuta",
+ "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
+ "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu",
+ "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
+ "Please wait...." : "Itxoin mesedez...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Dena (arazo larriak, erroreak, abisuak, informazioa, arazketa)",
"Info, warnings, errors and fatal issues" : "Informazioa, abisuak, erroreak eta arazo larriak.",
"Warnings, errors and fatal issues" : "Abisuak, erroreak eta arazo larriak",
@@ -179,10 +178,9 @@ OC.L10N.register(
"Less" : "Gutxiago",
"Allow users to send mail notification for shared files" : "Baimendu erabiltzaileak epostako jakinarazpenak bidaltzen partekatutako fitxategientzat",
"Allow users to send mail notification for shared files to other users" : "Baimendu erabiltzaileak beste erabiltzaileei epostako jakinarazpenak bidaltzen partekatutako fitxategientzat",
+ "Uninstall App" : "Desinstalatu aplikazioa",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Kaixo,<br><br>orain %s kontu bat duzula esateko besterik ez.<br><br>Zure erabiltzailea: %s<br>Sar zaitez: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Kaixo,\n\norain %s kontu bat duzula esateko besterik ez.\n\nZure erabiltzailea: %s\nSar zaitez: %s\n\n",
- "Group" : "Taldea",
- "External Storage" : "Kanpoko biltegiratzea",
- "Updates" : "Eguneraketak"
+ "Group" : "Taldea"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 7575079f23e..a7d45148ef3 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -27,15 +27,11 @@
"Unable to change mail address" : "Ezin izan da posta helbidea aldatu",
"Email saved" : "Eposta gorde da",
"Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..",
- "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
- "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu",
- "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Couldn't update app." : "Ezin izan da aplikazioa eguneratu.",
"Add trusted domain" : "Gehitu domeinu fidagarria",
"Sending..." : "Bidaltzen...",
"All" : "Denak",
"Update to %s" : "Eguneratu %sra",
- "Please wait...." : "Itxoin mesedez...",
"Error while disabling app" : "Erroea izan da aplikazioa desgaitzerakoan",
"Disable" : "Ez-gaitu",
"Enable" : "Gaitu",
@@ -116,7 +112,6 @@
"Documentation:" : "Dokumentazioa:",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Aplikazioa ezin da instalatu hurrengo menpekotasunak betetzen ez direlako:",
"Enable only for specific groups" : "Baimendu bakarri talde espezifikoetarako",
- "Uninstall App" : "Desinstalatu aplikazioa",
"Common Name" : "Izen arrunta",
"Valid until" : "Data hau arte baliogarria",
"Issued By" : "Honek bidalita",
@@ -165,7 +160,11 @@
"Default" : "Lehenetsia",
"log-level out of allowed range" : "erregistro-maila baimendutako tartetik at",
"Language changed" : "Hizkuntza aldatuta",
+ "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik",
+ "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu",
+ "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
+ "Please wait...." : "Itxoin mesedez...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Dena (arazo larriak, erroreak, abisuak, informazioa, arazketa)",
"Info, warnings, errors and fatal issues" : "Informazioa, abisuak, erroreak eta arazo larriak.",
"Warnings, errors and fatal issues" : "Abisuak, erroreak eta arazo larriak",
@@ -177,10 +176,9 @@
"Less" : "Gutxiago",
"Allow users to send mail notification for shared files" : "Baimendu erabiltzaileak epostako jakinarazpenak bidaltzen partekatutako fitxategientzat",
"Allow users to send mail notification for shared files to other users" : "Baimendu erabiltzaileak beste erabiltzaileei epostako jakinarazpenak bidaltzen partekatutako fitxategientzat",
+ "Uninstall App" : "Desinstalatu aplikazioa",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Kaixo,<br><br>orain %s kontu bat duzula esateko besterik ez.<br><br>Zure erabiltzailea: %s<br>Sar zaitez: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Kaixo,\n\norain %s kontu bat duzula esateko besterik ez.\n\nZure erabiltzailea: %s\nSar zaitez: %s\n\n",
- "Group" : "Taldea",
- "External Storage" : "Kanpoko biltegiratzea",
- "Updates" : "Eguneraketak"
+ "Group" : "Taldea"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index 1adb0a40646..712d52864e2 100644
--- a/settings/l10n/fa.js
+++ b/settings/l10n/fa.js
@@ -28,9 +28,6 @@ OC.L10N.register(
"Unable to change mail address" : "تغییر آدرس ایمیل امکان‌پذیر نیست",
"Email saved" : "ایمیل ذخیره شد",
"Couldn't remove app." : "امکان حذف برنامه وجود ندارد.",
- "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند",
- "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست",
- "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست",
"Couldn't update app." : "برنامه را نمی توان به هنگام ساخت.",
"Add trusted domain" : "افزودن دامنه مورد اعتماد",
"Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید",
@@ -40,7 +37,6 @@ OC.L10N.register(
"All" : "همه",
"Update to %s" : "بروزرسانی به %s",
"No apps found for your version" : "هیچ برنامه‌ای برای نسخه‌ی شما یافت نشد",
- "Please wait...." : "لطفا صبر کنید ...",
"Error while disabling app" : "خطا در هنگام غیر فعال سازی برنامه",
"Disable" : "غیرفعال",
"Enable" : "فعال",
@@ -139,7 +135,6 @@ OC.L10N.register(
"Hide description …" : "عدم نمایش توضیحات...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "امکان نصب این برنامه وجود ندارد، این پیش‌نیازها انجام نشده‌اند:",
"Enable only for specific groups" : "فعال سازی تنها برای گروه های خاص",
- "Uninstall App" : "حذف برنامه",
"Common Name" : "نام مشترک",
"Valid until" : "متعبر تا",
"Issued By" : "صدور توسط",
@@ -191,6 +186,10 @@ OC.L10N.register(
"change email address" : "تغییر آدرس ایمیل ",
"Default" : "پیش فرض",
"Language changed" : "زبان تغییر کرد",
+ "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند",
+ "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست",
+ "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست",
+ "Please wait...." : "لطفا صبر کنید ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "همه موارد (مشکلات مهلک، خطاها، اخطارها، اطلاعات، خطایابی)",
"Info, warnings, errors and fatal issues" : "اطلاعات، اخطارها، خطاها، مشکلات اساسی",
"Warnings, errors and fatal issues" : "اخطارها، خطاها، مشکلات مهلک",
@@ -201,12 +200,8 @@ OC.L10N.register(
"More" : "بیش‌تر",
"Less" : "کم‌تر",
"Allow users to send mail notification for shared files" : "اجازه به کاربران برای ارسال ایمیل نوتیفیکیشن برای فایل‌های به اشتراک‌گذاشته شده",
+ "Uninstall App" : "حذف برنامه",
"Enable experimental apps" : "فعال‌سازی برنامه‌های آزمایشی",
- "Group" : "گروه",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "حافظه خارجی",
- "Updates" : "به روز رسانی ها",
- "An error occurred: {message}" : "یک خطا رخ‌داده است: {message}"
+ "Group" : "گروه"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index 812459d2883..33fcfe51a99 100644
--- a/settings/l10n/fa.json
+++ b/settings/l10n/fa.json
@@ -26,9 +26,6 @@
"Unable to change mail address" : "تغییر آدرس ایمیل امکان‌پذیر نیست",
"Email saved" : "ایمیل ذخیره شد",
"Couldn't remove app." : "امکان حذف برنامه وجود ندارد.",
- "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند",
- "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست",
- "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست",
"Couldn't update app." : "برنامه را نمی توان به هنگام ساخت.",
"Add trusted domain" : "افزودن دامنه مورد اعتماد",
"Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید",
@@ -38,7 +35,6 @@
"All" : "همه",
"Update to %s" : "بروزرسانی به %s",
"No apps found for your version" : "هیچ برنامه‌ای برای نسخه‌ی شما یافت نشد",
- "Please wait...." : "لطفا صبر کنید ...",
"Error while disabling app" : "خطا در هنگام غیر فعال سازی برنامه",
"Disable" : "غیرفعال",
"Enable" : "فعال",
@@ -137,7 +133,6 @@
"Hide description …" : "عدم نمایش توضیحات...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "امکان نصب این برنامه وجود ندارد، این پیش‌نیازها انجام نشده‌اند:",
"Enable only for specific groups" : "فعال سازی تنها برای گروه های خاص",
- "Uninstall App" : "حذف برنامه",
"Common Name" : "نام مشترک",
"Valid until" : "متعبر تا",
"Issued By" : "صدور توسط",
@@ -189,6 +184,10 @@
"change email address" : "تغییر آدرس ایمیل ",
"Default" : "پیش فرض",
"Language changed" : "زبان تغییر کرد",
+ "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند",
+ "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست",
+ "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست",
+ "Please wait...." : "لطفا صبر کنید ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "همه موارد (مشکلات مهلک، خطاها، اخطارها، اطلاعات، خطایابی)",
"Info, warnings, errors and fatal issues" : "اطلاعات، اخطارها، خطاها، مشکلات اساسی",
"Warnings, errors and fatal issues" : "اخطارها، خطاها، مشکلات مهلک",
@@ -199,12 +198,8 @@
"More" : "بیش‌تر",
"Less" : "کم‌تر",
"Allow users to send mail notification for shared files" : "اجازه به کاربران برای ارسال ایمیل نوتیفیکیشن برای فایل‌های به اشتراک‌گذاشته شده",
+ "Uninstall App" : "حذف برنامه",
"Enable experimental apps" : "فعال‌سازی برنامه‌های آزمایشی",
- "Group" : "گروه",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "حافظه خارجی",
- "Updates" : "به روز رسانی ها",
- "An error occurred: {message}" : "یک خطا رخ‌داده است: {message}"
+ "Group" : "گروه"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index cecd6bb5bd4..dc9a7672601 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -35,9 +35,6 @@ OC.L10N.register(
"Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut",
"Email saved" : "Sähköposti tallennettu",
"Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.",
- "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
- "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
- "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu",
"Couldn't update app." : "Sovelluksen päivitys epäonnistui.",
"Add trusted domain" : "Lisää luotettu toimialue",
"Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu",
@@ -51,7 +48,6 @@ OC.L10N.register(
"The app will be downloaded from the app store" : "Sovellus ladataan sovelluskaupasta",
"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." : "Hyväksytyt sovellukset on kehitetty luotettujen kehittäjien toimesta. Hyväksytyille sovelluksille on suoritettu pintapuolinen turvallisuustarkastus. Sovelluksia ylläpidetään avoimen koodin tietovarastoissa. Sovellusten kehittäjät mieltävät sovellukset vakaiksi ja valmiiksi tavalliseen käyttöön.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Tätä sovellusta ei ole tarkistettu tietoturvauhkien varalta. Sovellus on uusi ja mahdollisesti tiedostettu epävakaaksi. Asenna omalla vastuulla.",
- "Please wait...." : "Odota hetki...",
"Error while disabling app" : "Virhe poistaessa sovellusta käytöstä",
"Disable" : "Poista käytöstä",
"Enable" : "Käytä",
@@ -183,7 +179,6 @@ OC.L10N.register(
"This app has an update available." : "Tähän sovellukseen on päivitys saatavilla.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Tätä sovellusta ei voi asentaa, koska seuraavat riippuvuudet eivät täyty:",
"Enable only for specific groups" : "Salli vain tietyille ryhmille",
- "Uninstall App" : "Poista sovelluksen asennus",
"SSL Root Certificates" : "SSL-juurivarmenteet",
"Common Name" : "Yleinen nimi",
"Valid until" : "Kelvollinen",
@@ -247,7 +242,11 @@ OC.L10N.register(
"Default" : "Oletus",
"log-level out of allowed range" : "lokitaso ei sallittujen rajojen sisäpuolella",
"Language changed" : "Kieli on vaihdettu",
+ "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
+ "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
+ "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
+ "Please wait...." : "Odota hetki...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)",
"Info, warnings, errors and fatal issues" : "Tiedot, varoitukset, virheet ja vakavat ongelmat",
"Warnings, errors and fatal issues" : "Varoitukset, virheet ja vakavat ongelmat",
@@ -265,14 +264,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Varsinkin työpöytäsovelluksen tiedostosynkronointia käyttäessä SQLiten käyttö ei ole suositeltavaa.",
"Experimental applications ahead" : "Kokeellisia sovelluksia edessä",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Kokeellisia sovelluksia ei ole tarkistettu tietoturvauhkien varalta. Sovellukset ovat uusia, ne saattavat olla epävakaita ja ovat nopean kehityksen alaisia. Kokeellisten sovellusten asentaminen saattaa aiheuttaa tietojen katoamista tai tietoturvauhkia.",
+ "Uninstall App" : "Poista sovelluksen asennus",
"Enable experimental apps" : "Käytä kokeiluasteella olevia sovelluksia",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei<br><br>Sinulla on nyt %s-tili.<br><br>Käyttäjätunnus: %s<br>Aloita käyttö: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei\n\nSinulla on nyt %s-tili.\n\nKäyttäjätunnuksesi: %s\nAloita käyttö: %s\n\n",
- "Group" : "Ryhmä",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Erillinen tallennusväline",
- "Updates" : "Päivitykset",
- "An error occurred: {message}" : "Tapahtui virhe: {message}"
+ "Group" : "Ryhmä"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index 46b8c602950..c241717a604 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -33,9 +33,6 @@
"Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut",
"Email saved" : "Sähköposti tallennettu",
"Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.",
- "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
- "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
- "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu",
"Couldn't update app." : "Sovelluksen päivitys epäonnistui.",
"Add trusted domain" : "Lisää luotettu toimialue",
"Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu",
@@ -49,7 +46,6 @@
"The app will be downloaded from the app store" : "Sovellus ladataan sovelluskaupasta",
"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." : "Hyväksytyt sovellukset on kehitetty luotettujen kehittäjien toimesta. Hyväksytyille sovelluksille on suoritettu pintapuolinen turvallisuustarkastus. Sovelluksia ylläpidetään avoimen koodin tietovarastoissa. Sovellusten kehittäjät mieltävät sovellukset vakaiksi ja valmiiksi tavalliseen käyttöön.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Tätä sovellusta ei ole tarkistettu tietoturvauhkien varalta. Sovellus on uusi ja mahdollisesti tiedostettu epävakaaksi. Asenna omalla vastuulla.",
- "Please wait...." : "Odota hetki...",
"Error while disabling app" : "Virhe poistaessa sovellusta käytöstä",
"Disable" : "Poista käytöstä",
"Enable" : "Käytä",
@@ -181,7 +177,6 @@
"This app has an update available." : "Tähän sovellukseen on päivitys saatavilla.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Tätä sovellusta ei voi asentaa, koska seuraavat riippuvuudet eivät täyty:",
"Enable only for specific groups" : "Salli vain tietyille ryhmille",
- "Uninstall App" : "Poista sovelluksen asennus",
"SSL Root Certificates" : "SSL-juurivarmenteet",
"Common Name" : "Yleinen nimi",
"Valid until" : "Kelvollinen",
@@ -245,7 +240,11 @@
"Default" : "Oletus",
"log-level out of allowed range" : "lokitaso ei sallittujen rajojen sisäpuolella",
"Language changed" : "Kieli on vaihdettu",
+ "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä",
+ "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu",
+ "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
+ "Please wait...." : "Odota hetki...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)",
"Info, warnings, errors and fatal issues" : "Tiedot, varoitukset, virheet ja vakavat ongelmat",
"Warnings, errors and fatal issues" : "Varoitukset, virheet ja vakavat ongelmat",
@@ -263,14 +262,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Varsinkin työpöytäsovelluksen tiedostosynkronointia käyttäessä SQLiten käyttö ei ole suositeltavaa.",
"Experimental applications ahead" : "Kokeellisia sovelluksia edessä",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Kokeellisia sovelluksia ei ole tarkistettu tietoturvauhkien varalta. Sovellukset ovat uusia, ne saattavat olla epävakaita ja ovat nopean kehityksen alaisia. Kokeellisten sovellusten asentaminen saattaa aiheuttaa tietojen katoamista tai tietoturvauhkia.",
+ "Uninstall App" : "Poista sovelluksen asennus",
"Enable experimental apps" : "Käytä kokeiluasteella olevia sovelluksia",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei<br><br>Sinulla on nyt %s-tili.<br><br>Käyttäjätunnus: %s<br>Aloita käyttö: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei\n\nSinulla on nyt %s-tili.\n\nKäyttäjätunnuksesi: %s\nAloita käyttö: %s\n\n",
- "Group" : "Ryhmä",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Erillinen tallennusväline",
- "Updates" : "Päivitykset",
- "An error occurred: {message}" : "Tapahtui virhe: {message}"
+ "Group" : "Ryhmä"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index ec4c11ff7cc..c20a4acace5 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -25,12 +25,13 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Vous devez définir une adresse e-mail dans vos paramètres personnels avant de pouvoir envoyer des e-mails de test.",
"Invalid request" : "Requête non valide",
"Invalid mail address" : "Adresse e-mail non valide",
+ "No valid group selected" : "Aucun groupe valide sélectionné",
"A user with that name already exists." : "Un utilisateur à ce nom existe déjà.",
"Unable to create user." : "Impossible de créer l'utilisateur.",
"Your %s account was created" : "Votre compte %s a été créé",
"Unable to delete user." : "Impossible de supprimer l'utilisateur.",
"Settings saved" : "Paramètres sauvegardés",
- "Unable to change full name" : "Impossible de changer le nom complet",
+ "Unable to change full name" : "Impossible de modifier le nom complet",
"Unable to change email address" : "Impossible de modifier l'adresse e-mail",
"Your full name has been changed." : "Votre nom complet a été modifié.",
"Forbidden" : "Interdit",
@@ -39,9 +40,6 @@ OC.L10N.register(
"Email saved" : "E-mail sauvegardé",
"Password confirmation is required" : "Confirmation par mot de passe est requise",
"Couldn't remove app." : "Impossible de supprimer l'application.",
- "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
- "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
- "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
"Couldn't update app." : "Impossible de mettre à jour l'application",
"Are you really sure you want add {domain} as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter {domain} comme domaine de confiance ?",
"Add trusted domain" : "Ajouter un domaine de confiance",
@@ -58,7 +56,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Les applications officielles sont développées par et dans la communauté. Elles offrent les fonctionnalités indispensables et sont prêtes pour être utilisées en production.",
"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." : "Les applications approuvées sont créées par des développeurs de confiance et ont passé les tests de sécurité. Elles sont activement maintenues et leur code source est ouvert. Leurs développeurs les considèrent stables pour une utilisation normale.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Cette application est nouvelle ou instable, et sa sécurité n'a pas été vérifiée. Installez-la à vos risques et périls!",
- "Please wait...." : "Veuillez patienter…",
+ "Enabling app …" : "Activation de l'application...",
"Error while disabling app" : "Erreur lors de la désactivation de l'application",
"Disable" : "Désactiver",
"Enable" : "Activer",
@@ -120,11 +118,13 @@ OC.L10N.register(
"Groups" : "Groupes",
"Unable to delete {objName}" : "Impossible de supprimer {objName}",
"Error creating group: {message}" : "Erreur lors de la création du groupe : {message}",
- "A valid group name must be provided" : "Vous devez spécifier un nom de groupe valide",
+ "A valid group name must be provided" : "Vous devez indiquer un nom de groupe valide",
"deleted {groupName}" : "{groupName} supprimé",
"undo" : "annuler",
"never" : "jamais",
"deleted {userName}" : "{userName} supprimé",
+ "Unable to add user to group {group}" : "Impossible d'ajouter l'utilisateur au groupe {group}",
+ "Unable to remove user from group {group}" : "Impossible de supprimer l'utilisateur du groupe {group}",
"Add group" : "Ajouter un groupe",
"Invalid quota value \"{val}\"" : "Valeur de quota invalide \"{val}\"",
"no group" : "aucun groupe",
@@ -203,14 +203,14 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Utilisez un service webcron pour exécuter cron.php toutes les 15 minutes par HTTP",
"Use system's cron service to call the cron.php file every 15 minutes." : "Utilisez le service cron du système pour appeler le fichier cron.php toutes les 15 minutes.",
"The cron.php needs to be executed by the system user \"%s\"." : "Le cron.php doit être exécuté par l'utilisateur système \"%s\".",
- "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Pour l'executer, vous devez avoir l'extension PHP posix. Regarder la {linkstart}documentation PHP{linkend} pour plus de détails.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Pour l'exécuter, vous devez avoir l'extension PHP posix. Regarder la {linkstart}documentation PHP{linkend} pour plus de détails.",
"Version" : "Version",
"Sharing" : "Partage",
"Allow apps to use the Share API" : "Autoriser les applications à utiliser l'API de partage",
"Allow users to share via link" : "Autoriser les utilisateurs à partager par lien",
"Allow public uploads" : "Autoriser les téléversements publics",
"Enforce password protection" : "Imposer la protection par mot de passe",
- "Set default expiration date" : "Spécifier une date d'expiration par défaut",
+ "Set default expiration date" : "Indiquer une date d'expiration par défaut",
"Expire after " : "Expiration après ",
"days" : "jours",
"Enforce expiration date" : "Imposer la date d'expiration",
@@ -220,8 +220,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Empêcher certains groupes de partager",
"These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)",
- "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement (seulement lorsque la liste des fichiers est masquée).",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera affiché sur la page publique de téléversement lorsque la liste des fichiers est masquée.",
"Tips & tricks" : "Trucs et astuces",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite est actuellement utilisé comme système de gestion de base de données. Pour des installations plus volumineuses, nous vous recommandons de migrer vers un autre système de gestion de base de données.",
"This is particularly recommended when using the desktop client for file synchronisation." : "C'est particulièrement recommandé lorsque l'on utilise un client bureau pour la synchronisation des fichiers.",
@@ -247,7 +247,7 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur à l'avenir.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Cette application ne peut être installée à cause de ces dépendances non satisfaites :",
"Enable only for specific groups" : "Activer uniquement pour certains groupes",
- "Uninstall App" : "Désinstaller l'application",
+ "Uninstall app" : "Désinstaller l'application",
"SSL Root Certificates" : "Certificats Racines SSL",
"Common Name" : "Nom d'usage",
"Valid until" : "Valide jusqu'à",
@@ -299,9 +299,9 @@ OC.L10N.register(
"If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Si vous voulez apporter votre appui au projet {contributeopen}joignez-vous à son développement{linkclose} ou {contributeopen}passez le mot{linkclose}!",
"Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
"Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.",
- "Device" : "Périphérique",
+ "Device" : "Appareil",
"Last activity" : "Dernière activité",
- "Passcodes that give an app or device permissions to access your account." : "Un mot de passe d'application est un mot de passe qui autorise une application ou un périphérique d'accéder à votre compte.",
+ "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.",
"Name" : "Nom",
"App name" : "Nom de l'application",
"Create new app password" : "Créer un nouveau mot de passe d'application",
@@ -341,7 +341,11 @@ OC.L10N.register(
"Default" : "Défaut",
"log-level out of allowed range" : "niveau de journalisation hors borne",
"Language changed" : "Langue changée",
+ "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
+ "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
+ "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?",
+ "Please wait...." : "Veuillez patienter…",
"iPhone" : "iPhone",
"add group" : "ajouter groupe",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)",
@@ -361,10 +365,11 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.",
"Experimental applications ahead" : "Attention! Applications expérimentales",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Les applications expérimentales n'ont pas fait l'objet de tests de sécurité, sont encore en développement et peuvent être instables. Les installer peut causer des pertes de données ou des failles de sécurité. ",
+ "Uninstall App" : "Désinstaller l'application",
"Enable experimental apps" : "Activer les applications expérimentales",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : %s<br><br>\n",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
"Add Group" : "Ajouter groupe",
"Group" : "Groupe",
"Default Quota" : "Quota par défaut",
@@ -372,24 +377,6 @@ OC.L10N.register(
"Group Admin for" : "Groupe admin pour",
"Storage Location" : "Emplacement de stockage",
"User Backend" : "Retour utilisateur",
- "Last Login" : "Dernière connexion",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Stockage externe",
- "Updates" : "Mises à jour",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Les applications officielles sont développées par et pour al communauté Nextcloud. Elles offrent les fonctionnalités indispensables et sont prêtes pour être utilisées en production.",
- "No apps found for \"{query}\"" : "Aucune application trouvée pour \"{query}\"",
- "An error occurred: {message}" : "Une erreur est survenue : {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Veuillez consulter <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">la documentation d'installation ↗</a> pour savoir comment configurer php sur votre serveur, en particulier en cas d'utilisation de php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Votre base de données ne fonctionne pas avec le niveau d'isolation de transaction \"READ COMMITED\". Ceci peut causer des problèmes quand plusieurs actions sont exécutées en parallèle.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Votre serveur fonctionne actuellement sur une plateforme Microsoft Windows. Nous vous recommandons fortement d'utiliser une plateforme Linux pour une expérience utilisateur optimale.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Le verrouillage transactionnel des fichiers est désactivé, cela peut causer des conflits en cas d'accès concurrent. Configurez 'filelocking.enabled' dans config.php pour éviter ces problèmes. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> pour plus d'informations.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultez les <a target=\"_blank\" href=\"%s\">guides d'installation ↗</a>, et cherchez des erreurs ou avertissements dans <a href=\"#log-section\">les logs</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Le chiffrement seul ne garantit pas la sécurité du système. Veuillez consulter la documentation pour plus d'informations sur comment les applications de chiffrement fonctionnent et les cas d'utilisations supportés.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers une autre base de données utiliser la ligne de commande: 'occ db:convert-type', ou regardez la <a target=\"_blank\" href=\"%s\">documentation</a>",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\nou\n<a href=\"https://help.nextcloud.com/\"\n<a href=\"https://help.nextcloud.com/\"\ntarget=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Dernière connexion"
},
"nplurals=2; plural=(n > 1);");
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 296a67524ff..16ad7a7d882 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -23,12 +23,13 @@
"You need to set your user email before being able to send test emails." : "Vous devez définir une adresse e-mail dans vos paramètres personnels avant de pouvoir envoyer des e-mails de test.",
"Invalid request" : "Requête non valide",
"Invalid mail address" : "Adresse e-mail non valide",
+ "No valid group selected" : "Aucun groupe valide sélectionné",
"A user with that name already exists." : "Un utilisateur à ce nom existe déjà.",
"Unable to create user." : "Impossible de créer l'utilisateur.",
"Your %s account was created" : "Votre compte %s a été créé",
"Unable to delete user." : "Impossible de supprimer l'utilisateur.",
"Settings saved" : "Paramètres sauvegardés",
- "Unable to change full name" : "Impossible de changer le nom complet",
+ "Unable to change full name" : "Impossible de modifier le nom complet",
"Unable to change email address" : "Impossible de modifier l'adresse e-mail",
"Your full name has been changed." : "Votre nom complet a été modifié.",
"Forbidden" : "Interdit",
@@ -37,9 +38,6 @@
"Email saved" : "E-mail sauvegardé",
"Password confirmation is required" : "Confirmation par mot de passe est requise",
"Couldn't remove app." : "Impossible de supprimer l'application.",
- "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
- "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
- "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
"Couldn't update app." : "Impossible de mettre à jour l'application",
"Are you really sure you want add {domain} as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter {domain} comme domaine de confiance ?",
"Add trusted domain" : "Ajouter un domaine de confiance",
@@ -56,7 +54,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Les applications officielles sont développées par et dans la communauté. Elles offrent les fonctionnalités indispensables et sont prêtes pour être utilisées en production.",
"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." : "Les applications approuvées sont créées par des développeurs de confiance et ont passé les tests de sécurité. Elles sont activement maintenues et leur code source est ouvert. Leurs développeurs les considèrent stables pour une utilisation normale.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Cette application est nouvelle ou instable, et sa sécurité n'a pas été vérifiée. Installez-la à vos risques et périls!",
- "Please wait...." : "Veuillez patienter…",
+ "Enabling app …" : "Activation de l'application...",
"Error while disabling app" : "Erreur lors de la désactivation de l'application",
"Disable" : "Désactiver",
"Enable" : "Activer",
@@ -118,11 +116,13 @@
"Groups" : "Groupes",
"Unable to delete {objName}" : "Impossible de supprimer {objName}",
"Error creating group: {message}" : "Erreur lors de la création du groupe : {message}",
- "A valid group name must be provided" : "Vous devez spécifier un nom de groupe valide",
+ "A valid group name must be provided" : "Vous devez indiquer un nom de groupe valide",
"deleted {groupName}" : "{groupName} supprimé",
"undo" : "annuler",
"never" : "jamais",
"deleted {userName}" : "{userName} supprimé",
+ "Unable to add user to group {group}" : "Impossible d'ajouter l'utilisateur au groupe {group}",
+ "Unable to remove user from group {group}" : "Impossible de supprimer l'utilisateur du groupe {group}",
"Add group" : "Ajouter un groupe",
"Invalid quota value \"{val}\"" : "Valeur de quota invalide \"{val}\"",
"no group" : "aucun groupe",
@@ -201,14 +201,14 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Utilisez un service webcron pour exécuter cron.php toutes les 15 minutes par HTTP",
"Use system's cron service to call the cron.php file every 15 minutes." : "Utilisez le service cron du système pour appeler le fichier cron.php toutes les 15 minutes.",
"The cron.php needs to be executed by the system user \"%s\"." : "Le cron.php doit être exécuté par l'utilisateur système \"%s\".",
- "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Pour l'executer, vous devez avoir l'extension PHP posix. Regarder la {linkstart}documentation PHP{linkend} pour plus de détails.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Pour l'exécuter, vous devez avoir l'extension PHP posix. Regarder la {linkstart}documentation PHP{linkend} pour plus de détails.",
"Version" : "Version",
"Sharing" : "Partage",
"Allow apps to use the Share API" : "Autoriser les applications à utiliser l'API de partage",
"Allow users to share via link" : "Autoriser les utilisateurs à partager par lien",
"Allow public uploads" : "Autoriser les téléversements publics",
"Enforce password protection" : "Imposer la protection par mot de passe",
- "Set default expiration date" : "Spécifier une date d'expiration par défaut",
+ "Set default expiration date" : "Indiquer une date d'expiration par défaut",
"Expire after " : "Expiration après ",
"days" : "jours",
"Enforce expiration date" : "Imposer la date d'expiration",
@@ -218,8 +218,8 @@
"Exclude groups from sharing" : "Empêcher certains groupes de partager",
"These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.",
- "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)",
- "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement (seulement lorsque la liste des fichiers est masquée).",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera affiché sur la page publique de téléversement lorsque la liste des fichiers est masquée.",
"Tips & tricks" : "Trucs et astuces",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite est actuellement utilisé comme système de gestion de base de données. Pour des installations plus volumineuses, nous vous recommandons de migrer vers un autre système de gestion de base de données.",
"This is particularly recommended when using the desktop client for file synchronisation." : "C'est particulièrement recommandé lorsque l'on utilise un client bureau pour la synchronisation des fichiers.",
@@ -245,7 +245,7 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur à l'avenir.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Cette application ne peut être installée à cause de ces dépendances non satisfaites :",
"Enable only for specific groups" : "Activer uniquement pour certains groupes",
- "Uninstall App" : "Désinstaller l'application",
+ "Uninstall app" : "Désinstaller l'application",
"SSL Root Certificates" : "Certificats Racines SSL",
"Common Name" : "Nom d'usage",
"Valid until" : "Valide jusqu'à",
@@ -297,9 +297,9 @@
"If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Si vous voulez apporter votre appui au projet {contributeopen}joignez-vous à son développement{linkclose} ou {contributeopen}passez le mot{linkclose}!",
"Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
"Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.",
- "Device" : "Périphérique",
+ "Device" : "Appareil",
"Last activity" : "Dernière activité",
- "Passcodes that give an app or device permissions to access your account." : "Un mot de passe d'application est un mot de passe qui autorise une application ou un périphérique d'accéder à votre compte.",
+ "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.",
"Name" : "Nom",
"App name" : "Nom de l'application",
"Create new app password" : "Créer un nouveau mot de passe d'application",
@@ -339,7 +339,11 @@
"Default" : "Défaut",
"log-level out of allowed range" : "niveau de journalisation hors borne",
"Language changed" : "Langue changée",
+ "Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
+ "Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
+ "Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?",
+ "Please wait...." : "Veuillez patienter…",
"iPhone" : "iPhone",
"add group" : "ajouter groupe",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)",
@@ -359,10 +363,11 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.",
"Experimental applications ahead" : "Attention! Applications expérimentales",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Les applications expérimentales n'ont pas fait l'objet de tests de sécurité, sont encore en développement et peuvent être instables. Les installer peut causer des pertes de données ou des failles de sécurité. ",
+ "Uninstall App" : "Désinstaller l'application",
"Enable experimental apps" : "Activer les applications expérimentales",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : %s<br><br>\n",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
"Add Group" : "Ajouter groupe",
"Group" : "Groupe",
"Default Quota" : "Quota par défaut",
@@ -370,24 +375,6 @@
"Group Admin for" : "Groupe admin pour",
"Storage Location" : "Emplacement de stockage",
"User Backend" : "Retour utilisateur",
- "Last Login" : "Dernière connexion",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Stockage externe",
- "Updates" : "Mises à jour",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Les applications officielles sont développées par et pour al communauté Nextcloud. Elles offrent les fonctionnalités indispensables et sont prêtes pour être utilisées en production.",
- "No apps found for \"{query}\"" : "Aucune application trouvée pour \"{query}\"",
- "An error occurred: {message}" : "Une erreur est survenue : {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Veuillez consulter <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">la documentation d'installation ↗</a> pour savoir comment configurer php sur votre serveur, en particulier en cas d'utilisation de php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Votre base de données ne fonctionne pas avec le niveau d'isolation de transaction \"READ COMMITED\". Ceci peut causer des problèmes quand plusieurs actions sont exécutées en parallèle.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Votre serveur fonctionne actuellement sur une plateforme Microsoft Windows. Nous vous recommandons fortement d'utiliser une plateforme Linux pour une expérience utilisateur optimale.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Le verrouillage transactionnel des fichiers est désactivé, cela peut causer des conflits en cas d'accès concurrent. Configurez 'filelocking.enabled' dans config.php pour éviter ces problèmes. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> pour plus d'informations.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultez les <a target=\"_blank\" href=\"%s\">guides d'installation ↗</a>, et cherchez des erreurs ou avertissements dans <a href=\"#log-section\">les logs</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Le chiffrement seul ne garantit pas la sécurité du système. Veuillez consulter la documentation pour plus d'informations sur comment les applications de chiffrement fonctionnent et les cas d'utilisations supportés.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers une autre base de données utiliser la ligne de commande: 'occ db:convert-type', ou regardez la <a target=\"_blank\" href=\"%s\">documentation</a>",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\nou\n<a href=\"https://help.nextcloud.com/\"\n<a href=\"https://help.nextcloud.com/\"\ntarget=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Dernière connexion"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index d1c0d0cd7b8..609782e501f 100644
--- a/settings/l10n/gl.js
+++ b/settings/l10n/gl.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.",
"Email saved" : "Correo gardado",
"Couldn't remove app." : "Non foi posíbel retirar a aplicación.",
- "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin",
- "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s",
- "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s",
"Couldn't update app." : "Non foi posíbel actualizar a aplicación.",
"Add trusted domain" : "Engadir dominio de confianza",
"Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.",
@@ -50,7 +47,6 @@ OC.L10N.register(
"No apps found for your version" : "Non se atoparon aplicativos para esta versión",
"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." : "As aplicacións aprobadas son desenvolvidas por desenvolvedores de confianza e pasaron un control de seguridade superficial. Mantéñense activamente nun repositorio de código aberto e os seus mantedores consideran que son estábeis para uso casual normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "A esta aplicación non se lle fixeron comprobacións de seguridade, ademais é nova ou coñecida por ser inestábel. Instálea baixo a súa responsabilidade.",
- "Please wait...." : "Agarde...",
"Error while disabling app" : "Produciuse un erro ao desactivar a aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -163,7 +159,6 @@ OC.L10N.register(
"Hide description …" : "Agochar a descrición ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Non é posíbel instalar esta aplicación por mor de non cumprirse as dependencias:",
"Enable only for specific groups" : "Activar só para grupos específicos",
- "Uninstall App" : "Desinstalar unha aplicación",
"Common Name" : "Nome común",
"Valid until" : "Válido ata",
"Issued By" : "Fornecido por",
@@ -218,7 +213,11 @@ OC.L10N.register(
"Default" : "Predeterminado",
"log-level out of allowed range" : "o nivel do rexistro está fora do intervalo admitido",
"Language changed" : "O idioma cambiou",
+ "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin",
+ "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s",
+ "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?",
+ "Please wait...." : "Agarde...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (incidencias críticas, erros, avisos, información, depuración)",
"Info, warnings, errors and fatal issues" : "Información, avisos, erros e incidencias críticas",
"Warnings, errors and fatal issues" : "Avisos, erros e incidencias críticas",
@@ -235,14 +234,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Concretamente, se emprega o cliente de escritorio para sincronización, desaconsellámoslle o uso de SQLite",
"Experimental applications ahead" : "Ante as aplicacións experimentais",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "As aplicacións experimentais, novas ou coñecidas por ser inestábeis e en forte desenvolvemento, non se lles fan comprobacións de seguridade. A súa instalación pode provocar a perda de datos o violacións de seguridade.",
+ "Uninstall App" : "Desinstalar unha aplicación",
"Enable experimental apps" : "Activar as aplicacións experimentais",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ola,<br><br>Só facerlle saber que dispón da conta %s.<br><br>O seu nome de usuario: %s<br>Para acceder a ela: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ola,\n\nSó facerlle saber que dispón da conta %s.\n\nO seu nome de usuario: %s\nPara acceder a ela: %s\n",
- "Group" : "Grupo",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Almacenamento externo",
- "Updates" : "Actualizacións",
- "An error occurred: {message}" : "Produciuse un erro: {message}"
+ "Group" : "Grupo"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json
index 429abd4287b..4d81d6bfab1 100644
--- a/settings/l10n/gl.json
+++ b/settings/l10n/gl.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.",
"Email saved" : "Correo gardado",
"Couldn't remove app." : "Non foi posíbel retirar a aplicación.",
- "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin",
- "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s",
- "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s",
"Couldn't update app." : "Non foi posíbel actualizar a aplicación.",
"Add trusted domain" : "Engadir dominio de confianza",
"Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.",
@@ -48,7 +45,6 @@
"No apps found for your version" : "Non se atoparon aplicativos para esta versión",
"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." : "As aplicacións aprobadas son desenvolvidas por desenvolvedores de confianza e pasaron un control de seguridade superficial. Mantéñense activamente nun repositorio de código aberto e os seus mantedores consideran que son estábeis para uso casual normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "A esta aplicación non se lle fixeron comprobacións de seguridade, ademais é nova ou coñecida por ser inestábel. Instálea baixo a súa responsabilidade.",
- "Please wait...." : "Agarde...",
"Error while disabling app" : "Produciuse un erro ao desactivar a aplicación",
"Disable" : "Desactivar",
"Enable" : "Activar",
@@ -161,7 +157,6 @@
"Hide description …" : "Agochar a descrición ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Non é posíbel instalar esta aplicación por mor de non cumprirse as dependencias:",
"Enable only for specific groups" : "Activar só para grupos específicos",
- "Uninstall App" : "Desinstalar unha aplicación",
"Common Name" : "Nome común",
"Valid until" : "Válido ata",
"Issued By" : "Fornecido por",
@@ -216,7 +211,11 @@
"Default" : "Predeterminado",
"log-level out of allowed range" : "o nivel do rexistro está fora do intervalo admitido",
"Language changed" : "O idioma cambiou",
+ "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin",
+ "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s",
+ "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?",
+ "Please wait...." : "Agarde...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Todo (incidencias críticas, erros, avisos, información, depuración)",
"Info, warnings, errors and fatal issues" : "Información, avisos, erros e incidencias críticas",
"Warnings, errors and fatal issues" : "Avisos, erros e incidencias críticas",
@@ -233,14 +232,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Concretamente, se emprega o cliente de escritorio para sincronización, desaconsellámoslle o uso de SQLite",
"Experimental applications ahead" : "Ante as aplicacións experimentais",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "As aplicacións experimentais, novas ou coñecidas por ser inestábeis e en forte desenvolvemento, non se lles fan comprobacións de seguridade. A súa instalación pode provocar a perda de datos o violacións de seguridade.",
+ "Uninstall App" : "Desinstalar unha aplicación",
"Enable experimental apps" : "Activar as aplicacións experimentais",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ola,<br><br>Só facerlle saber que dispón da conta %s.<br><br>O seu nome de usuario: %s<br>Para acceder a ela: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ola,\n\nSó facerlle saber que dispón da conta %s.\n\nO seu nome de usuario: %s\nPara acceder a ela: %s\n",
- "Group" : "Grupo",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Almacenamento externo",
- "Updates" : "Actualizacións",
- "An error occurred: {message}" : "Produciuse un erro: {message}"
+ "Group" : "Grupo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/he.js b/settings/l10n/he.js
index 1f3cb6ac36c..8e9e2538327 100644
--- a/settings/l10n/he.js
+++ b/settings/l10n/he.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "לא ניתן לשנות כתובת דואר אלקטרוני",
"Email saved" : "הדואר האלקטרוני נשמר",
"Couldn't remove app." : "לא ניתן להסיר את היישום.",
- "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
- "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s",
- "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s",
"Couldn't update app." : "לא ניתן לעדכן את היישום.",
"Add trusted domain" : "הוספת שם מתחם מהימן",
"Migration in progress. Please wait until the migration is finished" : "המרה בביצוע. יש להמתין עד סיום ההמרה",
@@ -52,7 +49,6 @@ OC.L10N.register(
"The app will be downloaded from the app store" : "היישום ירד מחנות היישומים",
"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." : "יישומים מאושרים מפותחים על ידי מפתחים מהימנים ועברו בדיקת הבטחה ראשונית. הם נשמרים באופן פעיל במאגר קוד פתוח והמתזקים שלהם מייעדים אותם לשימוש מזדמן ורגיל.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "יישום זה לא נבדק לבעיות אבטחה והוא חדש או ידוע כלא יציב. התקנת יישום זה הנה על אחריותך בלבד.",
- "Please wait...." : "נא להמתין…",
"Error while disabling app" : "אירעה שגיאה בעת נטרול היישום",
"Disable" : "ניטרול",
"Enable" : "הפעלה",
@@ -196,7 +192,6 @@ OC.L10N.register(
"This app has an update available." : "ליישום זה קיים עדכון זמין.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "לא ניתן להתקין את יישום זה כיוון שייחסי התלות הבאים לא התקיימו:",
"Enable only for specific groups" : "אפשר רק לקבוצות מסויימות",
- "Uninstall App" : "הסרת יישום",
"SSL Root Certificates" : "אישורי אבטחת SSL לנתיב יסוד",
"Common Name" : "שם משותף",
"Valid until" : "בתוקף עד",
@@ -260,7 +255,11 @@ OC.L10N.register(
"Default" : "ברירת מחדל",
"log-level out of allowed range" : "גודל הלוג מעבר לרמה המותרת",
"Language changed" : "שפה השתנתה",
+ "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
+ "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s",
+ "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "האם באמת להוסיף \"{domain}\" כשם מתחם מהימן?",
+ "Please wait...." : "נא להמתין…",
"Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)",
"Info, warnings, errors and fatal issues" : "מידע, אזהרות, שגיאות ונושאים חמורים",
"Warnings, errors and fatal issues" : "אזהרות, שגיאות ונושאים חמורים",
@@ -278,14 +277,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.",
"Experimental applications ahead" : "ישומים ניסיוניים לפנים",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "יישומים ניסיוניים לא נבדקו לבעיות אבטחה, חדשים או ידועים כלא יציבים ותחת פיתוח כבד. התקנה שלהם עלולה להוביל לאיבוד מידע או לפרצות אבטחה.",
+ "Uninstall App" : "הסרת יישום",
"Enable experimental apps" : "אפשר יישומים ניסיוניים",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "שלום,<br><br>רק רצינו להודיע שעכשיו יש לך %s חשבון.<br><br>Your שם משתמש: %s<br>כניסה: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "שלום,\n\nרק רצינו להודיע שעכשיו יש לך %s חשבון.\n\nשם המשתמש שלך: %s\nכניסה: %s\n\n",
- "Group" : "קבוצה",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "אחסון חיצוני",
- "Updates" : "עדכונים",
- "An error occurred: {message}" : "אירעה שגיאה: {message}"
+ "Group" : "קבוצה"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/he.json b/settings/l10n/he.json
index b69e4f63d4f..3eace55b4b8 100644
--- a/settings/l10n/he.json
+++ b/settings/l10n/he.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "לא ניתן לשנות כתובת דואר אלקטרוני",
"Email saved" : "הדואר האלקטרוני נשמר",
"Couldn't remove app." : "לא ניתן להסיר את היישום.",
- "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
- "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s",
- "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s",
"Couldn't update app." : "לא ניתן לעדכן את היישום.",
"Add trusted domain" : "הוספת שם מתחם מהימן",
"Migration in progress. Please wait until the migration is finished" : "המרה בביצוע. יש להמתין עד סיום ההמרה",
@@ -50,7 +47,6 @@
"The app will be downloaded from the app store" : "היישום ירד מחנות היישומים",
"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." : "יישומים מאושרים מפותחים על ידי מפתחים מהימנים ועברו בדיקת הבטחה ראשונית. הם נשמרים באופן פעיל במאגר קוד פתוח והמתזקים שלהם מייעדים אותם לשימוש מזדמן ורגיל.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "יישום זה לא נבדק לבעיות אבטחה והוא חדש או ידוע כלא יציב. התקנת יישום זה הנה על אחריותך בלבד.",
- "Please wait...." : "נא להמתין…",
"Error while disabling app" : "אירעה שגיאה בעת נטרול היישום",
"Disable" : "ניטרול",
"Enable" : "הפעלה",
@@ -194,7 +190,6 @@
"This app has an update available." : "ליישום זה קיים עדכון זמין.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "לא ניתן להתקין את יישום זה כיוון שייחסי התלות הבאים לא התקיימו:",
"Enable only for specific groups" : "אפשר רק לקבוצות מסויימות",
- "Uninstall App" : "הסרת יישום",
"SSL Root Certificates" : "אישורי אבטחת SSL לנתיב יסוד",
"Common Name" : "שם משותף",
"Valid until" : "בתוקף עד",
@@ -258,7 +253,11 @@
"Default" : "ברירת מחדל",
"log-level out of allowed range" : "גודל הלוג מעבר לרמה המותרת",
"Language changed" : "שפה השתנתה",
+ "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים",
+ "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s",
+ "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "האם באמת להוסיף \"{domain}\" כשם מתחם מהימן?",
+ "Please wait...." : "נא להמתין…",
"Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)",
"Info, warnings, errors and fatal issues" : "מידע, אזהרות, שגיאות ונושאים חמורים",
"Warnings, errors and fatal issues" : "אזהרות, שגיאות ונושאים חמורים",
@@ -276,14 +275,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.",
"Experimental applications ahead" : "ישומים ניסיוניים לפנים",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "יישומים ניסיוניים לא נבדקו לבעיות אבטחה, חדשים או ידועים כלא יציבים ותחת פיתוח כבד. התקנה שלהם עלולה להוביל לאיבוד מידע או לפרצות אבטחה.",
+ "Uninstall App" : "הסרת יישום",
"Enable experimental apps" : "אפשר יישומים ניסיוניים",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "שלום,<br><br>רק רצינו להודיע שעכשיו יש לך %s חשבון.<br><br>Your שם משתמש: %s<br>כניסה: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "שלום,\n\nרק רצינו להודיע שעכשיו יש לך %s חשבון.\n\nשם המשתמש שלך: %s\nכניסה: %s\n\n",
- "Group" : "קבוצה",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "אחסון חיצוני",
- "Updates" : "עדכונים",
- "An error occurred: {message}" : "אירעה שגיאה: {message}"
+ "Group" : "קבוצה"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js
index 6fdcdf760d1..267befb6645 100644
--- a/settings/l10n/hr.js
+++ b/settings/l10n/hr.js
@@ -17,14 +17,10 @@ OC.L10N.register(
"Your full name has been changed." : "Vaše puno ime je promijenjeno.",
"Email saved" : "E-pošta spremljena",
"Couldn't remove app." : "Nije moguće ukloniti app.",
- "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
- "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
- "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Couldn't update app." : "Ažuriranje aplikacija nije moguće",
"Add trusted domain" : "Dodajte pouzdanu domenu",
"Sending..." : "Slanje...",
"All" : "Sve",
- "Please wait...." : "Molimo pričekajte...",
"Error while disabling app" : "Pogreška pri onemogućavanju app",
"Disable" : "Onemogućite",
"Enable" : "Omogućite",
@@ -98,7 +94,6 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Ove će grupe još uvijek moći primati dijeljene resurse, ali ne i inicirati ih",
"Documentation:" : "Dokumentacija:",
"Enable only for specific groups" : "Omogućite samo za specifične grupe",
- "Uninstall App" : "Deinstalirajte app",
"Common Name" : "Common Name",
"Valid until" : "Valid until",
"Issued By" : "Issued By",
@@ -135,7 +130,11 @@ OC.L10N.register(
"set new password" : "postavite novu lozinku",
"Default" : "Zadano",
"Language changed" : "Promjena jezika",
+ "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
+ "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
+ "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
+ "Please wait...." : "Molimo pričekajte...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Sve (kobni problemi, pogreške, upozorenja, ispravljanje pogrešaka)",
"Info, warnings, errors and fatal issues" : "Informacije, upozorenja, pogreške i kobni problemi",
"Warnings, errors and fatal issues" : "Upozorenja, pogreške i kobni problemi",
@@ -145,8 +144,7 @@ OC.L10N.register(
"More" : "Više",
"Less" : "Manje",
"Allow users to send mail notification for shared files" : "Dopustite korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
- "Group" : "Grupa",
- "External Storage" : "Vanjsko spremište",
- "Updates" : "nadogradnje"
+ "Uninstall App" : "Deinstalirajte app",
+ "Group" : "Grupa"
},
"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json
index ecfff147b4d..22f56cf81f4 100644
--- a/settings/l10n/hr.json
+++ b/settings/l10n/hr.json
@@ -15,14 +15,10 @@
"Your full name has been changed." : "Vaše puno ime je promijenjeno.",
"Email saved" : "E-pošta spremljena",
"Couldn't remove app." : "Nije moguće ukloniti app.",
- "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
- "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
- "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Couldn't update app." : "Ažuriranje aplikacija nije moguće",
"Add trusted domain" : "Dodajte pouzdanu domenu",
"Sending..." : "Slanje...",
"All" : "Sve",
- "Please wait...." : "Molimo pričekajte...",
"Error while disabling app" : "Pogreška pri onemogućavanju app",
"Disable" : "Onemogućite",
"Enable" : "Omogućite",
@@ -96,7 +92,6 @@
"These groups will still be able to receive shares, but not to initiate them." : "Ove će grupe još uvijek moći primati dijeljene resurse, ali ne i inicirati ih",
"Documentation:" : "Dokumentacija:",
"Enable only for specific groups" : "Omogućite samo za specifične grupe",
- "Uninstall App" : "Deinstalirajte app",
"Common Name" : "Common Name",
"Valid until" : "Valid until",
"Issued By" : "Issued By",
@@ -133,7 +128,11 @@
"set new password" : "postavite novu lozinku",
"Default" : "Zadano",
"Language changed" : "Promjena jezika",
+ "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe",
+ "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće",
+ "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
+ "Please wait...." : "Molimo pričekajte...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Sve (kobni problemi, pogreške, upozorenja, ispravljanje pogrešaka)",
"Info, warnings, errors and fatal issues" : "Informacije, upozorenja, pogreške i kobni problemi",
"Warnings, errors and fatal issues" : "Upozorenja, pogreške i kobni problemi",
@@ -143,8 +142,7 @@
"More" : "Više",
"Less" : "Manje",
"Allow users to send mail notification for shared files" : "Dopustite korisnicima slanje notifikacijske e-pošte za podijeljene datoteke",
- "Group" : "Grupa",
- "External Storage" : "Vanjsko spremište",
- "Updates" : "nadogradnje"
+ "Uninstall App" : "Deinstalirajte app",
+ "Group" : "Grupa"
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
} \ No newline at end of file
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index 5dbce3a57d4..73883a1107d 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "E-mail elmentve!",
"Password confirmation is required" : "Jelszó megerősítés szükséges",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
- "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
- "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
- "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s",
"Couldn't update app." : "Az alkalmazás frissítése nem sikerült.",
"Are you really sure you want add {domain} as trusted domain?" : "Biztos, hogy hozzá akarod adni ezt a megbízható domainekhez: {domain} ?",
"Add trusted domain" : "Megbízható tartomány hozzáadása",
@@ -58,7 +55,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "A hivatalos alkalmazásokat a közösség fejleszti. Ezek adják a központi funkcionalitásokat és éles rendszerekben használhatóak.",
"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." : "A jóváhagyott alkalmazásokat megbízható fejlesztők készítik, amik megfelelnek a felületes biztonsági ellenőrzésnek. Nyílt forráskódú tárolóban aktívan karbantartják és biztosítják a stabil használatot.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!",
- "Please wait...." : "Kérlek várj...",
+ "Enabling app …" : "Alkalmazás engedélyezése ...",
"Error while disabling app" : "Hiba az alkalmazás letiltása közben",
"Disable" : "Letiltás",
"Enable" : "Engedélyezés",
@@ -247,7 +244,7 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ennek az alkalmazásnak nincs maximum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ezt az alkalmazást nem lehet telepíteni, mert a következő függőségek hiányoznak:",
"Enable only for specific groups" : "Csak bizonyos csoportok számára tegyük elérhetővé",
- "Uninstall App" : "Alkalmazás eltávolítása",
+ "Uninstall app" : "Alkalmazás eltávolítása",
"SSL Root Certificates" : "SSL Root tanusítványok",
"Common Name" : "Általános Név",
"Valid until" : "Érvényes",
@@ -341,7 +338,11 @@ OC.L10N.register(
"Default" : "Alapértelmezett",
"log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
"Language changed" : "A nyelv megváltozott",
+ "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
+ "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
+ "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
+ "Please wait...." : "Kérlek várj...",
"iPhone" : "iPhone",
"add group" : "csoport hozzáadása",
"Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)",
@@ -361,6 +362,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.",
"Experimental applications ahead" : "Kísérleti alkalmazások",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "A kísérleti alkalmazások nincsenek biztonsági ellenőrizve, ismert vagy ismeretlen hibák lehetnek bennük és aktív fejlesztés alatt állnak. A telepítésük adatvesztéshez vezethet, vagy biztonsági kockázata lehet.",
+ "Uninstall App" : "Alkalmazás eltávolítása",
"Enable experimental apps" : "Kísérleti alkalmazások engedélyezése",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Üdv!<br><br>Értesítünk, hogy van egy %s fiókja.<br><br>Felhasználónév: %s<br>Hozzáférés: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Üdv!\n\nÉrtesítünk, hogy van egy %s fiókja.\n\nFelhasználónév: %s\nHozzáférés: %s\n\n",
@@ -372,24 +374,6 @@ OC.L10N.register(
"Group Admin for" : "Csoport Adminisztrátor itt",
"Storage Location" : "A háttértár helye",
"User Backend" : "Felhasználói háttér",
- "Last Login" : "Utolsó bejelentkezés",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Külső tárolási szolgáltatások becsatolása",
- "Updates" : "Frissítések",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "A hivatalos alkalmazásokat a Nextcloud közösség fejleszti. Ezek adják a Nextcloud központi funkcionalitásait és éles rendszerekben használhatóak.",
- "No apps found for \"{query}\"" : "\"{query}\" keresésre nincs találat",
- "An error occurred: {message}" : "Hiba történt: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használsz.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázisa nem tud \"READ COMMITED\" tranzakció elkülinítési szinttel. Ez problémákat okozhat ha több egyidejű esemény van végrehajtva.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "A szervered Microsoft Windowson fut. A legjobb felhasználói élményért erősen javasoljuk, hogy Linuxot használj.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerüld ezeket a problémákat. Nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"#log-section\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérlek olvassa el a Nextcloud dokumentációt, hogy további információkat szerezhess a titkosítási alkalmazás működéséről, és a támogatott lehetőségekről.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használd ezt a parancssort: 'occ db:convert-type', vagy nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Ennek az alkalmazásnak nincs minimum szükséges Nextcloud verziója megadva. A Nextcloud 11-et követően ez hibát fog okozni.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Ennek az alkalmazásnak nincs maximum szükséges Nextcloud verziója megadva. A Nextcloud 11-et követően ez hibát fog okozni.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">segítsd a többi felhasználót</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Fejlesztve a {communityopen}Nextcloud közösség{linkclose} által, a {githubopen}forráskód{linkclose} az {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} licensz alá tartozik."
+ "Last Login" : "Utolsó bejelentkezés"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 518271f63ee..aad4e32d971 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -37,9 +37,6 @@
"Email saved" : "E-mail elmentve!",
"Password confirmation is required" : "Jelszó megerősítés szükséges",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
- "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
- "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
- "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s",
"Couldn't update app." : "Az alkalmazás frissítése nem sikerült.",
"Are you really sure you want add {domain} as trusted domain?" : "Biztos, hogy hozzá akarod adni ezt a megbízható domainekhez: {domain} ?",
"Add trusted domain" : "Megbízható tartomány hozzáadása",
@@ -56,7 +53,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "A hivatalos alkalmazásokat a közösség fejleszti. Ezek adják a központi funkcionalitásokat és éles rendszerekben használhatóak.",
"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." : "A jóváhagyott alkalmazásokat megbízható fejlesztők készítik, amik megfelelnek a felületes biztonsági ellenőrzésnek. Nyílt forráskódú tárolóban aktívan karbantartják és biztosítják a stabil használatot.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!",
- "Please wait...." : "Kérlek várj...",
+ "Enabling app …" : "Alkalmazás engedélyezése ...",
"Error while disabling app" : "Hiba az alkalmazás letiltása közben",
"Disable" : "Letiltás",
"Enable" : "Engedélyezés",
@@ -245,7 +242,7 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ennek az alkalmazásnak nincs maximum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ezt az alkalmazást nem lehet telepíteni, mert a következő függőségek hiányoznak:",
"Enable only for specific groups" : "Csak bizonyos csoportok számára tegyük elérhetővé",
- "Uninstall App" : "Alkalmazás eltávolítása",
+ "Uninstall app" : "Alkalmazás eltávolítása",
"SSL Root Certificates" : "SSL Root tanusítványok",
"Common Name" : "Általános Név",
"Valid until" : "Érvényes",
@@ -339,7 +336,11 @@
"Default" : "Alapértelmezett",
"log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
"Language changed" : "A nyelv megváltozott",
+ "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
+ "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s",
+ "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
+ "Please wait...." : "Kérlek várj...",
"iPhone" : "iPhone",
"add group" : "csoport hozzáadása",
"Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)",
@@ -359,6 +360,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.",
"Experimental applications ahead" : "Kísérleti alkalmazások",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "A kísérleti alkalmazások nincsenek biztonsági ellenőrizve, ismert vagy ismeretlen hibák lehetnek bennük és aktív fejlesztés alatt állnak. A telepítésük adatvesztéshez vezethet, vagy biztonsági kockázata lehet.",
+ "Uninstall App" : "Alkalmazás eltávolítása",
"Enable experimental apps" : "Kísérleti alkalmazások engedélyezése",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Üdv!<br><br>Értesítünk, hogy van egy %s fiókja.<br><br>Felhasználónév: %s<br>Hozzáférés: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Üdv!\n\nÉrtesítünk, hogy van egy %s fiókja.\n\nFelhasználónév: %s\nHozzáférés: %s\n\n",
@@ -370,24 +372,6 @@
"Group Admin for" : "Csoport Adminisztrátor itt",
"Storage Location" : "A háttértár helye",
"User Backend" : "Felhasználói háttér",
- "Last Login" : "Utolsó bejelentkezés",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Külső tárolási szolgáltatások becsatolása",
- "Updates" : "Frissítések",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "A hivatalos alkalmazásokat a Nextcloud közösség fejleszti. Ezek adják a Nextcloud központi funkcionalitásait és éles rendszerekben használhatóak.",
- "No apps found for \"{query}\"" : "\"{query}\" keresésre nincs találat",
- "An error occurred: {message}" : "Hiba történt: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használsz.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázisa nem tud \"READ COMMITED\" tranzakció elkülinítési szinttel. Ez problémákat okozhat ha több egyidejű esemény van végrehajtva.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "A szervered Microsoft Windowson fut. A legjobb felhasználói élményért erősen javasoljuk, hogy Linuxot használj.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerüld ezeket a problémákat. Nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"#log-section\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérlek olvassa el a Nextcloud dokumentációt, hogy további információkat szerezhess a titkosítási alkalmazás működéséről, és a támogatott lehetőségekről.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használd ezt a parancssort: 'occ db:convert-type', vagy nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Ennek az alkalmazásnak nincs minimum szükséges Nextcloud verziója megadva. A Nextcloud 11-et követően ez hibát fog okozni.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Ennek az alkalmazásnak nincs maximum szükséges Nextcloud verziója megadva. A Nextcloud 11-et követően ez hibát fog okozni.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">segítsd a többi felhasználót</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Fejlesztve a {communityopen}Nextcloud közösség{linkclose} által, a {githubopen}forráskód{linkclose} az {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} licensz alá tartozik."
+ "Last Login" : "Utolsó bejelentkezés"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/hy.js b/settings/l10n/hy.js
index 0f45f06c9c4..b97727b3be2 100644
--- a/settings/l10n/hy.js
+++ b/settings/l10n/hy.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Username" : "Օգտանուն",
"Other" : "Այլ",
"Language changed" : "Լեզուն փոխվեց",
- "Group" : "Խումբ",
- "Updates" : "Թարմացումներ"
+ "Group" : "Խումբ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/hy.json b/settings/l10n/hy.json
index 510df5f3d72..7c007f317a1 100644
--- a/settings/l10n/hy.json
+++ b/settings/l10n/hy.json
@@ -22,7 +22,6 @@
"Username" : "Օգտանուն",
"Other" : "Այլ",
"Language changed" : "Լեզուն փոխվեց",
- "Group" : "Խումբ",
- "Updates" : "Թարմացումներ"
+ "Group" : "Խումբ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/ia.js b/settings/l10n/ia.js
new file mode 100644
index 00000000000..d5e36dc56dd
--- /dev/null
+++ b/settings/l10n/ia.js
@@ -0,0 +1,10 @@
+OC.L10N.register(
+ "settings",
+ {
+ "Enabled" : "Activate",
+ "Wrong password" : "Contrasigno incorrecte",
+ "Saved" : "Salveguardate",
+ "Authentication error" : "Error in authentication",
+ "Email sent" : "Message de e-posta inviate"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ia.json b/settings/l10n/ia.json
new file mode 100644
index 00000000000..eb2c0321440
--- /dev/null
+++ b/settings/l10n/ia.json
@@ -0,0 +1,8 @@
+{ "translations": {
+ "Enabled" : "Activate",
+ "Wrong password" : "Contrasigno incorrecte",
+ "Saved" : "Salveguardate",
+ "Authentication error" : "Error in authentication",
+ "Email sent" : "Message de e-posta inviate"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index 96f5c162a5b..42829f7a679 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Tidak dapat mengubah alamat email",
"Email saved" : "Email disimpan",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
- "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
- "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
- "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s",
"Couldn't update app." : "Tidak dapat memperbarui aplikasi.",
"Add trusted domain" : "Tambah domain terpercaya",
"Migration in progress. Please wait until the migration is finished" : "Migrasi sedang dalam proses. Mohon tunggu sampai migrasi selesai.",
@@ -53,7 +50,6 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplikasi resmi dikembangkan oleh dan didalam komunitas. Mereka menawarkan fungsi sentral dan siap untuk penggunaan produksi.",
"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." : "Aplikasi tersetujui dikembangkan oleh pengembang terpercaya dan telah lulus pemeriksaan keamanan. Mereka secara aktif dipelihara direpositori kode terbuka dan pemelihara sudah memastikan mereka stabil untuk penggunaan normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Apl ini belum diperiksa masalah keamanannya dan masih baru atau biasanya tidak stabil. Instal dengan resiko Anda sendiri.",
- "Please wait...." : "Mohon tunggu....",
"Error while disabling app" : "Terjadi kesalahan saat menonaktifkan aplikasi",
"Disable" : "Nonaktifkan",
"Enable" : "Aktifkan",
@@ -218,7 +214,6 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Aplikasi ini tidak mempunyai versi maksimum Nextcloud yang ditetapkan. Di masa depan nanti ini akan menjadi kesalahan.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Apl ini tidak dapat diinstal karena ketergantungan berikut belum terpenuhi:",
"Enable only for specific groups" : "Aktifkan hanya untuk grup tertentu",
- "Uninstall App" : "Copot aplikasi",
"SSL Root Certificates" : "Sertifikat Root SSL",
"Common Name" : "Nama umum",
"Valid until" : "Berlaku sampai",
@@ -294,7 +289,11 @@ OC.L10N.register(
"Default" : "Default",
"log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
"Language changed" : "Bahasa telah diubah",
+ "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
+ "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
+ "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
+ "Please wait...." : "Mohon tunggu....",
"iPhone" : "iPhone",
"add group" : "tambah grup",
"Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)",
@@ -314,6 +313,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Terutama saat menggunakan klien desktop untuk sinkronisasi berkas, penggunaan SQLite tidak disarankan.",
"Experimental applications ahead" : "Aplikasi percobaan terdepan",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikasi percobaan belum diperiksa untuk masalah keamanan, baru atau dikenal tidak stabil dan dalam proses pengembangan. Menginstalnya dapat menyebabkan kehilangan data atau penerobosan keamanan.",
+ "Uninstall App" : "Copot aplikasi",
"Enable experimental apps" : "Aktifkan aplikasi percobaan",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hai,<br><br>sekedar memberi tahu bahwa Andaa sekarang memiliki akun %s.<br><br>Nama Pengguna Anda: %s<br>Akses di: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hai,\n\nsekedar memberi tahu bahwa Andaa sekarang memiliki akun %s.\n\nNama Pengguna Anda: %s\nAkses di: %s\n",
@@ -324,24 +324,6 @@ OC.L10N.register(
"Group Admin for" : "Grup Admin untuk",
"Storage Location" : "Lokasi Penyimpanan",
"User Backend" : "Backend Pengguna",
- "Last Login" : "Log Masuk Terakhir",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Penyimpanan Eksternal",
- "Updates" : "Pembaruan",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Aplikasi resmi dikembangkan oleh dan didalam komunitas Nextcloud. Mereka menawarkan fungsi sentral untuk Nextcloud dan siap untuk penggunaan produksi.",
- "No apps found for \"{query}\"" : "Tidak ditemukan aplikasi untuk \"{query}\"",
- "An error occurred: {message}" : "Sebuah kesalahan yang muncul: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon cek <a target=\"_blank\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Database Anda tidak dijalankan dengan isolasi transaksi level \"READ COMMITED\". Ini dapat menyebabkan masalah saat banyak tindakan dilakukan secara paralel.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Server Anda dijalankan di Microsoft Windows. Kami sangat menyarankan Linux untuk mendapatkan pengalaman pengguna yang optimal.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Penguncian berkas transaksional nonaktif, ini dapat menyebabkan masalah dengan kondisi tertentu. Aktifkan 'filelocking.enabled' dalam config.php untuk menghindari masalah ini. Lihat <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a> untuk informasi lebih lanjut.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon cek <a target=\"_blank\" href=\"%s\">petunjuk instalasi ↗</a>, dan cek masalah atau peringatan di <a href=\"#log-section\">log</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi Nextcloud untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Untuk migrasi ke database lain, gunakan alat command line: 'occ db:convert-type', atau lihat <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Aplikasi ini tidak mempunyai versi minimum Nextcloud yang ditetapkan. Ini akan menjadi kesalahan dalam Nextcloud 11 atau versi yang lebih tinggi.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Aplikasi ini tidak mempunyai versi maksimum Nextcloud yang ditetapkan. Ini akan menjadi kesalahan dalam Nextcloud 11 atau versi yang lebih tinggi.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Apabila Anda ingin mendukung proyek ini\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ikuti pengembangannya</a>\n\t\tatau\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">bantu pengguna lainnya</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Log Masuk Terakhir"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index bca26730533..4b9ed65bd57 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Tidak dapat mengubah alamat email",
"Email saved" : "Email disimpan",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
- "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
- "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
- "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s",
"Couldn't update app." : "Tidak dapat memperbarui aplikasi.",
"Add trusted domain" : "Tambah domain terpercaya",
"Migration in progress. Please wait until the migration is finished" : "Migrasi sedang dalam proses. Mohon tunggu sampai migrasi selesai.",
@@ -51,7 +48,6 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplikasi resmi dikembangkan oleh dan didalam komunitas. Mereka menawarkan fungsi sentral dan siap untuk penggunaan produksi.",
"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." : "Aplikasi tersetujui dikembangkan oleh pengembang terpercaya dan telah lulus pemeriksaan keamanan. Mereka secara aktif dipelihara direpositori kode terbuka dan pemelihara sudah memastikan mereka stabil untuk penggunaan normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Apl ini belum diperiksa masalah keamanannya dan masih baru atau biasanya tidak stabil. Instal dengan resiko Anda sendiri.",
- "Please wait...." : "Mohon tunggu....",
"Error while disabling app" : "Terjadi kesalahan saat menonaktifkan aplikasi",
"Disable" : "Nonaktifkan",
"Enable" : "Aktifkan",
@@ -216,7 +212,6 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Aplikasi ini tidak mempunyai versi maksimum Nextcloud yang ditetapkan. Di masa depan nanti ini akan menjadi kesalahan.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Apl ini tidak dapat diinstal karena ketergantungan berikut belum terpenuhi:",
"Enable only for specific groups" : "Aktifkan hanya untuk grup tertentu",
- "Uninstall App" : "Copot aplikasi",
"SSL Root Certificates" : "Sertifikat Root SSL",
"Common Name" : "Nama umum",
"Valid until" : "Berlaku sampai",
@@ -292,7 +287,11 @@
"Default" : "Default",
"log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
"Language changed" : "Bahasa telah diubah",
+ "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
+ "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
+ "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
+ "Please wait...." : "Mohon tunggu....",
"iPhone" : "iPhone",
"add group" : "tambah grup",
"Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)",
@@ -312,6 +311,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Terutama saat menggunakan klien desktop untuk sinkronisasi berkas, penggunaan SQLite tidak disarankan.",
"Experimental applications ahead" : "Aplikasi percobaan terdepan",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikasi percobaan belum diperiksa untuk masalah keamanan, baru atau dikenal tidak stabil dan dalam proses pengembangan. Menginstalnya dapat menyebabkan kehilangan data atau penerobosan keamanan.",
+ "Uninstall App" : "Copot aplikasi",
"Enable experimental apps" : "Aktifkan aplikasi percobaan",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hai,<br><br>sekedar memberi tahu bahwa Andaa sekarang memiliki akun %s.<br><br>Nama Pengguna Anda: %s<br>Akses di: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hai,\n\nsekedar memberi tahu bahwa Andaa sekarang memiliki akun %s.\n\nNama Pengguna Anda: %s\nAkses di: %s\n",
@@ -322,24 +322,6 @@
"Group Admin for" : "Grup Admin untuk",
"Storage Location" : "Lokasi Penyimpanan",
"User Backend" : "Backend Pengguna",
- "Last Login" : "Log Masuk Terakhir",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Penyimpanan Eksternal",
- "Updates" : "Pembaruan",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Aplikasi resmi dikembangkan oleh dan didalam komunitas Nextcloud. Mereka menawarkan fungsi sentral untuk Nextcloud dan siap untuk penggunaan produksi.",
- "No apps found for \"{query}\"" : "Tidak ditemukan aplikasi untuk \"{query}\"",
- "An error occurred: {message}" : "Sebuah kesalahan yang muncul: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon cek <a target=\"_blank\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Database Anda tidak dijalankan dengan isolasi transaksi level \"READ COMMITED\". Ini dapat menyebabkan masalah saat banyak tindakan dilakukan secara paralel.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Server Anda dijalankan di Microsoft Windows. Kami sangat menyarankan Linux untuk mendapatkan pengalaman pengguna yang optimal.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Penguncian berkas transaksional nonaktif, ini dapat menyebabkan masalah dengan kondisi tertentu. Aktifkan 'filelocking.enabled' dalam config.php untuk menghindari masalah ini. Lihat <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a> untuk informasi lebih lanjut.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon cek <a target=\"_blank\" href=\"%s\">petunjuk instalasi ↗</a>, dan cek masalah atau peringatan di <a href=\"#log-section\">log</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi Nextcloud untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Untuk migrasi ke database lain, gunakan alat command line: 'occ db:convert-type', atau lihat <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Aplikasi ini tidak mempunyai versi minimum Nextcloud yang ditetapkan. Ini akan menjadi kesalahan dalam Nextcloud 11 atau versi yang lebih tinggi.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Aplikasi ini tidak mempunyai versi maksimum Nextcloud yang ditetapkan. Ini akan menjadi kesalahan dalam Nextcloud 11 atau versi yang lebih tinggi.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Apabila Anda ingin mendukung proyek ini\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ikuti pengembangannya</a>\n\t\tatau\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">bantu pengguna lainnya</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Log Masuk Terakhir"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/is.js b/settings/l10n/is.js
index 356ca42c2dd..dd390673589 100644
--- a/settings/l10n/is.js
+++ b/settings/l10n/is.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Get ekki breytt tölvupóstfangi",
"Email saved" : "Tölvupóstfang vistað",
"Couldn't remove app." : "Gat ekki fjarlægt forrit.",
- "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
- "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
- "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Couldn't update app." : "Gat ekki uppfært forrit.",
"Add trusted domain" : "Bæta við treystu léni",
"Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið",
@@ -54,7 +51,6 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Opinber forrit eru þróuð af og innan samfélagsins. Þau bjóða upp á ýmsa kjarnaeiginleika og eru tilbúin til notkunar í raunvinnslu.",
"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." : "Samþykkt forrit eru þróuð af treystum forriturum og hafa gengist undir lauslegar öryggisprófanir. Þau eru í virku viðhaldi í opnum hugbúnaðarsöfnum og umsjónarmenn þeirra dæma þau nógu stöðug til notkunar í allri venjulegri vinnslu.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Þetta forrit hefur ekki verið öryggisprófað, er nýtt erða þekkt fyrir ótöðugleika við vissar aðstæður. Uppsetning er á þína ábyrgð.",
- "Please wait...." : "Andartak....",
"Error while disabling app" : "Villa við að afvirkja forrit",
"Disable" : "Gera óvirkt",
"Enable" : "Virkja",
@@ -217,7 +213,6 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Þetta vorrit er ekki með tiltekna neina hámarksútgáfu Nextcloud. Þetta mun gefa villu í framtíðinni.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ekki var hægt að setja upp forritið þar sem eftirfarandi kerfiskröfur eru ekki uppfylltar:",
"Enable only for specific groups" : "Einungis fyrir sérstaka hópa",
- "Uninstall App" : "Fjarlægja/Henda út forriti",
"SSL Root Certificates" : "SSL-rótarskilríki",
"Common Name" : "Almennt heiti",
"Valid until" : "Gildir til",
@@ -298,7 +293,11 @@ OC.L10N.register(
"Default" : "Sjálfgefið",
"log-level out of allowed range" : "annálsstig utan leyfðra marka",
"Language changed" : "Tungumáli breytt",
+ "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
+ "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
+ "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ertu viss um að þú viljir bæta \"{domain}\" við sem treystu léni?",
+ "Please wait...." : "Andartak....",
"iPhone" : "iPhone",
"add group" : "bæta við hópi",
"Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)",
@@ -318,6 +317,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Sérstaklega þegar tölvu forrit er notað til samræmingar þá er ekki mælt með notkunn SQLite.",
"Experimental applications ahead" : "Forrit á tilraunastigi fyrst",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Tilraunaforrit eru ekki yfirfarin með tilliti til öryggisvandamála, þau eru þekkt fyrir að vera óstöðug og þróast hratt. Uppsetning þeirra getur valdið gagnatapi og öryggisbrestum.",
+ "Uninstall App" : "Fjarlægja/Henda út forriti",
"Enable experimental apps" : "Virkja forrit á tilraunastigi",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hæ þú,<br><br>bara að láta þig vita að þú átt núna %s aðgang.<br><br>Notandanafnið þitt: %s<br>Tengstu honum: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hæ þú,\n\nbara að láta þig vita að þú átt núna %s aðgang.\n\nNotandanafnið þitt: %s\nTengstu honum: %s\n\n",
@@ -329,23 +329,6 @@ OC.L10N.register(
"Group Admin for" : "Hópstjóri fyrir",
"Storage Location" : "Staðsetning gagnageymslu",
"User Backend" : "Bakendi notanda",
- "Last Login" : "Síðasta innskráning",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Ytri gagnageymsla",
- "Updates" : "Uppfærslur",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Opinber forrit eru þróuð af og innan Nextcloud samfélagsins. Þau virka með kjarnaeiginleikum Nextcloud og eru tilbúin til notkunar í raunvinnslu.",
- "No apps found for \"{query}\"" : "Engin forrit fundust fyrir \"{query}\"",
- "An error occurred: {message}" : "Villa kom upp: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Endilega skoðaðu <a target=\"_blank\" href=\"%s\">hjálparskjöl uppsetningarinnar ↗</a> varðandi athugasemdir vegna uppsetningar PHP og sjálfa uppsetningu PHP-þjónsins, Sérstaklega ef þú notar php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Gagnagrunnurinn keyrir ekki með \"READ COMMITED\" færsluaðgreiningarstiginu. Þetta getur valdið vandamálum þegar margar aðgerðir eru keyrðar í einu.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Þjónninn þinn er keyrandi á Microsoft Windows. Við mælum sterklega með Linux til að njóta sem best allra eiginleika fyrir notendurna.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Yfirfarðu vandlega <a target=\"_blank\" href=\"%s\">uppsetningarleiðbeiningarnar ↗</a>, og athugaðu hvort nokkrar villumeldingar eða aðvaranir séu í <a href=\"#log-section\">annálnum</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Dulritun ein og sér tryggir ekki öryggi kerfisins. Endilega skoðaðu hjálparskjölin um hvernig dulritunarforritið virkar, og dæmi um hvaða uppsetningar eru studdar.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Til að yfirfæra í annan gagnagrunn skaltu nota skipanalínutólið: 'occ db:convert-type', eða lesa <a target=\"_blank\" href=\"%s\">hjálparskjölin ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Þetta vorrit er ekki með tiltekna neina lágmarksútgáfu Nextcloud. Þetta mun gefa villu í Nextcloud 11 og nýrri.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Þetta vorrit er ekki með tiltekna neina hámarksútgáfu Nextcloud. Þetta mun gefa villu í Nextcloud 11 og nýrri.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ef þú vilt styðja við verkefnið\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">taktu þátt í þróuninni</a>\n\t\teða\n\t\t<a href=\"https://help.nextcloud.com\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hjálpaðu öðrum notendum</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Þróað af {communityopen}Nextcloud samfélaginu{linkclose}, {githubopen}grunnkóðinn{linkclose} er gefinn út með {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} notkunarleyfinu."
+ "Last Login" : "Síðasta innskráning"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/settings/l10n/is.json b/settings/l10n/is.json
index b4df1b0e76f..f5bf0bee0b9 100644
--- a/settings/l10n/is.json
+++ b/settings/l10n/is.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Get ekki breytt tölvupóstfangi",
"Email saved" : "Tölvupóstfang vistað",
"Couldn't remove app." : "Gat ekki fjarlægt forrit.",
- "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
- "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
- "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Couldn't update app." : "Gat ekki uppfært forrit.",
"Add trusted domain" : "Bæta við treystu léni",
"Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið",
@@ -52,7 +49,6 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Opinber forrit eru þróuð af og innan samfélagsins. Þau bjóða upp á ýmsa kjarnaeiginleika og eru tilbúin til notkunar í raunvinnslu.",
"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." : "Samþykkt forrit eru þróuð af treystum forriturum og hafa gengist undir lauslegar öryggisprófanir. Þau eru í virku viðhaldi í opnum hugbúnaðarsöfnum og umsjónarmenn þeirra dæma þau nógu stöðug til notkunar í allri venjulegri vinnslu.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Þetta forrit hefur ekki verið öryggisprófað, er nýtt erða þekkt fyrir ótöðugleika við vissar aðstæður. Uppsetning er á þína ábyrgð.",
- "Please wait...." : "Andartak....",
"Error while disabling app" : "Villa við að afvirkja forrit",
"Disable" : "Gera óvirkt",
"Enable" : "Virkja",
@@ -215,7 +211,6 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Þetta vorrit er ekki með tiltekna neina hámarksútgáfu Nextcloud. Þetta mun gefa villu í framtíðinni.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ekki var hægt að setja upp forritið þar sem eftirfarandi kerfiskröfur eru ekki uppfylltar:",
"Enable only for specific groups" : "Einungis fyrir sérstaka hópa",
- "Uninstall App" : "Fjarlægja/Henda út forriti",
"SSL Root Certificates" : "SSL-rótarskilríki",
"Common Name" : "Almennt heiti",
"Valid until" : "Gildir til",
@@ -296,7 +291,11 @@
"Default" : "Sjálfgefið",
"log-level out of allowed range" : "annálsstig utan leyfðra marka",
"Language changed" : "Tungumáli breytt",
+ "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
+ "Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
+ "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ertu viss um að þú viljir bæta \"{domain}\" við sem treystu léni?",
+ "Please wait...." : "Andartak....",
"iPhone" : "iPhone",
"add group" : "bæta við hópi",
"Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)",
@@ -316,6 +315,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Sérstaklega þegar tölvu forrit er notað til samræmingar þá er ekki mælt með notkunn SQLite.",
"Experimental applications ahead" : "Forrit á tilraunastigi fyrst",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Tilraunaforrit eru ekki yfirfarin með tilliti til öryggisvandamála, þau eru þekkt fyrir að vera óstöðug og þróast hratt. Uppsetning þeirra getur valdið gagnatapi og öryggisbrestum.",
+ "Uninstall App" : "Fjarlægja/Henda út forriti",
"Enable experimental apps" : "Virkja forrit á tilraunastigi",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hæ þú,<br><br>bara að láta þig vita að þú átt núna %s aðgang.<br><br>Notandanafnið þitt: %s<br>Tengstu honum: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hæ þú,\n\nbara að láta þig vita að þú átt núna %s aðgang.\n\nNotandanafnið þitt: %s\nTengstu honum: %s\n\n",
@@ -327,23 +327,6 @@
"Group Admin for" : "Hópstjóri fyrir",
"Storage Location" : "Staðsetning gagnageymslu",
"User Backend" : "Bakendi notanda",
- "Last Login" : "Síðasta innskráning",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Ytri gagnageymsla",
- "Updates" : "Uppfærslur",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Opinber forrit eru þróuð af og innan Nextcloud samfélagsins. Þau virka með kjarnaeiginleikum Nextcloud og eru tilbúin til notkunar í raunvinnslu.",
- "No apps found for \"{query}\"" : "Engin forrit fundust fyrir \"{query}\"",
- "An error occurred: {message}" : "Villa kom upp: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Endilega skoðaðu <a target=\"_blank\" href=\"%s\">hjálparskjöl uppsetningarinnar ↗</a> varðandi athugasemdir vegna uppsetningar PHP og sjálfa uppsetningu PHP-þjónsins, Sérstaklega ef þú notar php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Gagnagrunnurinn keyrir ekki með \"READ COMMITED\" færsluaðgreiningarstiginu. Þetta getur valdið vandamálum þegar margar aðgerðir eru keyrðar í einu.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Þjónninn þinn er keyrandi á Microsoft Windows. Við mælum sterklega með Linux til að njóta sem best allra eiginleika fyrir notendurna.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Yfirfarðu vandlega <a target=\"_blank\" href=\"%s\">uppsetningarleiðbeiningarnar ↗</a>, og athugaðu hvort nokkrar villumeldingar eða aðvaranir séu í <a href=\"#log-section\">annálnum</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Dulritun ein og sér tryggir ekki öryggi kerfisins. Endilega skoðaðu hjálparskjölin um hvernig dulritunarforritið virkar, og dæmi um hvaða uppsetningar eru studdar.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Til að yfirfæra í annan gagnagrunn skaltu nota skipanalínutólið: 'occ db:convert-type', eða lesa <a target=\"_blank\" href=\"%s\">hjálparskjölin ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Þetta vorrit er ekki með tiltekna neina lágmarksútgáfu Nextcloud. Þetta mun gefa villu í Nextcloud 11 og nýrri.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Þetta vorrit er ekki með tiltekna neina hámarksútgáfu Nextcloud. Þetta mun gefa villu í Nextcloud 11 og nýrri.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ef þú vilt styðja við verkefnið\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">taktu þátt í þróuninni</a>\n\t\teða\n\t\t<a href=\"https://help.nextcloud.com\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hjálpaðu öðrum notendum</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Þróað af {communityopen}Nextcloud samfélaginu{linkclose}, {githubopen}grunnkóðinn{linkclose} er gefinn út með {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} notkunarleyfinu."
+ "Last Login" : "Síðasta innskráning"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index d81471d7a5f..727e98fa774 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.",
"Invalid request" : "Richiesta non valida",
"Invalid mail address" : "Indirizzo email non valido",
+ "No valid group selected" : "Nessun gruppo valido selezionato",
"A user with that name already exists." : "Un utente con quel nome esiste già.",
"Unable to create user." : "Impossibile creare l'utente.",
"Your %s account was created" : "Il tuo account %s è stato creato",
@@ -39,9 +40,6 @@ OC.L10N.register(
"Email saved" : "Email salvata",
"Password confirmation is required" : "La conferma della password è richiesta",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
- "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
- "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s",
- "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s",
"Couldn't update app." : "Impossibile aggiornate l'applicazione.",
"Are you really sure you want add {domain} as trusted domain?" : "Sei davvero sicuro di voler aggiungere {domain} come dominio attendibile?",
"Add trusted domain" : "Aggiungi dominio attendibile",
@@ -58,7 +56,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Le applicazioni ufficiali sono sviluppate dalla comunità. Esse offrono nuove funzionalità e sono pronte per l'uso in produzione.",
"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." : "Le applicazioni approvate sono sviluppate da sviluppatori affidabili e hanno passato un rapido controllo di sicurezza. Sono attivamente mantenute in un deposito aperto del codice e i loro responsabili le ritengono pronte sia per un utilizzo casuale che per un utilizzo continuativo.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Questa applicazione non è stata sottoposta a controlli di sicurezza, è nuova o notoriamente instabile. Installala a tuo rischio.",
- "Please wait...." : "Attendere...",
+ "Enabling app …" : "Abilitazione applicazione...",
"Error while disabling app" : "Errore durante la disattivazione",
"Disable" : "Disabilita",
"Enable" : "Abilita",
@@ -125,6 +123,8 @@ OC.L10N.register(
"undo" : "annulla",
"never" : "mai",
"deleted {userName}" : "{userName} eliminato",
+ "Unable to add user to group {group}" : "Impossibile aggiungere l'utente al gruppo {group}",
+ "Unable to remove user from group {group}" : "Impossibile rimuovere l'utente dal gruppo {group}",
"Add group" : "Aggiungi gruppo",
"Invalid quota value \"{val}\"" : "Valore di quota \"{val}\" non valido",
"no group" : "nessun gruppo",
@@ -247,7 +247,7 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Questa applicazione non contiene l'informazione della versione massima di Nextcloud richiesta. In futuro ciò sarà considerato un errore.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Questa applicazione non può essere installata perché le seguenti dipendenze non sono soddisfatte:",
"Enable only for specific groups" : "Abilita solo per gruppi specifici",
- "Uninstall App" : "Disinstalla applicazione",
+ "Uninstall app" : "Disinstalla applicazione",
"SSL Root Certificates" : "Certificati radice SSL",
"Common Name" : "Nome comune",
"Valid until" : "Valido fino al",
@@ -341,7 +341,11 @@ OC.L10N.register(
"Default" : "Predefinito",
"log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
"Language changed" : "Lingua modificata",
+ "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
+ "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s",
+ "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
+ "Please wait...." : "Attendere...",
"iPhone" : "iPhone",
"add group" : "aggiungi gruppo",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)",
@@ -361,6 +365,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.",
"Experimental applications ahead" : "Prima le applicazioni sperimentali",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Le applicazioni sperimentali non sono sottoposte a controlli di sicurezza, sono nuove o notoriamente instabili e sotto sviluppo intensivo. La loro installazione può causare perdite di dati o problemi di sicurezza.",
+ "Uninstall App" : "Disinstalla applicazione",
"Enable experimental apps" : "Abilita le applicazioni sperimentali",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ciao,<br><br>volevo informarti che ora hai un account %s.<br><br>Il tuo nome utente: %s<br>Accedi: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ciao,\n\nvolevo informarti che ora hai un account %s.\n\nIl tuo nome utente: %s\nAccedi: %s\n\n",
@@ -372,24 +377,6 @@ OC.L10N.register(
"Group Admin for" : "Gruppo di amministrazione per",
"Storage Location" : "Posizione di archiviazione",
"User Backend" : "Motore utente",
- "Last Login" : "Ultimo accesso",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Archiviazione esterna",
- "Updates" : "Aggiornamenti",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Le applicazioni ufficiali sono sviluppate dalla comunità di Nextcloud. Esse offrono le funzionalità principali di Nextcloud e sono pronte per l'uso in produzione.",
- "No apps found for \"{query}\"" : "Nessuna applicazione trovata per \"{query}\"",
- "An error occurred: {message}" : "Si è verificato un errore: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" href=\"%s\">documentazione di installazione↗</a> per le note di configurazione di php e la configurazione del tuo server, in particolare quando utilizzi php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Il tuo database non è in esecuzione con il livello di isolamento delle transazioni \"READ COMMITTED\". Ciò può causare problemi quando diverse azioni sono eseguite in parallelo.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Il tuo server è in esecuzione su Microsoft Windows. Consigliamo vivamente Linux per un'esperienza utente ottimale.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Il blocco del file transazionale è disabilitato, ciò potrebbe comportare problemi di race condition. Abilita 'filelocking.enabled' nel config-php per evitare questi problemi. Vedi la <a target=\"_blank\" href=\"%s\">documentazione ↗</a> per ulteriori informazioni.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Leggi attentamente le <a target=\"_blank\" href=\"%s\">guide d'installazione ↗</a>, e controlla gli errori o gli avvisi nel <a href=\"#log-section\">log</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "La sola cifratura non garantisce la sicurezza del sistema. Leggi la documentazione di Nextcloud per ulteriori informazioni sul funzionamento dell'applicazione di cifratura e sui casi d'uso supportati.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Per migrare a un altro database, usa lo strumento da riga di comando: 'occ db:convert-type', o leggi la <a target=\"_blank\" href=\"%s\">documentazione ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Questa applicazione non contiene l'informazione della versione minima di Nextcloud richiesta. In Nextcloud 11 e successive, ciò sarà considerato un errore.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Questa applicazione non contiene l'informazione della versione massima di Nextcloud richiesta. In Nextcloud 11 e successive, ciò sarà considerato un errore.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Se desideri supportare il progetto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">contribuisci allo sviluppo</a>\n\t\to\n\t\t<a href=\"https://help.nextcloud.com/\"\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">aiuta gli altri utenti</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Sviluppato dalla {communityopen}comunità di Nextcloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Ultimo accesso"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 44437586f9d..01b584d12d0 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -23,6 +23,7 @@
"You need to set your user email before being able to send test emails." : "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.",
"Invalid request" : "Richiesta non valida",
"Invalid mail address" : "Indirizzo email non valido",
+ "No valid group selected" : "Nessun gruppo valido selezionato",
"A user with that name already exists." : "Un utente con quel nome esiste già.",
"Unable to create user." : "Impossibile creare l'utente.",
"Your %s account was created" : "Il tuo account %s è stato creato",
@@ -37,9 +38,6 @@
"Email saved" : "Email salvata",
"Password confirmation is required" : "La conferma della password è richiesta",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
- "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
- "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s",
- "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s",
"Couldn't update app." : "Impossibile aggiornate l'applicazione.",
"Are you really sure you want add {domain} as trusted domain?" : "Sei davvero sicuro di voler aggiungere {domain} come dominio attendibile?",
"Add trusted domain" : "Aggiungi dominio attendibile",
@@ -56,7 +54,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Le applicazioni ufficiali sono sviluppate dalla comunità. Esse offrono nuove funzionalità e sono pronte per l'uso in produzione.",
"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." : "Le applicazioni approvate sono sviluppate da sviluppatori affidabili e hanno passato un rapido controllo di sicurezza. Sono attivamente mantenute in un deposito aperto del codice e i loro responsabili le ritengono pronte sia per un utilizzo casuale che per un utilizzo continuativo.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Questa applicazione non è stata sottoposta a controlli di sicurezza, è nuova o notoriamente instabile. Installala a tuo rischio.",
- "Please wait...." : "Attendere...",
+ "Enabling app …" : "Abilitazione applicazione...",
"Error while disabling app" : "Errore durante la disattivazione",
"Disable" : "Disabilita",
"Enable" : "Abilita",
@@ -123,6 +121,8 @@
"undo" : "annulla",
"never" : "mai",
"deleted {userName}" : "{userName} eliminato",
+ "Unable to add user to group {group}" : "Impossibile aggiungere l'utente al gruppo {group}",
+ "Unable to remove user from group {group}" : "Impossibile rimuovere l'utente dal gruppo {group}",
"Add group" : "Aggiungi gruppo",
"Invalid quota value \"{val}\"" : "Valore di quota \"{val}\" non valido",
"no group" : "nessun gruppo",
@@ -245,7 +245,7 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Questa applicazione non contiene l'informazione della versione massima di Nextcloud richiesta. In futuro ciò sarà considerato un errore.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Questa applicazione non può essere installata perché le seguenti dipendenze non sono soddisfatte:",
"Enable only for specific groups" : "Abilita solo per gruppi specifici",
- "Uninstall App" : "Disinstalla applicazione",
+ "Uninstall app" : "Disinstalla applicazione",
"SSL Root Certificates" : "Certificati radice SSL",
"Common Name" : "Nome comune",
"Valid until" : "Valido fino al",
@@ -339,7 +339,11 @@
"Default" : "Predefinito",
"log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
"Language changed" : "Lingua modificata",
+ "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
+ "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s",
+ "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
+ "Please wait...." : "Attendere...",
"iPhone" : "iPhone",
"add group" : "aggiungi gruppo",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)",
@@ -359,6 +363,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.",
"Experimental applications ahead" : "Prima le applicazioni sperimentali",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Le applicazioni sperimentali non sono sottoposte a controlli di sicurezza, sono nuove o notoriamente instabili e sotto sviluppo intensivo. La loro installazione può causare perdite di dati o problemi di sicurezza.",
+ "Uninstall App" : "Disinstalla applicazione",
"Enable experimental apps" : "Abilita le applicazioni sperimentali",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ciao,<br><br>volevo informarti che ora hai un account %s.<br><br>Il tuo nome utente: %s<br>Accedi: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ciao,\n\nvolevo informarti che ora hai un account %s.\n\nIl tuo nome utente: %s\nAccedi: %s\n\n",
@@ -370,24 +375,6 @@
"Group Admin for" : "Gruppo di amministrazione per",
"Storage Location" : "Posizione di archiviazione",
"User Backend" : "Motore utente",
- "Last Login" : "Ultimo accesso",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Archiviazione esterna",
- "Updates" : "Aggiornamenti",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Le applicazioni ufficiali sono sviluppate dalla comunità di Nextcloud. Esse offrono le funzionalità principali di Nextcloud e sono pronte per l'uso in produzione.",
- "No apps found for \"{query}\"" : "Nessuna applicazione trovata per \"{query}\"",
- "An error occurred: {message}" : "Si è verificato un errore: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" href=\"%s\">documentazione di installazione↗</a> per le note di configurazione di php e la configurazione del tuo server, in particolare quando utilizzi php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Il tuo database non è in esecuzione con il livello di isolamento delle transazioni \"READ COMMITTED\". Ciò può causare problemi quando diverse azioni sono eseguite in parallelo.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Il tuo server è in esecuzione su Microsoft Windows. Consigliamo vivamente Linux per un'esperienza utente ottimale.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Il blocco del file transazionale è disabilitato, ciò potrebbe comportare problemi di race condition. Abilita 'filelocking.enabled' nel config-php per evitare questi problemi. Vedi la <a target=\"_blank\" href=\"%s\">documentazione ↗</a> per ulteriori informazioni.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Leggi attentamente le <a target=\"_blank\" href=\"%s\">guide d'installazione ↗</a>, e controlla gli errori o gli avvisi nel <a href=\"#log-section\">log</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "La sola cifratura non garantisce la sicurezza del sistema. Leggi la documentazione di Nextcloud per ulteriori informazioni sul funzionamento dell'applicazione di cifratura e sui casi d'uso supportati.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Per migrare a un altro database, usa lo strumento da riga di comando: 'occ db:convert-type', o leggi la <a target=\"_blank\" href=\"%s\">documentazione ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Questa applicazione non contiene l'informazione della versione minima di Nextcloud richiesta. In Nextcloud 11 e successive, ciò sarà considerato un errore.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Questa applicazione non contiene l'informazione della versione massima di Nextcloud richiesta. In Nextcloud 11 e successive, ciò sarà considerato un errore.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Se desideri supportare il progetto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">contribuisci allo sviluppo</a>\n\t\to\n\t\t<a href=\"https://help.nextcloud.com/\"\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">aiuta gli altri utenti</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Sviluppato dalla {communityopen}comunità di Nextcloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Ultimo accesso"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index 3c3dfb7b7bf..3eac52bbfd5 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -39,9 +39,6 @@ OC.L10N.register(
"Email saved" : "メールアドレスを保存しました",
"Password confirmation is required" : "パスワードの確認が必要です",
"Couldn't remove app." : "アプリが削除できませんでした。",
- "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
- "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
- "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Couldn't update app." : "アプリをアップデートできませんでした。",
"Are you really sure you want add {domain} as trusted domain?" : "{domain} を信頼できるドメインとして追加してもよろしいですか?",
"Add trusted domain" : "信頼するドメイン名に追加",
@@ -58,7 +55,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "公式アプリは ownCloud コミュニティにより開発されています。公式アプリは ownCloud の中心的な機能を提供し、製品として可能です。",
"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." : "承認されたアプリは信頼された開発者により開発され、大まかなセキュリティチェックに合格しています。アプリは積極的にオープンソースコードレポジトリでメンテナンスされ、メンテナは通常の用途では安定していると考えます。",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "このアプリはセキュリティチェックされていません、新規アプリか安定性が確認されていないアプリです。自己責任でインストールしてください。",
- "Please wait...." : "しばらくお待ちください...",
+ "Enabling app …" : "アプリを有効 ...",
"Error while disabling app" : "アプリ無効化中にエラーが発生",
"Disable" : "無効にする",
"Enable" : "有効にする",
@@ -125,6 +122,8 @@ OC.L10N.register(
"undo" : "元に戻す",
"never" : "なし",
"deleted {userName}" : "{userName} を削除しました",
+ "Unable to add user to group {group}" : "ユーザーを {group} グループに追加できません",
+ "Unable to remove user from group {group}" : "ユーザーを {group} グループから削除できません",
"Add group" : "グループを追加する",
"Invalid quota value \"{val}\"" : "クオータ値 \"{val}\" は不正な値です。",
"no group" : "グループなし",
@@ -247,14 +246,16 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud バージョンの上限が指定されていません.将来、エラーが発生する可能性があります.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "次の依存関係が満たされないためこのアプリをインストールできません:",
"Enable only for specific groups" : "特定のグループのみ有効に",
- "Uninstall App" : "アプリをアンインストール",
+ "Uninstall app" : "アプリをアンインストール",
"SSL Root Certificates" : "SSLルート証明書",
"Common Name" : "コモンネーム",
"Valid until" : "有効期限",
"Issued By" : "発行元",
"Valid until %s" : "%s まで有効",
"Import root certificate" : "ルート証明書をインポート",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用できるようになりました。<br><br>ユーザー名: %s<br>接続URL: <a href=\"%s\">%s</a><br><br>",
"Cheers!" : "それでは!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用できるようになりました。\n\nユーザー名: %s\n接続URL: %s\n\n",
"Administrator documentation" : "管理者ドキュメント",
"Online documentation" : "オンラインドキュメント",
"Forum" : "フォーラム",
@@ -339,7 +340,11 @@ OC.L10N.register(
"Default" : "デフォルト",
"log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
"Language changed" : "言語が変更されました",
+ "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
+ "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
+ "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
+ "Please wait...." : "しばらくお待ちください...",
"iPhone" : "iPhone",
"add group" : "グループを追加する",
"Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)",
@@ -359,6 +364,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特にデスクトップクライアントをファイル同期に使用する場合,SQLiteは非推奨です.",
"Experimental applications ahead" : "実験的なアプリケーションを試す",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "実験的なアプリは、脆弱性についてチェックされていませんし、不安定であったり、激しく開発中です。それらをインストールすると、データの損失やセキュリティ侵害を引き起こす可能性があります。",
+ "Uninstall App" : "アプリをアンインストール",
"Enable experimental apps" : "実験的なアプリを有効にする",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用可能になったことをお知らせします。<br><br>ユーザー名: %s<br>以下のURLからアクセス: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用可能になったことをお知らせします。\n\nユーザー名: %s\n接続URL: %s\n\n",
@@ -370,24 +376,6 @@ OC.L10N.register(
"Group Admin for" : "グループの管理者",
"Storage Location" : "ストレージの場所",
"User Backend" : "ユーザーバックエンド",
- "Last Login" : "最終ログイン",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "外部ストレージ",
- "Updates" : "アップデート",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "公式アプリはNextcloudコミュニティによって開発されています。コミュニティでは、Nextcloudの中心的な機能を提供し、プロダクションでの使用に備えています。",
- "No apps found for \"{query}\"" : "{query} のアプリは見つかりませんでした",
- "An error occurred: {message}" : "エラーが発生しました: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "php-fpmを使用している場合は特に、お使いのサーバのPHP設定とPHP設定の注意点については、<a target=\"_blank\" href=\"%s\">インストールマニュアル↗</a>を確認してください。",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "あなたのデータベースは \"READ COMMITED\" トランザクション分離レベルで動作していません。このことにより複数のアクションが平行して実行される場合に問題が起こる可能性があります。",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "サーバーはMicrosoft Windows上で動作しています。最適なユーザーエクスペリエンスのためにLinuxを強くお勧めします。",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "ファイルの書き込み時のロックが無効になっていると、競合時に問題が発生する可能性があります。 config.phpで 'filelocking.enabled'を有効にして、これらの問題を回避してください。詳細については、<a target=\"_blank\" href=\"%s\">ドキュメント</a>を参照してください。",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a target=\"_blank\" href=\"%s\">インストールガイド</a>を再確認し、<a href=\"#log-section\">ログ</ a>のエラーや警告を確認してください>。",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "暗号化だけではシステムのセキュリティを保証するものではありません。暗号化アプリケーションの仕組みとサポートされているユースケースについては、Nextcloudのドキュメントを参照してください。",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "他のデータベースに移行する場合はコマンドラインツール: 'occ db:convert-type' を使うか、<a target=\"_blank\" href=\"%s\">ドキュメント ↗</a>を参照してください。",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "このアプリは、最小NextCloudのバージョンが割り当てられていません。これは、Nextcloud 11以降ではエラーになります。",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "このアプリは、割り当てられた最大NextCloudバージョンがありません。これは、Nextcloud 11以降ではエラーになります。",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "このプロジェクトを応援するには、\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">開発に参加</a>\n\t\tまたは、\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">他の人を助ける</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "{communityopen}Nextcloud community{linkclose} による開発されています。{githubopen}source code{linkclose} は、 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} ライセンスで提供されています。"
+ "Last Login" : "最終ログイン"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index 5aac59fb173..2aad81aeaf6 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -37,9 +37,6 @@
"Email saved" : "メールアドレスを保存しました",
"Password confirmation is required" : "パスワードの確認が必要です",
"Couldn't remove app." : "アプリが削除できませんでした。",
- "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
- "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
- "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Couldn't update app." : "アプリをアップデートできませんでした。",
"Are you really sure you want add {domain} as trusted domain?" : "{domain} を信頼できるドメインとして追加してもよろしいですか?",
"Add trusted domain" : "信頼するドメイン名に追加",
@@ -56,7 +53,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "公式アプリは ownCloud コミュニティにより開発されています。公式アプリは ownCloud の中心的な機能を提供し、製品として可能です。",
"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." : "承認されたアプリは信頼された開発者により開発され、大まかなセキュリティチェックに合格しています。アプリは積極的にオープンソースコードレポジトリでメンテナンスされ、メンテナは通常の用途では安定していると考えます。",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "このアプリはセキュリティチェックされていません、新規アプリか安定性が確認されていないアプリです。自己責任でインストールしてください。",
- "Please wait...." : "しばらくお待ちください...",
+ "Enabling app …" : "アプリを有効 ...",
"Error while disabling app" : "アプリ無効化中にエラーが発生",
"Disable" : "無効にする",
"Enable" : "有効にする",
@@ -123,6 +120,8 @@
"undo" : "元に戻す",
"never" : "なし",
"deleted {userName}" : "{userName} を削除しました",
+ "Unable to add user to group {group}" : "ユーザーを {group} グループに追加できません",
+ "Unable to remove user from group {group}" : "ユーザーを {group} グループから削除できません",
"Add group" : "グループを追加する",
"Invalid quota value \"{val}\"" : "クオータ値 \"{val}\" は不正な値です。",
"no group" : "グループなし",
@@ -245,14 +244,16 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud バージョンの上限が指定されていません.将来、エラーが発生する可能性があります.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "次の依存関係が満たされないためこのアプリをインストールできません:",
"Enable only for specific groups" : "特定のグループのみ有効に",
- "Uninstall App" : "アプリをアンインストール",
+ "Uninstall app" : "アプリをアンインストール",
"SSL Root Certificates" : "SSLルート証明書",
"Common Name" : "コモンネーム",
"Valid until" : "有効期限",
"Issued By" : "発行元",
"Valid until %s" : "%s まで有効",
"Import root certificate" : "ルート証明書をインポート",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用できるようになりました。<br><br>ユーザー名: %s<br>接続URL: <a href=\"%s\">%s</a><br><br>",
"Cheers!" : "それでは!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用できるようになりました。\n\nユーザー名: %s\n接続URL: %s\n\n",
"Administrator documentation" : "管理者ドキュメント",
"Online documentation" : "オンラインドキュメント",
"Forum" : "フォーラム",
@@ -337,7 +338,11 @@
"Default" : "デフォルト",
"log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
"Language changed" : "言語が変更されました",
+ "Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
+ "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません",
+ "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
+ "Please wait...." : "しばらくお待ちください...",
"iPhone" : "iPhone",
"add group" : "グループを追加する",
"Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)",
@@ -357,6 +362,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特にデスクトップクライアントをファイル同期に使用する場合,SQLiteは非推奨です.",
"Experimental applications ahead" : "実験的なアプリケーションを試す",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "実験的なアプリは、脆弱性についてチェックされていませんし、不安定であったり、激しく開発中です。それらをインストールすると、データの損失やセキュリティ侵害を引き起こす可能性があります。",
+ "Uninstall App" : "アプリをアンインストール",
"Enable experimental apps" : "実験的なアプリを有効にする",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用可能になったことをお知らせします。<br><br>ユーザー名: %s<br>以下のURLからアクセス: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用可能になったことをお知らせします。\n\nユーザー名: %s\n接続URL: %s\n\n",
@@ -368,24 +374,6 @@
"Group Admin for" : "グループの管理者",
"Storage Location" : "ストレージの場所",
"User Backend" : "ユーザーバックエンド",
- "Last Login" : "最終ログイン",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "外部ストレージ",
- "Updates" : "アップデート",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "公式アプリはNextcloudコミュニティによって開発されています。コミュニティでは、Nextcloudの中心的な機能を提供し、プロダクションでの使用に備えています。",
- "No apps found for \"{query}\"" : "{query} のアプリは見つかりませんでした",
- "An error occurred: {message}" : "エラーが発生しました: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "php-fpmを使用している場合は特に、お使いのサーバのPHP設定とPHP設定の注意点については、<a target=\"_blank\" href=\"%s\">インストールマニュアル↗</a>を確認してください。",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "あなたのデータベースは \"READ COMMITED\" トランザクション分離レベルで動作していません。このことにより複数のアクションが平行して実行される場合に問題が起こる可能性があります。",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "サーバーはMicrosoft Windows上で動作しています。最適なユーザーエクスペリエンスのためにLinuxを強くお勧めします。",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "ファイルの書き込み時のロックが無効になっていると、競合時に問題が発生する可能性があります。 config.phpで 'filelocking.enabled'を有効にして、これらの問題を回避してください。詳細については、<a target=\"_blank\" href=\"%s\">ドキュメント</a>を参照してください。",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a target=\"_blank\" href=\"%s\">インストールガイド</a>を再確認し、<a href=\"#log-section\">ログ</ a>のエラーや警告を確認してください>。",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "暗号化だけではシステムのセキュリティを保証するものではありません。暗号化アプリケーションの仕組みとサポートされているユースケースについては、Nextcloudのドキュメントを参照してください。",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "他のデータベースに移行する場合はコマンドラインツール: 'occ db:convert-type' を使うか、<a target=\"_blank\" href=\"%s\">ドキュメント ↗</a>を参照してください。",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "このアプリは、最小NextCloudのバージョンが割り当てられていません。これは、Nextcloud 11以降ではエラーになります。",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "このアプリは、割り当てられた最大NextCloudバージョンがありません。これは、Nextcloud 11以降ではエラーになります。",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "このプロジェクトを応援するには、\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">開発に参加</a>\n\t\tまたは、\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">他の人を助ける</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "{communityopen}Nextcloud community{linkclose} による開発されています。{githubopen}source code{linkclose} は、 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} ライセンスで提供されています。"
+ "Last Login" : "最終ログイン"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js
index f1add7c6928..131f1beb0f3 100644
--- a/settings/l10n/ka_GE.js
+++ b/settings/l10n/ka_GE.js
@@ -5,12 +5,8 @@ OC.L10N.register(
"Email sent" : "იმეილი გაიგზავნა",
"Invalid request" : "არასწორი მოთხოვნა",
"Email saved" : "იმეილი შენახულია",
- "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
- "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
- "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Couldn't update app." : "ვერ მოხერხდა აპლიკაციის განახლება.",
"All" : "ყველა",
- "Please wait...." : "დაიცადეთ....",
"Disable" : "გამორთვა",
"Enable" : "ჩართვა",
"Updating...." : "მიმდინარეობს განახლება....",
@@ -57,9 +53,12 @@ OC.L10N.register(
"set new password" : "დააყენეთ ახალი პაროლი",
"Default" : "საწყისი პარამეტრები",
"Language changed" : "ენა შეცვლილია",
+ "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
+ "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
+ "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
+ "Please wait...." : "დაიცადეთ....",
"Log" : "ლოგი",
"More" : "უფრო მეტი",
- "Less" : "უფრო ნაკლები",
- "External Storage" : "ექსტერნალ საცავი"
+ "Less" : "უფრო ნაკლები"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json
index 219160111e0..d2953e86a98 100644
--- a/settings/l10n/ka_GE.json
+++ b/settings/l10n/ka_GE.json
@@ -3,12 +3,8 @@
"Email sent" : "იმეილი გაიგზავნა",
"Invalid request" : "არასწორი მოთხოვნა",
"Email saved" : "იმეილი შენახულია",
- "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
- "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
- "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Couldn't update app." : "ვერ მოხერხდა აპლიკაციის განახლება.",
"All" : "ყველა",
- "Please wait...." : "დაიცადეთ....",
"Disable" : "გამორთვა",
"Enable" : "ჩართვა",
"Updating...." : "მიმდინარეობს განახლება....",
@@ -55,9 +51,12 @@
"set new password" : "დააყენეთ ახალი პაროლი",
"Default" : "საწყისი პარამეტრები",
"Language changed" : "ენა შეცვლილია",
+ "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან",
+ "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
+ "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
+ "Please wait...." : "დაიცადეთ....",
"Log" : "ლოგი",
"More" : "უფრო მეტი",
- "Less" : "უფრო ნაკლები",
- "External Storage" : "ექსტერნალ საცავი"
+ "Less" : "უფრო ნაკლები"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/km.js b/settings/l10n/km.js
index 45b9fbe0945..5c604f03c49 100644
--- a/settings/l10n/km.js
+++ b/settings/l10n/km.js
@@ -10,13 +10,9 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
"Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ",
"Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
- "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
- "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s",
- "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
"Couldn't update app." : "មិន​អាច​ធ្វើ​បច្ចុប្បន្នភាព​កម្មវិធី។",
"Sending..." : "កំពុង​ផ្ញើ...",
"All" : "ទាំងអស់",
- "Please wait...." : "សូម​រង់​ចាំ....",
"Error while disabling app" : "មាន​កំហុស​ពេល​កំពុង​បិទកម្មវិធី",
"Disable" : "បិទ",
"Enable" : "បើក",
@@ -74,9 +70,12 @@ OC.L10N.register(
"set new password" : "កំណត់​ពាក្យ​សម្ងាត់​ថ្មី",
"Default" : "លំនាំ​ដើម",
"Language changed" : "បាន​ប្ដូរ​ភាសា",
+ "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
+ "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s",
+ "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
+ "Please wait...." : "សូម​រង់​ចាំ....",
"Log" : "Log",
"More" : "ច្រើន​ទៀត",
- "Less" : "តិច",
- "External Storage" : "ឃ្លាំងផ្ទុក​ខាងក្រៅ"
+ "Less" : "តិច"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/km.json b/settings/l10n/km.json
index ae778387a74..00f212fc436 100644
--- a/settings/l10n/km.json
+++ b/settings/l10n/km.json
@@ -8,13 +8,9 @@
"You need to set your user email before being able to send test emails." : "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
"Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ",
"Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
- "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
- "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s",
- "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
"Couldn't update app." : "មិន​អាច​ធ្វើ​បច្ចុប្បន្នភាព​កម្មវិធី។",
"Sending..." : "កំពុង​ផ្ញើ...",
"All" : "ទាំងអស់",
- "Please wait...." : "សូម​រង់​ចាំ....",
"Error while disabling app" : "មាន​កំហុស​ពេល​កំពុង​បិទកម្មវិធី",
"Disable" : "បិទ",
"Enable" : "បើក",
@@ -72,9 +68,12 @@
"set new password" : "កំណត់​ពាក្យ​សម្ងាត់​ថ្មី",
"Default" : "លំនាំ​ដើម",
"Language changed" : "បាន​ប្ដូរ​ភាសា",
+ "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ",
+ "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s",
+ "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
+ "Please wait...." : "សូម​រង់​ចាំ....",
"Log" : "Log",
"More" : "ច្រើន​ទៀត",
- "Less" : "តិច",
- "External Storage" : "ឃ្លាំងផ្ទុក​ខាងក្រៅ"
+ "Less" : "តិច"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/kn.js b/settings/l10n/kn.js
index 987c79e5674..441cc3e1ee6 100644
--- a/settings/l10n/kn.js
+++ b/settings/l10n/kn.js
@@ -26,13 +26,9 @@ OC.L10N.register(
"Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
"Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ",
"Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
- "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ",
- "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
- "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Couldn't update app." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.",
"Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
"All" : "ಎಲ್ಲಾ",
- "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
"Error while disabling app" : "ಕಾರ್ಯಕ್ರಮವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
"Disable" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ",
"Enable" : "ಸಕ್ರಿಯಗೊಳಿಸು",
@@ -84,7 +80,6 @@ OC.L10N.register(
"Enforce expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಬಲವ೦ತವಾಗಿ ಜಾರಿಗೆ ಮಾಡಿ",
"Documentation:" : "ದಾಖಲೆ:",
"Enable only for specific groups" : "ಕೇವಲ ನಿರ್ದಿಷ್ಟ ಗುಂಪುಗಳಿಗೆ ಸಕ್ರಿಯಗೊಳಿಸಿ",
- "Uninstall App" : "ಅಳಿಸಿ",
"Cheers!" : "ಆನಂದಿಸಿ !",
"Forum" : "ವೇದಿಕೆ",
"Cancel" : "ರದ್ದು",
@@ -109,6 +104,10 @@ OC.L10N.register(
"change email address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಿ",
"Default" : "ಆರಂಭದ ಪ್ರತಿ",
"Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
+ "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
+ "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
"Everything (fatal issues, errors, warnings, info, debug)" : "ಎಲ್ಲ ರೀತಿಗಳು (ವಿನಾಶಕ ಸಮಸ್ಯೆಗಳು, ದೋಷಗಳು, ಎಚ್ಚರಿಕೆಗಳನ್ನು, ಮಾಹಿತಿ, ಇತರೆ )",
"Info, warnings, errors and fatal issues" : "ಮಾಹಿತಿ, ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು",
"Warnings, errors and fatal issues" : "ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು",
@@ -117,6 +116,7 @@ OC.L10N.register(
"Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ",
"More" : "ಇನ್ನಷ್ಟು",
"Less" : "ಕಡಿಮೆ",
+ "Uninstall App" : "ಅಳಿಸಿ",
"Group" : "ಗುಂಪು"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/kn.json b/settings/l10n/kn.json
index 76adf1ff840..76d068bfb5a 100644
--- a/settings/l10n/kn.json
+++ b/settings/l10n/kn.json
@@ -24,13 +24,9 @@
"Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
"Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ",
"Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
- "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ",
- "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
- "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
"Couldn't update app." : " ಕಾಯಕ್ರಮವನ್ನು ನವೀಕರಿಸಲ ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.",
"Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...",
"All" : "ಎಲ್ಲಾ",
- "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
"Error while disabling app" : "ಕಾರ್ಯಕ್ರಮವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ",
"Disable" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ",
"Enable" : "ಸಕ್ರಿಯಗೊಳಿಸು",
@@ -82,7 +78,6 @@
"Enforce expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಬಲವ೦ತವಾಗಿ ಜಾರಿಗೆ ಮಾಡಿ",
"Documentation:" : "ದಾಖಲೆ:",
"Enable only for specific groups" : "ಕೇವಲ ನಿರ್ದಿಷ್ಟ ಗುಂಪುಗಳಿಗೆ ಸಕ್ರಿಯಗೊಳಿಸಿ",
- "Uninstall App" : "ಅಳಿಸಿ",
"Cheers!" : "ಆನಂದಿಸಿ !",
"Forum" : "ವೇದಿಕೆ",
"Cancel" : "ರದ್ದು",
@@ -107,6 +102,10 @@
"change email address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಿ",
"Default" : "ಆರಂಭದ ಪ್ರತಿ",
"Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
+ "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ",
+ "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ",
+ "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....",
"Everything (fatal issues, errors, warnings, info, debug)" : "ಎಲ್ಲ ರೀತಿಗಳು (ವಿನಾಶಕ ಸಮಸ್ಯೆಗಳು, ದೋಷಗಳು, ಎಚ್ಚರಿಕೆಗಳನ್ನು, ಮಾಹಿತಿ, ಇತರೆ )",
"Info, warnings, errors and fatal issues" : "ಮಾಹಿತಿ, ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು",
"Warnings, errors and fatal issues" : "ಎಚ್ಚರಿಕೆ, ದೋಷಗಳು ಮತ್ತು ಮಾರಕ ಸಮಸ್ಯೆಗಳು",
@@ -115,6 +114,7 @@
"Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ",
"More" : "ಇನ್ನಷ್ಟು",
"Less" : "ಕಡಿಮೆ",
+ "Uninstall App" : "ಅಳಿಸಿ",
"Group" : "ಗುಂಪು"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index 2eb47bab7a8..adaff000a69 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -29,17 +29,18 @@ OC.L10N.register(
"Unable to create user." : "사용자를 만들 수 없습니다.",
"Your %s account was created" : "%s 계정을 등록했습니다",
"Unable to delete user." : "사용자를 삭제할 수 없습니다.",
+ "Settings saved" : "설정 저장됨",
"Unable to change full name" : "전체 이름을 변경할 수 없음",
+ "Unable to change email address" : "이메일 주소를 변경할 수 없음",
"Your full name has been changed." : "전체 이름이 변경되었습니다.",
"Forbidden" : "거부됨",
"Invalid user" : "잘못된 사용자",
"Unable to change mail address" : "이메일 주소를 변경할 수 없음",
"Email saved" : "이메일 저장됨",
+ "Password confirmation is required" : "암호 확인이 필요합니다",
"Couldn't remove app." : "앱을 삭제할 수 없습니다.",
- "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
- "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
- "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음",
"Couldn't update app." : "앱을 업데이트할 수 없습니다.",
+ "Are you really sure you want add {domain} as trusted domain?" : "신뢰할 수 있는 도메인 목록에 {domain}을(를) 추가하시겠습니까?",
"Add trusted domain" : "신뢰할 수 있는 도메인 추가",
"Migration in progress. Please wait until the migration is finished" : "이전 작업 중입니다. 작업이 완료될 때까지 기다려 주십시오",
"Migration started …" : "이전 시작됨...",
@@ -51,9 +52,9 @@ OC.L10N.register(
"_You have %n app update pending_::_You have %n app updates pending_" : ["앱 %n개 업데이트 대기 중"],
"No apps found for your version" : "설치된 버전에 대한 앱 없음",
"The app will be downloaded from the app store" : "이 앱은 앱 스토어에서 다운로드 할 것",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "커뮤니티가 개발한 공식 앱입니다. 이 앱은 Nextcloud의 핵심 기능이며 프로덕션 환경에서 사용할 수 있습니다.",
"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." : "승인된 앱은 신뢰할 수 있는 개발자가 개발하며 보안 검사를 통과했습니다. 열린 코드 저장소에서 관리되며 일반적인 환경에서 사용할 수 있는 수준으로 관리됩니다.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "이 앱의 보안 문제가 점검되지 않았고, 출시된 지 얼마 지나지 않았거나 아직 불안정합니다. 본인 책임 하에 설치하십시오.",
- "Please wait...." : "기다려 주십시오....",
"Error while disabling app" : "앱을 비활성화하는 중 오류 발생",
"Disable" : "사용 안함",
"Enable" : "사용함",
@@ -71,24 +72,40 @@ OC.L10N.register(
"App update" : "앱 업데이트",
"Approved" : "승인됨",
"Experimental" : "실험적",
+ "No apps found for {query}" : "{query}에 대한 앱을 찾을 수 없습니다",
+ "Allow filesystem access" : "파일시스템 접근 허용",
"Disconnect" : "연결 해제",
+ "Revoke" : "취소",
"Internet Explorer" : "인터넷 익스플로러",
"Edge" : "엣지",
"Firefox" : "파이어 폭스",
"Google Chrome" : "구글 크롬",
"Safari" : "사파리",
"Google Chrome for Android" : "안드로이드 용 구글 크롬",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "아이폰 OS 클라이언트",
"Android Client" : "안드로이드 클라이언트",
"Sync client - {os}" : "동기화 클라이언트 - {os}",
"This session" : "이 세션",
+ "Copy" : "복사",
"Copied!" : "복사됨!",
"Not supported!" : "지원하지 않음!",
"Press ⌘-C to copy." : "⌘-C 복사",
"Press Ctrl-C to copy." : "Ctrl-C 복사",
+ "Error while loading browser sessions and device tokens" : "웹 브라우저 세션과 장치 토큰을 불러오는 중 오류가 발생했습니다",
+ "Error while creating device token" : "장치 토큰을 만드는 중 오류가 발생했습니다",
+ "Error while deleting the token" : "토큰을 삭제하는 중 오류가 발생했습니다",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "오류가 발생했습니다. ASCII로 인코딩된 PEM 인증서를 업로드하십시오.",
"Valid until {date}" : "{date}까지 유효함",
"Delete" : "삭제",
+ "Local" : "로컬",
+ "Private" : "개인",
+ "Only visible to local users" : "로컬 사용자만 보임",
+ "Only visible to you" : "나만 보임",
+ "Contacts" : "연락처",
+ "Visible to local users and to trusted servers" : "로컬 사용자와 신뢰된 서버에게 보이기",
+ "Public" : "공개",
"Select a profile picture" : "프로필 사진 선택",
"Very weak password" : "매우 약한 암호",
"Weak password" : "약한 암호",
@@ -108,6 +125,7 @@ OC.L10N.register(
"no group" : "그룹 없음",
"Password successfully changed" : "암호가 성공적으로 변경되었습니다",
"Changing the password will result in data loss, because data recovery is not available for this user" : "이 사용자에 대해 데이터 복구를 사용할 수 없기 때문에, 암호를 변경하면 데이터를 잃게 됩니다.",
+ "Could not change the users email" : "사용자 이메일을 변경할 수 없습니다",
"A valid username must be provided" : "올바른 사용자 이름을 입력해야 함",
"Error creating user: {message}" : "사용자 생성 오류: {message}",
"A valid password must be provided" : "올바른 암호를 입력해야 함",
@@ -122,6 +140,8 @@ OC.L10N.register(
"Login" : "로그인",
"Plain" : "일반",
"NT LAN Manager" : "NT LAN 관리자",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "이메일 서버",
"Open documentation" : "문서 열기",
"This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.",
@@ -143,6 +163,7 @@ OC.L10N.register(
"Enable server-side encryption" : "서버 측 암호화 사용",
"Please read carefully before activating server-side encryption: " : "서버 측 암호화를 활성화하기 전에 읽어 보십시오:",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "암호화를 사용하면, 사용하기 시작한 시간 이후에 서버에 업로드된 모든 파일이 암호화됩니다. 나중에 암호화를 사용하지 않으려면 사용하고 있는 암호화 모듈에서 비활성화를 지원해야 하고 모든 사전 조건(예: 복구 키 설정)을 만족해야 합니다.",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "암호화만으로 시스템의 보안을 보장할 수 없습니다. 암호화 응용 프로그램 작동 방식 및 지원되는 사용 사례에 대한 자세한 내용은 설명서를 참조하십시오.",
"Be aware that encryption always increases the file size." : "암호화된 파일의 크기는 항상 커집니다.",
"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." : "데이터를 주기적으로 백업하는 것을 추천하며, 암호화를 사용하고 있다면 데이터와 더불어 암호화 키도 백업하십시오.",
"This is the final warning: Do you really want to enable encryption?" : "마지막 경고입니다. 암호화를 활성화하시겠습니까?",
@@ -154,16 +175,20 @@ OC.L10N.register(
"Start migration" : "이전 시작",
"Security & setup warnings" : "보안 및 설치 경고",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php가 시스템 환경 변수를 올바르게 조회할 수 있도록 설정되지 않았습니다. getenv(\"PATH\")의 값이 비어 있습니다.",
+ "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." : "서버 PHP 설정(특히 php-fpm 사용시)에 관한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">설치 가이드 ↗</a>를 참고하십시오.",
"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." : "읽기 전용 설정이 활성화되었습니다. 이 상태에서는 웹 인터페이스를 통하여 일부 설정을 변경할 수 없습니다. 또한 매 업데이트마다 파일을 쓸 수 있는 상태로 변경해야 합니다.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP에서 인라인 doc 블록을 삭제하도록 설정되어 있습니다. 일부 코어 앱에 접근할 수 없을 수도 있습니다.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Zend OPcache, eAccelerator 같은 캐시/가속기 문제일 수도 있습니다.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "데이터베이스가 \"READ COMMITTED\" 트랜잭션 격리 수준에서 실행되고 있지 않습니다. 여러 작업이 동시에 실행될 때 문제가 발생할 수 있습니다.",
+ "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s 버전보다 낮은 %2$s 버전이 설치되어있습니다. 안정성과 성능을 위해 %1$s 버전으로 업데이트하시기를 권장합니다.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 모듈 'fileinfo'가 존재하지 않습니다. MIME 형식 감지 결과를 향상시키기 위하여 이 모듈을 활성화하는 것을 추천합니다.",
+ "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." : "트랜잭션 파일 잠금이 비활성화되어있어 동시 접근시 문제가 발생할 수 있습니다. config.php에서 'filelocking.enabled'를 활성화하여 이 문제를 해결할 수 있습니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">사용 설명서 ↗</a>를 참고하십시오.",
"System locale can not be set to a one which supports UTF-8." : "UTF-8을 지원하는 시스템 로케일을 사용할 수 없습니다.",
"This means that there might be problems with certain characters in file names." : "파일 이름의 일부 문자에 문제가 생길 수도 있습니다.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "다음 중 하나 이상의 로케일을 지원하기 위하여 필요한 패키지를 시스템에 설치하는 것을 추천합니다: %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\")" : "도메인의 루트 디렉터리 아래에 설치되어 있지 않고 시스템 cron을 사용한다면 URL 생성에 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 설치본의 웹 루트 경로에 있는 config.php 파일의 \"overwrite.cli.url\" 옵션을 변경하십시오(제안: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI로 cronjob을 실행할 수 없었습니다. 다음 기술적 오류가 발생했습니다:",
- "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>." : "<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">설치 가이드</a>를 ↗ 확인하고 <a href=\"%s\">로그</a>에 오류 또는 경고를 확인하시기 바랍니다.",
+ "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>." : "<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">설치 가이드 ↗</a>를 확인하고 <a href=\"%s\">로그</a>에 오류 또는 경고를 확인하시기 바랍니다.",
"All checks passed." : "모든 검사를 통과했습니다.",
"Cron" : "Cron",
"Last cron job execution: %s." : "마지막 cron 작업 실행: %s.",
@@ -172,6 +197,8 @@ OC.L10N.register(
"Execute one task with each page loaded" : "개별 페이지를 불러올 때마다 실행",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php는 webcron 서비스에 등록되어 HTTP로 15분마다 cron.php에 접근합니다.",
"Use system's cron service to call the cron.php file every 15 minutes." : "시스템의 cron 서비스를 통하여 15분마다 cron.php 파일을 실행합니다.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "cron.php는 시스템 사용자 \"%s\"가 실행해야합니다.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "실행하려면 PHP POSIX 확장이 필요합니다. 자세한 내용은 {linkstart}PHP 사용 설명서{linkend}를 참고하십시오.",
"Version" : "버전",
"Sharing" : "공유",
"Allow apps to use the Share API" : "앱에서 공유 API를 사용할 수 있도록 허용",
@@ -191,6 +218,9 @@ OC.L10N.register(
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "공개 링크 업로드 페이지에 고지 사항 텍스트를 표시합니다. (파일리스트가 숨겨져있는 경우에만 표시)",
"This text will be shown on the public link upload page when the file list is hidden." : "파일 목록이 숨겨져 있으면 이 텍스트는 공개 링크 업로드 페이지에 표시됩니다.",
"Tips & tricks" : "팁과 추가 정보",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "현재 백엔드 데이터베이스로 SQLite를 사용하고 있습니다. 대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드로 전환할 것을 권장합니다.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정인 경우 권장됩니다.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "다른 데이터베이스로 마이그레이션하려면 'occ db:convert-type' 명령행 도구를 사용하거나 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">사용 설명서 ↗</a>를 참고하시기 바랍니다.",
"How to do backups" : "백업 방법",
"Advanced monitoring" : "고급 모니터링",
"Performance tuning" : "성능 튜닝",
@@ -207,19 +237,23 @@ OC.L10N.register(
"Show description …" : "설명 보기...",
"Hide description …" : "설명 숨기기...",
"This app has an update available." : "이 앱을 업데이트할 수 있습니다.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "이 앱은 Nextcloud 최소 버전을 지정하지 않았습니다. Nextcloud 11 이후에는 오류로 처리됩니다.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "이 앱은 Nextcloud 최대 버전을 지정하지 않았습니다. Nextcloud 11 이후에는 오류로 처리됩니다.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "다음 의존성을 만족할 수 없기 때문에 이 앱을 설치할 수 없습니다:",
"Enable only for specific groups" : "특정 그룹에만 허용",
- "Uninstall App" : "앱 제거",
"SSL Root Certificates" : "SSL 루트 인증서",
"Common Name" : "공통 이름",
"Valid until" : "만료 기간:",
"Issued By" : "발급자:",
"Valid until %s" : "%s까지 유효함",
"Import root certificate" : "루트 인증서 가져오기",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "안녕하세요.<br><br>%s 계정을 사용할 수 있음을 알려 드립니다.<br><br>사용자 이름: <strong>%s</strong><br>접근 링크: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "감사합니다!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "안녕하세요.\n\n%s 계정을 사용할 수 있음을 알려 드립니다.\n\n사용자 이름: %s\n접근 링크: %s\n\n",
"Administrator documentation" : "관리자 문서",
"Online documentation" : "온라인 문서",
"Forum" : "포럼",
+ "Getting help" : "도움 얻기",
"Commercial support" : "상용 지원",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "현재 <strong>%s</strong> / <strong>%s</strong>을(를) 사용중입니다.",
"Profile picture" : "프로필 사진",
@@ -236,6 +270,14 @@ OC.L10N.register(
"Your email address" : "이메일 주소",
"No email address set" : "이메일 주소가 설정되지 않음",
"For password recovery and notifications" : "암호 복구와 알림에 사용",
+ "Phone number" : "휴대폰 번호",
+ "Your phone number" : "내 휴대폰 번호",
+ "Address" : "주소",
+ "Your postal address" : "내 우편 번호",
+ "Website" : "웹 사이트",
+ "Your website" : "내 웹 사이트",
+ "Twitter" : "트위터",
+ "Your Twitter handle" : "내 트위터",
"You are member of the following groups:" : "다음 그룹의 구성원입니다:",
"Password" : "암호",
"Current password" : "현재 암호",
@@ -247,9 +289,12 @@ OC.L10N.register(
"Desktop client" : "데스크톱 클라이언트",
"Android app" : "Android 앱",
"iOS app" : "iOS 앱",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "이 프로젝트를 지원하려면 {contributeopen}개발에 참여{linkclose}하거나 {contributeopen}주변에 알려주세요{linkclose}!",
"Show First Run Wizard again" : "첫 실행 마법사 다시 보이기",
+ "Web, desktop and mobile clients currently logged in to your account." : "사용자 계정으로 로그인된 웹, 데스크톱, 모바일 클라이언트 목록입니다.",
"Device" : "장치",
"Last activity" : "최근 활동",
+ "Passcodes that give an app or device permissions to access your account." : "앱 암호는 앱이나 장치가 사용자 계정에 접근할 수 있도록 해줍니다.",
"Name" : "이름",
"App name" : "앱 이름",
"Create new app password" : "새로운 앱 암호 만들기",
@@ -257,6 +302,12 @@ OC.L10N.register(
"For security reasons this password will only be shown once." : "보안상의 이유로 이 암호는 한 번만 표시됩니다.",
"Username" : "사용자 이름",
"Done" : "완료",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen}Nextcloud 커뮤니티{linkclose}에서 개발, {githubopen}소스 코드{linkclose}는 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} 라이선스를 따릅니다.",
+ "Follow us on Google Plus!" : "Google Plus를 팔로우하세요!",
+ "Like our facebook page!" : "Facebook 페이지에서 좋아요를 눌러주세요!",
+ "Subscribe to our twitter channel!" : "Twitter 채널을 구독하세요!",
+ "Subscribe to our news feed!" : "뉴스 피드를 구독하세요!",
+ "Subscribe to our newsletter!" : "뉴스 레터를 구독하세요!",
"Show storage location" : "저장소 위치 보이기",
"Show last log in" : "마지막 로그인 시간 보이기",
"Show user backend" : "사용자 백엔드 보이기",
@@ -266,6 +317,7 @@ OC.L10N.register(
"Create" : "만들기",
"Admin Recovery Password" : "관리자 복구 암호",
"Enter the recovery password in order to recover the users files during password change" : "암호 변경 시 변경된 사용자 파일을 복구하려면 복구 암호를 입력하십시오",
+ "Group name" : "그룹 이름",
"Everyone" : "모두",
"Admins" : "관리자",
"Default quota" : "기본 할당량",
@@ -282,7 +334,11 @@ OC.L10N.register(
"Default" : "기본값",
"log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
"Language changed" : "언어가 변경됨",
+ "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
+ "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
+ "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?",
+ "Please wait...." : "기다려 주십시오....",
"iPhone" : "아이폰",
"add group" : "그룹 추가",
"Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)",
@@ -302,9 +358,11 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정이면, SQLite를 사용하지 않는 것이 좋습니다.",
"Experimental applications ahead" : "실험적인 앱 사용 예정",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "실험적인 앱은 보안 문제 검사를 통과하지 않았으며, 아직 새롭거나, 불안정하거나, 개발 중일 수도 있습니다. 이러한 앱을 설치하면 데이터 손실 및 보안 문제가 발생할 수도 있습니다.",
+ "Uninstall App" : "앱 제거",
"Enable experimental apps" : "실험적인 앱 사용",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "안녕하세요.<br><br>%s 계정을 사용할 수 있음을 알려 드립니다.<br><br>사용자 이름: %s<br>접근 링크: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "안녕하세요.\n\n%s 계정을 사용할 수 있음을 알려 드립니다.\n\n사용자 이름: %s\n접근 링크: %s\n\n",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "이 프로젝트를 지원하려면 <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">개발에 참여</a>하거나 <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">주변에 알려주세요</a>!",
"Add Group" : "그룹 추가",
"Group" : "그룹",
"Default Quota" : "기본 할당량",
@@ -312,11 +370,6 @@ OC.L10N.register(
"Group Admin for" : "다음 그룹의 관리자:",
"Storage Location" : "저장소 위치",
"User Backend" : "사용자 백엔드",
- "Last Login" : "마지막 로그인",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "외부 저장소",
- "Updates" : "업데이트",
- "An error occurred: {message}" : "오류 발생: {message}"
+ "Last Login" : "마지막 로그인"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index dbbb165e86b..08934a74bd5 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -27,17 +27,18 @@
"Unable to create user." : "사용자를 만들 수 없습니다.",
"Your %s account was created" : "%s 계정을 등록했습니다",
"Unable to delete user." : "사용자를 삭제할 수 없습니다.",
+ "Settings saved" : "설정 저장됨",
"Unable to change full name" : "전체 이름을 변경할 수 없음",
+ "Unable to change email address" : "이메일 주소를 변경할 수 없음",
"Your full name has been changed." : "전체 이름이 변경되었습니다.",
"Forbidden" : "거부됨",
"Invalid user" : "잘못된 사용자",
"Unable to change mail address" : "이메일 주소를 변경할 수 없음",
"Email saved" : "이메일 저장됨",
+ "Password confirmation is required" : "암호 확인이 필요합니다",
"Couldn't remove app." : "앱을 삭제할 수 없습니다.",
- "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
- "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
- "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음",
"Couldn't update app." : "앱을 업데이트할 수 없습니다.",
+ "Are you really sure you want add {domain} as trusted domain?" : "신뢰할 수 있는 도메인 목록에 {domain}을(를) 추가하시겠습니까?",
"Add trusted domain" : "신뢰할 수 있는 도메인 추가",
"Migration in progress. Please wait until the migration is finished" : "이전 작업 중입니다. 작업이 완료될 때까지 기다려 주십시오",
"Migration started …" : "이전 시작됨...",
@@ -49,9 +50,9 @@
"_You have %n app update pending_::_You have %n app updates pending_" : ["앱 %n개 업데이트 대기 중"],
"No apps found for your version" : "설치된 버전에 대한 앱 없음",
"The app will be downloaded from the app store" : "이 앱은 앱 스토어에서 다운로드 할 것",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "커뮤니티가 개발한 공식 앱입니다. 이 앱은 Nextcloud의 핵심 기능이며 프로덕션 환경에서 사용할 수 있습니다.",
"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." : "승인된 앱은 신뢰할 수 있는 개발자가 개발하며 보안 검사를 통과했습니다. 열린 코드 저장소에서 관리되며 일반적인 환경에서 사용할 수 있는 수준으로 관리됩니다.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "이 앱의 보안 문제가 점검되지 않았고, 출시된 지 얼마 지나지 않았거나 아직 불안정합니다. 본인 책임 하에 설치하십시오.",
- "Please wait...." : "기다려 주십시오....",
"Error while disabling app" : "앱을 비활성화하는 중 오류 발생",
"Disable" : "사용 안함",
"Enable" : "사용함",
@@ -69,24 +70,40 @@
"App update" : "앱 업데이트",
"Approved" : "승인됨",
"Experimental" : "실험적",
+ "No apps found for {query}" : "{query}에 대한 앱을 찾을 수 없습니다",
+ "Allow filesystem access" : "파일시스템 접근 허용",
"Disconnect" : "연결 해제",
+ "Revoke" : "취소",
"Internet Explorer" : "인터넷 익스플로러",
"Edge" : "엣지",
"Firefox" : "파이어 폭스",
"Google Chrome" : "구글 크롬",
"Safari" : "사파리",
"Google Chrome for Android" : "안드로이드 용 구글 크롬",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "아이폰 OS 클라이언트",
"Android Client" : "안드로이드 클라이언트",
"Sync client - {os}" : "동기화 클라이언트 - {os}",
"This session" : "이 세션",
+ "Copy" : "복사",
"Copied!" : "복사됨!",
"Not supported!" : "지원하지 않음!",
"Press ⌘-C to copy." : "⌘-C 복사",
"Press Ctrl-C to copy." : "Ctrl-C 복사",
+ "Error while loading browser sessions and device tokens" : "웹 브라우저 세션과 장치 토큰을 불러오는 중 오류가 발생했습니다",
+ "Error while creating device token" : "장치 토큰을 만드는 중 오류가 발생했습니다",
+ "Error while deleting the token" : "토큰을 삭제하는 중 오류가 발생했습니다",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "오류가 발생했습니다. ASCII로 인코딩된 PEM 인증서를 업로드하십시오.",
"Valid until {date}" : "{date}까지 유효함",
"Delete" : "삭제",
+ "Local" : "로컬",
+ "Private" : "개인",
+ "Only visible to local users" : "로컬 사용자만 보임",
+ "Only visible to you" : "나만 보임",
+ "Contacts" : "연락처",
+ "Visible to local users and to trusted servers" : "로컬 사용자와 신뢰된 서버에게 보이기",
+ "Public" : "공개",
"Select a profile picture" : "프로필 사진 선택",
"Very weak password" : "매우 약한 암호",
"Weak password" : "약한 암호",
@@ -106,6 +123,7 @@
"no group" : "그룹 없음",
"Password successfully changed" : "암호가 성공적으로 변경되었습니다",
"Changing the password will result in data loss, because data recovery is not available for this user" : "이 사용자에 대해 데이터 복구를 사용할 수 없기 때문에, 암호를 변경하면 데이터를 잃게 됩니다.",
+ "Could not change the users email" : "사용자 이메일을 변경할 수 없습니다",
"A valid username must be provided" : "올바른 사용자 이름을 입력해야 함",
"Error creating user: {message}" : "사용자 생성 오류: {message}",
"A valid password must be provided" : "올바른 암호를 입력해야 함",
@@ -120,6 +138,8 @@
"Login" : "로그인",
"Plain" : "일반",
"NT LAN Manager" : "NT LAN 관리자",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "이메일 서버",
"Open documentation" : "문서 열기",
"This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.",
@@ -141,6 +161,7 @@
"Enable server-side encryption" : "서버 측 암호화 사용",
"Please read carefully before activating server-side encryption: " : "서버 측 암호화를 활성화하기 전에 읽어 보십시오:",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "암호화를 사용하면, 사용하기 시작한 시간 이후에 서버에 업로드된 모든 파일이 암호화됩니다. 나중에 암호화를 사용하지 않으려면 사용하고 있는 암호화 모듈에서 비활성화를 지원해야 하고 모든 사전 조건(예: 복구 키 설정)을 만족해야 합니다.",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "암호화만으로 시스템의 보안을 보장할 수 없습니다. 암호화 응용 프로그램 작동 방식 및 지원되는 사용 사례에 대한 자세한 내용은 설명서를 참조하십시오.",
"Be aware that encryption always increases the file size." : "암호화된 파일의 크기는 항상 커집니다.",
"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." : "데이터를 주기적으로 백업하는 것을 추천하며, 암호화를 사용하고 있다면 데이터와 더불어 암호화 키도 백업하십시오.",
"This is the final warning: Do you really want to enable encryption?" : "마지막 경고입니다. 암호화를 활성화하시겠습니까?",
@@ -152,16 +173,20 @@
"Start migration" : "이전 시작",
"Security & setup warnings" : "보안 및 설치 경고",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php가 시스템 환경 변수를 올바르게 조회할 수 있도록 설정되지 않았습니다. getenv(\"PATH\")의 값이 비어 있습니다.",
+ "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." : "서버 PHP 설정(특히 php-fpm 사용시)에 관한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">설치 가이드 ↗</a>를 참고하십시오.",
"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." : "읽기 전용 설정이 활성화되었습니다. 이 상태에서는 웹 인터페이스를 통하여 일부 설정을 변경할 수 없습니다. 또한 매 업데이트마다 파일을 쓸 수 있는 상태로 변경해야 합니다.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP에서 인라인 doc 블록을 삭제하도록 설정되어 있습니다. 일부 코어 앱에 접근할 수 없을 수도 있습니다.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Zend OPcache, eAccelerator 같은 캐시/가속기 문제일 수도 있습니다.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "데이터베이스가 \"READ COMMITTED\" 트랜잭션 격리 수준에서 실행되고 있지 않습니다. 여러 작업이 동시에 실행될 때 문제가 발생할 수 있습니다.",
+ "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s 버전보다 낮은 %2$s 버전이 설치되어있습니다. 안정성과 성능을 위해 %1$s 버전으로 업데이트하시기를 권장합니다.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 모듈 'fileinfo'가 존재하지 않습니다. MIME 형식 감지 결과를 향상시키기 위하여 이 모듈을 활성화하는 것을 추천합니다.",
+ "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." : "트랜잭션 파일 잠금이 비활성화되어있어 동시 접근시 문제가 발생할 수 있습니다. config.php에서 'filelocking.enabled'를 활성화하여 이 문제를 해결할 수 있습니다. 자세한 내용은 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">사용 설명서 ↗</a>를 참고하십시오.",
"System locale can not be set to a one which supports UTF-8." : "UTF-8을 지원하는 시스템 로케일을 사용할 수 없습니다.",
"This means that there might be problems with certain characters in file names." : "파일 이름의 일부 문자에 문제가 생길 수도 있습니다.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "다음 중 하나 이상의 로케일을 지원하기 위하여 필요한 패키지를 시스템에 설치하는 것을 추천합니다: %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\")" : "도메인의 루트 디렉터리 아래에 설치되어 있지 않고 시스템 cron을 사용한다면 URL 생성에 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 설치본의 웹 루트 경로에 있는 config.php 파일의 \"overwrite.cli.url\" 옵션을 변경하십시오(제안: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI로 cronjob을 실행할 수 없었습니다. 다음 기술적 오류가 발생했습니다:",
- "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>." : "<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">설치 가이드</a>를 ↗ 확인하고 <a href=\"%s\">로그</a>에 오류 또는 경고를 확인하시기 바랍니다.",
+ "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>." : "<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">설치 가이드 ↗</a>를 확인하고 <a href=\"%s\">로그</a>에 오류 또는 경고를 확인하시기 바랍니다.",
"All checks passed." : "모든 검사를 통과했습니다.",
"Cron" : "Cron",
"Last cron job execution: %s." : "마지막 cron 작업 실행: %s.",
@@ -170,6 +195,8 @@
"Execute one task with each page loaded" : "개별 페이지를 불러올 때마다 실행",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php는 webcron 서비스에 등록되어 HTTP로 15분마다 cron.php에 접근합니다.",
"Use system's cron service to call the cron.php file every 15 minutes." : "시스템의 cron 서비스를 통하여 15분마다 cron.php 파일을 실행합니다.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "cron.php는 시스템 사용자 \"%s\"가 실행해야합니다.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "실행하려면 PHP POSIX 확장이 필요합니다. 자세한 내용은 {linkstart}PHP 사용 설명서{linkend}를 참고하십시오.",
"Version" : "버전",
"Sharing" : "공유",
"Allow apps to use the Share API" : "앱에서 공유 API를 사용할 수 있도록 허용",
@@ -189,6 +216,9 @@
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "공개 링크 업로드 페이지에 고지 사항 텍스트를 표시합니다. (파일리스트가 숨겨져있는 경우에만 표시)",
"This text will be shown on the public link upload page when the file list is hidden." : "파일 목록이 숨겨져 있으면 이 텍스트는 공개 링크 업로드 페이지에 표시됩니다.",
"Tips & tricks" : "팁과 추가 정보",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "현재 백엔드 데이터베이스로 SQLite를 사용하고 있습니다. 대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드로 전환할 것을 권장합니다.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정인 경우 권장됩니다.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "다른 데이터베이스로 마이그레이션하려면 'occ db:convert-type' 명령행 도구를 사용하거나 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">사용 설명서 ↗</a>를 참고하시기 바랍니다.",
"How to do backups" : "백업 방법",
"Advanced monitoring" : "고급 모니터링",
"Performance tuning" : "성능 튜닝",
@@ -205,19 +235,23 @@
"Show description …" : "설명 보기...",
"Hide description …" : "설명 숨기기...",
"This app has an update available." : "이 앱을 업데이트할 수 있습니다.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "이 앱은 Nextcloud 최소 버전을 지정하지 않았습니다. Nextcloud 11 이후에는 오류로 처리됩니다.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "이 앱은 Nextcloud 최대 버전을 지정하지 않았습니다. Nextcloud 11 이후에는 오류로 처리됩니다.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "다음 의존성을 만족할 수 없기 때문에 이 앱을 설치할 수 없습니다:",
"Enable only for specific groups" : "특정 그룹에만 허용",
- "Uninstall App" : "앱 제거",
"SSL Root Certificates" : "SSL 루트 인증서",
"Common Name" : "공통 이름",
"Valid until" : "만료 기간:",
"Issued By" : "발급자:",
"Valid until %s" : "%s까지 유효함",
"Import root certificate" : "루트 인증서 가져오기",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "안녕하세요.<br><br>%s 계정을 사용할 수 있음을 알려 드립니다.<br><br>사용자 이름: <strong>%s</strong><br>접근 링크: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "감사합니다!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "안녕하세요.\n\n%s 계정을 사용할 수 있음을 알려 드립니다.\n\n사용자 이름: %s\n접근 링크: %s\n\n",
"Administrator documentation" : "관리자 문서",
"Online documentation" : "온라인 문서",
"Forum" : "포럼",
+ "Getting help" : "도움 얻기",
"Commercial support" : "상용 지원",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "현재 <strong>%s</strong> / <strong>%s</strong>을(를) 사용중입니다.",
"Profile picture" : "프로필 사진",
@@ -234,6 +268,14 @@
"Your email address" : "이메일 주소",
"No email address set" : "이메일 주소가 설정되지 않음",
"For password recovery and notifications" : "암호 복구와 알림에 사용",
+ "Phone number" : "휴대폰 번호",
+ "Your phone number" : "내 휴대폰 번호",
+ "Address" : "주소",
+ "Your postal address" : "내 우편 번호",
+ "Website" : "웹 사이트",
+ "Your website" : "내 웹 사이트",
+ "Twitter" : "트위터",
+ "Your Twitter handle" : "내 트위터",
"You are member of the following groups:" : "다음 그룹의 구성원입니다:",
"Password" : "암호",
"Current password" : "현재 암호",
@@ -245,9 +287,12 @@
"Desktop client" : "데스크톱 클라이언트",
"Android app" : "Android 앱",
"iOS app" : "iOS 앱",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "이 프로젝트를 지원하려면 {contributeopen}개발에 참여{linkclose}하거나 {contributeopen}주변에 알려주세요{linkclose}!",
"Show First Run Wizard again" : "첫 실행 마법사 다시 보이기",
+ "Web, desktop and mobile clients currently logged in to your account." : "사용자 계정으로 로그인된 웹, 데스크톱, 모바일 클라이언트 목록입니다.",
"Device" : "장치",
"Last activity" : "최근 활동",
+ "Passcodes that give an app or device permissions to access your account." : "앱 암호는 앱이나 장치가 사용자 계정에 접근할 수 있도록 해줍니다.",
"Name" : "이름",
"App name" : "앱 이름",
"Create new app password" : "새로운 앱 암호 만들기",
@@ -255,6 +300,12 @@
"For security reasons this password will only be shown once." : "보안상의 이유로 이 암호는 한 번만 표시됩니다.",
"Username" : "사용자 이름",
"Done" : "완료",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen}Nextcloud 커뮤니티{linkclose}에서 개발, {githubopen}소스 코드{linkclose}는 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} 라이선스를 따릅니다.",
+ "Follow us on Google Plus!" : "Google Plus를 팔로우하세요!",
+ "Like our facebook page!" : "Facebook 페이지에서 좋아요를 눌러주세요!",
+ "Subscribe to our twitter channel!" : "Twitter 채널을 구독하세요!",
+ "Subscribe to our news feed!" : "뉴스 피드를 구독하세요!",
+ "Subscribe to our newsletter!" : "뉴스 레터를 구독하세요!",
"Show storage location" : "저장소 위치 보이기",
"Show last log in" : "마지막 로그인 시간 보이기",
"Show user backend" : "사용자 백엔드 보이기",
@@ -264,6 +315,7 @@
"Create" : "만들기",
"Admin Recovery Password" : "관리자 복구 암호",
"Enter the recovery password in order to recover the users files during password change" : "암호 변경 시 변경된 사용자 파일을 복구하려면 복구 암호를 입력하십시오",
+ "Group name" : "그룹 이름",
"Everyone" : "모두",
"Admins" : "관리자",
"Default quota" : "기본 할당량",
@@ -280,7 +332,11 @@
"Default" : "기본값",
"log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
"Language changed" : "언어가 변경됨",
+ "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
+ "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
+ "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?",
+ "Please wait...." : "기다려 주십시오....",
"iPhone" : "아이폰",
"add group" : "그룹 추가",
"Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)",
@@ -300,9 +356,11 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정이면, SQLite를 사용하지 않는 것이 좋습니다.",
"Experimental applications ahead" : "실험적인 앱 사용 예정",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "실험적인 앱은 보안 문제 검사를 통과하지 않았으며, 아직 새롭거나, 불안정하거나, 개발 중일 수도 있습니다. 이러한 앱을 설치하면 데이터 손실 및 보안 문제가 발생할 수도 있습니다.",
+ "Uninstall App" : "앱 제거",
"Enable experimental apps" : "실험적인 앱 사용",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "안녕하세요.<br><br>%s 계정을 사용할 수 있음을 알려 드립니다.<br><br>사용자 이름: %s<br>접근 링크: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "안녕하세요.\n\n%s 계정을 사용할 수 있음을 알려 드립니다.\n\n사용자 이름: %s\n접근 링크: %s\n\n",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "이 프로젝트를 지원하려면 <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">개발에 참여</a>하거나 <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">주변에 알려주세요</a>!",
"Add Group" : "그룹 추가",
"Group" : "그룹",
"Default Quota" : "기본 할당량",
@@ -310,11 +368,6 @@
"Group Admin for" : "다음 그룹의 관리자:",
"Storage Location" : "저장소 위치",
"User Backend" : "사용자 백엔드",
- "Last Login" : "마지막 로그인",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "외부 저장소",
- "Updates" : "업데이트",
- "An error occurred: {message}" : "오류 발생: {message}"
+ "Last Login" : "마지막 로그인"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js
index 5f5bbb6cbc2..9a1d28e770f 100644
--- a/settings/l10n/lb.js
+++ b/settings/l10n/lb.js
@@ -8,8 +8,6 @@ OC.L10N.register(
"Email sent" : "Email geschéckt",
"Invalid request" : "Ongülteg Requête",
"Email saved" : "E-mail gespäichert",
- "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.",
- "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s",
"All" : "All",
"Disable" : "Ofschalten",
"Enable" : "Aschalten",
@@ -49,12 +47,11 @@ OC.L10N.register(
"Other" : "Aner",
"Quota" : "Quota",
"Language changed" : "Sprooch huet geännert",
+ "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.",
+ "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s",
"Log" : "Log",
"More" : "Méi",
"Less" : "Manner",
- "Group" : "Grupp",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "Updates" : "Updates"
+ "Group" : "Grupp"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json
index 5a0cae2af06..cd241c5539a 100644
--- a/settings/l10n/lb.json
+++ b/settings/l10n/lb.json
@@ -6,8 +6,6 @@
"Email sent" : "Email geschéckt",
"Invalid request" : "Ongülteg Requête",
"Email saved" : "E-mail gespäichert",
- "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.",
- "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s",
"All" : "All",
"Disable" : "Ofschalten",
"Enable" : "Aschalten",
@@ -47,12 +45,11 @@
"Other" : "Aner",
"Quota" : "Quota",
"Language changed" : "Sprooch huet geännert",
+ "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.",
+ "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s",
"Log" : "Log",
"More" : "Méi",
"Less" : "Manner",
- "Group" : "Grupp",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "Updates" : "Updates"
+ "Group" : "Grupp"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index 349e6a32051..6d564652550 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -29,16 +29,14 @@ OC.L10N.register(
"Email saved" : "El. paštas įrašytas",
"Password confirmation is required" : "Reikalingas slaptažodžio patvirtinimas",
"Couldn't remove app." : "Nepavyko pašalinti programėlės.",
- "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
- "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s",
- "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s",
"Couldn't update app." : "Nepavyko atnaujinti programėlės.",
- "Not saved" : "Neišsaugota",
+ "Add trusted domain" : "Pridėti patikimą domeną",
+ "Not saved" : "Neįrašyta",
"Sending..." : "Siunčiama...",
"Official" : "Oficiali",
"All" : "Viskas",
"Update to %s" : "Atnaujinti į %s",
- "Please wait...." : "Prašome palaukti...",
+ "Enabling app …" : "Programėlė įjungiama",
"Error while disabling app" : "Klaida, išjungiant programėlę",
"Disable" : "Išjungti",
"Enable" : "Įjungti",
@@ -46,8 +44,11 @@ OC.L10N.register(
"Updating...." : "Atnaujinama...",
"Error while updating app" : "Įvyko klaida atnaujinant programą",
"Updated" : "Atnaujinta",
+ "Uninstalling ...." : "Išdiegiama...",
+ "Uninstall" : "Išdiegti",
"Approved" : "Patvirtinta",
"Experimental" : "Eksperimentinė",
+ "Disconnect" : "Atjungti",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
@@ -67,6 +68,7 @@ OC.L10N.register(
"Only visible to local users" : "Matoma tik vietiniams naudotojams",
"Only visible to you" : "Matoma tik jums",
"Visible to local users and to trusted servers" : "Matoma tik vietiniams naudotojams ir patikimiems serveriams",
+ "Public" : "Viešai",
"Select a profile picture" : "Pasirinkite profilio paveikslą",
"Very weak password" : "Labai silpnas slaptažodis",
"Weak password" : "Silpnas slaptažodis",
@@ -76,6 +78,7 @@ OC.L10N.register(
"Groups" : "Grupės",
"undo" : "anuliuoti",
"never" : "niekada",
+ "Add group" : "Pridėti grupę",
"Password successfully changed" : "Slaptažodis sėkmingai pakeistas",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Slaptažodžio pakeitimas sąlygos duomenų praradimą, kadangi šiam naudotojui nėra prieinamas duomenų atkūrimas",
"A valid username must be provided" : "Privalo būti pateiktas tinkamas naudotojo vardas",
@@ -160,18 +163,16 @@ OC.L10N.register(
"set new password" : "nustatyti naują slaptažodį",
"Default" : "Numatytasis",
"Language changed" : "Kalba pakeista",
+ "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
+ "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s",
+ "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s",
+ "Please wait...." : "Prašome palaukti...",
"iPhone" : "iPhone",
"Fatal issues only" : "Tik lemtingosios klaidos",
"Log" : "Žurnalas",
"More" : "Daugiau",
"Less" : "Mažiau",
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Žurnalo failo dydis yra daugiau nei 100 MB. Jo atsiuntimas gali šiek tiek užtrukti!",
- "Group" : "Grupė",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Išorinės saugyklos",
- "Updates" : "Atnaujinimai",
- "An error occurred: {message}" : "Įvyko klaida: {message}",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Jeigu norite palaikyti projektą, tuomet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">prisijunkite prie kūrimo</a>\n\t\tarba\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">padėkite kitiems naudotojams</a>!"
+ "Group" : "Grupė"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index 98b3fc749b4..85d13b49170 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -27,16 +27,14 @@
"Email saved" : "El. paštas įrašytas",
"Password confirmation is required" : "Reikalingas slaptažodžio patvirtinimas",
"Couldn't remove app." : "Nepavyko pašalinti programėlės.",
- "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
- "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s",
- "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s",
"Couldn't update app." : "Nepavyko atnaujinti programėlės.",
- "Not saved" : "Neišsaugota",
+ "Add trusted domain" : "Pridėti patikimą domeną",
+ "Not saved" : "Neįrašyta",
"Sending..." : "Siunčiama...",
"Official" : "Oficiali",
"All" : "Viskas",
"Update to %s" : "Atnaujinti į %s",
- "Please wait...." : "Prašome palaukti...",
+ "Enabling app …" : "Programėlė įjungiama",
"Error while disabling app" : "Klaida, išjungiant programėlę",
"Disable" : "Išjungti",
"Enable" : "Įjungti",
@@ -44,8 +42,11 @@
"Updating...." : "Atnaujinama...",
"Error while updating app" : "Įvyko klaida atnaujinant programą",
"Updated" : "Atnaujinta",
+ "Uninstalling ...." : "Išdiegiama...",
+ "Uninstall" : "Išdiegti",
"Approved" : "Patvirtinta",
"Experimental" : "Eksperimentinė",
+ "Disconnect" : "Atjungti",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
@@ -65,6 +66,7 @@
"Only visible to local users" : "Matoma tik vietiniams naudotojams",
"Only visible to you" : "Matoma tik jums",
"Visible to local users and to trusted servers" : "Matoma tik vietiniams naudotojams ir patikimiems serveriams",
+ "Public" : "Viešai",
"Select a profile picture" : "Pasirinkite profilio paveikslą",
"Very weak password" : "Labai silpnas slaptažodis",
"Weak password" : "Silpnas slaptažodis",
@@ -74,6 +76,7 @@
"Groups" : "Grupės",
"undo" : "anuliuoti",
"never" : "niekada",
+ "Add group" : "Pridėti grupę",
"Password successfully changed" : "Slaptažodis sėkmingai pakeistas",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Slaptažodžio pakeitimas sąlygos duomenų praradimą, kadangi šiam naudotojui nėra prieinamas duomenų atkūrimas",
"A valid username must be provided" : "Privalo būti pateiktas tinkamas naudotojo vardas",
@@ -158,18 +161,16 @@
"set new password" : "nustatyti naują slaptažodį",
"Default" : "Numatytasis",
"Language changed" : "Kalba pakeista",
+ "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės",
+ "Unable to add user to group %s" : "Nepavyko pridėti naudotojo į grupę %s",
+ "Unable to remove user from group %s" : "Nepavyko pašalinti naudotojo iš grupės %s",
+ "Please wait...." : "Prašome palaukti...",
"iPhone" : "iPhone",
"Fatal issues only" : "Tik lemtingosios klaidos",
"Log" : "Žurnalas",
"More" : "Daugiau",
"Less" : "Mažiau",
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Žurnalo failo dydis yra daugiau nei 100 MB. Jo atsiuntimas gali šiek tiek užtrukti!",
- "Group" : "Grupė",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Išorinės saugyklos",
- "Updates" : "Atnaujinimai",
- "An error occurred: {message}" : "Įvyko klaida: {message}",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Jeigu norite palaikyti projektą, tuomet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">prisijunkite prie kūrimo</a>\n\t\tarba\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">padėkite kitiems naudotojams</a>!"
+ "Group" : "Grupė"
},"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/settings/l10n/lv.js b/settings/l10n/lv.js
index e45d4c21577..382c9cc1818 100644
--- a/settings/l10n/lv.js
+++ b/settings/l10n/lv.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"settings",
{
- "Enabled" : "Pievienots",
+ "Enabled" : "Iespējots",
"Not enabled" : "Nav pievienots",
"Wrong password" : "Nepareiza parole",
"Saved" : "Saglabāts",
@@ -10,47 +10,88 @@ OC.L10N.register(
"Authentication error" : "Autentifikācijas kļūda",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Lūdzu ievadiet administratora atjaunošanas paroli, citādi visi lietotāja dati tiks zaudēti",
"Wrong admin recovery password. Please check the password and try again." : "Nepareiza administratora atjaunošanas parole. Lūdzu pārbaudiet paroli un mēģiniet vēlreiz.",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Aizmugursistēmas neatbalsta paroles maiņu, bet lietotāja šifrēšanas atslēga ir veiksmīgi atjaunināta.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "programmu instalēšana un atjaunināšana, izmantojot programmu veikalu vai Federatīvajām Cloud koplietošanu",
"Federated Cloud Sharing" : "Federatīva mākoņkoplietošana",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL izmanto novecojušu %s versiju (%s). Lūdzu, atjauniniet operētājsistēmu vai funkcijām, piem., %s nedarbosies pareizi.",
+ "A problem occurred, please check your log files (Error: %s)" : "Radusies problēma, lūdzu, pārbaudiet žurnāla failus (Kļūda: %s)",
+ "Migration Completed" : "Migrācija ir pabeigta",
"Group already exists." : "Grupa jau eksistē.",
"Unable to add group." : "Nevar pievienot grupu.",
"Unable to delete group." : "Nevar izdzēst grupu.",
"test email settings" : "testēt e-pasta iestatījumus",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Radās kļūda, nosūtot e-pastu. Lūdzu, pārskatiet savus iestatījumus. (Kļūda: %s)",
"Email sent" : "Vēstule nosūtīta",
"You need to set your user email before being able to send test emails." : "Nepieciešams norādīt sava lietotāja e-pasta adresi, lai nosūtīta testa e-pastus.",
"Invalid request" : "Nederīgs vaicājums",
"Invalid mail address" : "Nepareiza e-pasta adrese",
+ "No valid group selected" : "Atlasītā grupa nav derīga",
"A user with that name already exists." : "Jau pastāv lietotājs ar šo vārdu.",
"Unable to create user." : "Nevar izveidot lietotāju.",
"Your %s account was created" : "Konts %s ir izveidots",
"Unable to delete user." : "Nevar izdzēst lietotāju.",
+ "Settings saved" : "Iestatījumi saglabāti",
"Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu",
+ "Unable to change email address" : "Nevar mainīt e-pasta adresi",
"Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.",
"Forbidden" : "Pieeja liegta",
"Invalid user" : "Nepareizs lietotājs",
"Unable to change mail address" : "Nevar nomainīt e-pasta adresi",
"Email saved" : "E-pasts tika saglabāts",
- "Couldn't remove app." : "Nebija iespējams atslēgt lietoni.",
- "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas",
- "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s",
- "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s",
- "Couldn't update app." : "Nevarēja atjaunināt lietotni.",
+ "Password confirmation is required" : "Nepieciešams paroles apstiprinājums",
+ "Couldn't remove app." : "Nebija iespējams atslēgt programmu.",
+ "Couldn't update app." : "Nevarēja atjaunināt programmu.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Tu tiešām esi pārliecināta, ka vēlies pievienot {domain} kā uzticamu domēnu?",
"Add trusted domain" : "Pievienot uzticamu domēnu",
+ "Migration in progress. Please wait until the migration is finished" : "Notiek migrācija. Lūdzu, pagaidiet, līdz migrēšana ir pabeigta",
+ "Migration started …" : "Uzsākta migrācija...",
+ "Not saved" : "Nav saglabāts",
"Sending..." : "Sūta...",
"All" : "Visi",
- "No apps found for your version" : "Neatrada aplikāciju jūsu versijai",
- "Please wait...." : "Lūdzu, uzgaidiet....",
- "Error while disabling app" : "Kļūda, atvienojot lietotni",
+ "Update to %s" : "Atjaunināts uz %s",
+ "No apps found for your version" : "Neatrada programmu jūsu versijai",
+ "Error while disabling app" : "Kļūda, atvienojot programmu",
"Disable" : "Deaktivēt",
"Enable" : "Aktivēt",
- "Error while enabling app" : "Kļūda, pievienojot lietotni",
+ "Error while enabling app" : "Kļūda, pievienojot programmu",
"Updating...." : "Atjaunina....",
- "Error while updating app" : "Kļūda, atjauninot lietotni",
+ "Error while updating app" : "Kļūda, atjauninot programmu",
"Updated" : "Atjaunināta",
"Uninstalling ...." : "Atinstalē ....",
- "Error while uninstalling app" : "Kļūda, atinstalējot lietotni",
+ "Error while uninstalling app" : "Kļūda, atinstalējot programmu",
"Uninstall" : "Atinstalēt",
+ "App update" : "Programmu atjaunināšana",
+ "Approved" : "Apstiprināts",
+ "Experimental" : "Eksperimentāls",
+ "Disconnect" : "Atvienot",
+ "Revoke" : "Atsaukt",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome for Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS Klients",
+ "Android Client" : "Android Klients",
+ "Sync client - {os}" : "Sync klients - {os}",
+ "This session" : "Šajā sesijā",
+ "Copy" : "Kopēt",
+ "Copied!" : "Nokopēts!",
+ "Not supported!" : "Nav atbalstīts!",
+ "Press ⌘-C to copy." : "Spied ⌘-C lai kopētu.",
+ "Press Ctrl-C to copy." : "Spied Ctrl-C lai kopētu.",
"Valid until {date}" : "Valīds līdz {date}",
"Delete" : "Dzēst",
+ "Local" : "Lokāls",
+ "Private" : "Privāts",
+ "Only visible to local users" : "Redzami tikai lokālajiem lietotājiem",
+ "Only visible to you" : "Redzams tikai jums",
+ "Contacts" : "Kontakti",
+ "Visible to local users and to trusted servers" : "Redzama uz vietējiem lietotājiem un uzticamiem serveriem",
+ "Public" : "Publisks",
+ "Will be synced to a global and public address book" : "Tiks sinhronizēts ar globālu un publisku adrešu grāmatu",
"Select a profile picture" : "Izvēlieties profila attēlu",
"Very weak password" : "Ļoti vāja parole",
"Weak password" : "Vāja parole",
@@ -59,58 +100,131 @@ OC.L10N.register(
"Strong password" : "Lieliska parole",
"Groups" : "Grupas",
"Unable to delete {objName}" : "Nevar izdzēst {objName}",
+ "Error creating group: {message}" : "Kļūda, veidojot grupu: {message}",
"A valid group name must be provided" : "Jānorāda derīgs grupas nosaukums",
"deleted {groupName}" : "grupa {groupName} dzēsta",
"undo" : "atsaukt",
"never" : "nekad",
"deleted {userName}" : "lietotājs {userName} dzēsts",
+ "Unable to add user to group {group}" : "Nevar pievienot lietotāju grupai {group}",
+ "Unable to remove user from group {group}" : "Nevar noņemt lietotāju no grupas {group}",
+ "Add group" : "Pievienot grupu",
+ "Invalid quota value \"{val}\"" : "Nederīga kvotas vērtība \"{val}\"",
+ "no group" : "neviena grupa",
+ "Password successfully changed" : "Parole veiksmīgi nomainīta",
+ "Could not change the users email" : "Nevarēja mainīt lietotāja e-pasta adrese",
"A valid username must be provided" : "Jānorāda derīgs lietotājvārds",
+ "Error creating user: {message}" : "Kļūda, veidojot lietotāju: {message}",
"A valid password must be provided" : "Jānorāda derīga parole",
"A valid email must be provided" : "Jānorāda derīga e-pasta adrese",
"__language_name__" : "Latviešu",
"Unlimited" : "Neierobežota",
+ "Personal info" : "Personiskā informācija",
+ "Sessions" : "Sesijas",
+ "App passwords" : "Programmu paroles",
"Sync clients" : "Sinhronizācijas lietotnes",
"None" : "Nav",
"Login" : "Ierakstīties",
"Plain" : "vienkāršs teksts",
"NT LAN Manager" : "NT LAN Pārvaldnieks",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "E-pasta serveris",
"Open documentation" : "Atvērt dokumentāciju",
+ "This is used for sending out notifications." : "Tas tiek izmantots, izsūtot paziņojumus.",
+ "Send mode" : "Sūtīšanas metode",
"Encryption" : "Šifrēšana",
"From address" : "No adreses",
+ "mail" : "e-pasts",
+ "Authentication method" : "Autentifikācijas metode",
+ "Authentication required" : "Nepieciešama autentifikācija",
"Server address" : "Servera adrese",
"Port" : "Ports",
"Credentials" : "Akreditācijas dati",
"SMTP Username" : "SMTP lietotājvārds",
"SMTP Password" : "SMTP parole",
+ "Store credentials" : "Saglabāt akreditācijas datus",
"Test email settings" : "Izmēģināt e-pasta iestatījumus",
"Send email" : "Sūtīt e-pastu",
+ "Please read carefully before activating server-side encryption: " : "Lūdzu, izlasiet uzmanīgi pirms aktivējiet servera šifrēšanu:",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrēšana vien negarantē sistēmas drošību. Skatiet dokumentāciju, lai iegūtu papildinformāciju par šifrēšanas programmu izmantošana, kā arī citu darbību gadījumos.",
+ "Be aware that encryption always increases the file size." : "Jāapzinās, ka šifrēšanas vienmēr palielina faila lielumu.",
+ "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." : "Vienmēr ir ieteicams regulāri veidot dublējumkopijas datu šifrēšanas gadījumam, pārliecinieties, lai dublētu, šifrēšanas atslēgas ir kopā ar jūsu datiem.",
+ "This is the final warning: Do you really want to enable encryption?" : "Šis ir pēdējais brīdinājums: vai tiešām vēlaties iespējot šifrēšanu?",
"Enable encryption" : "Ieslēgt šifrēšanu",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Nav ielādēts šifrēšanas moduļis, lūdzu, aktivizējiet šifrēšanas moduli programmu izvēlnē.",
+ "Select default encryption module:" : "Atlasiet noklusēto šifrēšanas moduli:",
+ "Start migration" : "Sākt migrāciju",
+ "Security & setup warnings" : "Drošības un iestatījumu brīdinājumi",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūkst PHP modulis “fileinfo”. Mēs iesakām to aktivēt, lai pēc iespējas labāk noteiktu mime tipus.",
+ "All checks passed." : "Visas pārbaudes veiksmīgas.",
"Cron" : "Cron",
"Execute one task with each page loaded" : "Izpildīt vienu uzdevumu ar katru ielādēto lapu",
"Version" : "Versija",
"Sharing" : "Dalīšanās",
- "Allow apps to use the Share API" : "Ļaut lietotnēm izmantot koplietošanas API",
+ "Allow apps to use the Share API" : "Ļaut programmām izmantot koplietošanas API",
"Allow users to share via link" : "Ļaut lietotājiem koplietot caur saitēm",
"Allow public uploads" : "Atļaut publisko augšupielādi",
+ "Enforce password protection" : "Ieviest paroles aizsardzību",
+ "Set default expiration date" : "Iestatīt noklusējuma beigu datumu",
"Expire after " : "Nederīga pēc",
"days" : "dienas",
+ "Enforce expiration date" : "Uzspiest beigu termiņu",
"Allow resharing" : "Atļaut atkārtotu koplietošanu",
+ "Allow sharing with groups" : "Atļaut koplietošanu ar grupu",
+ "Restrict users to only share with users in their groups" : "Ierobežot lietotājiem koplietot tikai ar lietotājiem savās grupās",
+ "Exclude groups from sharing" : "Izslēgt grupu no koplietošanas",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Tas ir īpaši ieteicams, ja, izmantojot darbvirsmas klientu, lai veiktu failu sinhronizāciju.",
+ "How to do backups" : "Kā veikt dublēšanu",
+ "Advanced monitoring" : "Papildu uzraudzība",
+ "Performance tuning" : "Veiktspējas uzstādīšana",
+ "Improving the config.php" : "Uzlabot config.php",
+ "Theming" : "Dizains",
+ "Hardening and security guidance" : "Aizsardzības un drošības norādījumi",
+ "Developer documentation" : "Izstrādātāja dokumentācija",
+ "%s-licensed" : "%s-licencēts",
"Documentation:" : "Dokumentācija:",
"User documentation" : "Lietotāja dokumentācija",
"Admin documentation" : "Administratora dokumentācija",
+ "Visit website" : "Apmeklējiet vietni",
+ "Report a bug" : "Ziņot par kļūdu",
"Show description …" : "Rādīt aprakstu …",
"Hide description …" : "Slēpt aprakstu …",
+ "This app has an update available." : "Šai programmai ir pieejams jauninājums",
+ "Enable only for specific groups" : "Iespējot tikai konkrētām grupām",
+ "Uninstall app" : "Atinstalēt programmu",
+ "SSL Root Certificates" : "SSL Root Sertifikāti",
+ "Valid until" : "Derīgs līdz",
+ "Issued By" : "Izsniedza",
+ "Valid until %s" : "Derīgs līdz %s",
+ "Import root certificate" : "Importēt root sertifikātu",
+ "Cheers!" : "Priekā!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nvienkārši Jūsu zināšanai, ka Jums tagad ir %s konts.\n\nJūsu lietotājvārds: %s\nPiekļuve: %s\n\n",
+ "Administrator documentation" : "Administratora dokumentācija",
"Online documentation" : "Tiešsaistes dokumentācija",
"Forum" : "Forums",
+ "Getting help" : "Saņemt palīdzību",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs izmantojiet <strong>%s</strong> no <strong>%s</strong>",
"Profile picture" : "Profila attēls",
"Upload new" : "Ielādēt jaunu",
+ "Select from Files" : "Izvēlēties no faila",
"Remove image" : "Novākt attēlu",
+ "png or jpg, max. 20 MB" : "png vai jpg, max. 20 MB",
"Cancel" : "Atcelt",
+ "Choose as profile picture" : "Izvēlēties kā profila attēlu",
"Full name" : "Pilns vārds",
+ "No display name set" : "Nav norādīts ekrāna vārds",
"Email" : "E-pasts",
"Your email address" : "Jūsu e-pasta adrese",
+ "No email address set" : "Nav norādīts e-pasts",
+ "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem",
+ "Phone number" : "Tālruņa numurs",
+ "Your phone number" : "Jūsu tālruņa numurs",
+ "Address" : "Adrese",
+ "Your postal address" : "Jūsu pasta adrese",
+ "Website" : "Mājaslapa",
+ "Your website" : "Jūsu mājaslapa",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Jūs esat šādu grupu biedrs:",
"Password" : "Parole",
"Current password" : "Pašreizējā parole",
@@ -118,37 +232,75 @@ OC.L10N.register(
"Change password" : "Mainīt paroli",
"Language" : "Valoda",
"Help translate" : "Palīdzi tulkot",
- "Get the apps to sync your files" : "Saņem lietotnes, lai sinhronizētu savas datnes",
+ "Get the apps to sync your files" : "Saņem programmu, lai sinhronizētu savas datnes",
"Desktop client" : "Darbvirsmas klients",
- "Android app" : "Android lietotne",
- "iOS app" : "iOS lietotne",
+ "Android app" : "Android programma",
+ "iOS app" : "iOS programma",
"Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni",
+ "Device" : "Ierīce",
+ "Last activity" : "Pēdējā aktivitāte",
"Name" : "Nosaukums",
+ "App name" : "Programmas nosaukums",
+ "Create new app password" : "Izveidot jaunu programmas paroli",
+ "Use the credentials below to configure your app or device." : "Izmantot akreditācijas datus, lai konfigurētu savu programmu vai ierīci.",
+ "For security reasons this password will only be shown once." : "Drošības apsvērumu dēļ šī parole, tiks parādīta tikai vienreiz.",
"Username" : "Lietotājvārds",
"Done" : "Pabeigts",
+ "Follow us on Google Plus!" : "Seko mums Google Plus!",
+ "Subscribe to our newsletter!" : "Abonēt mūsu jaunumus!",
+ "Show storage location" : "Rādīt krātuves atrašanās vietu",
+ "Show last log in" : "Rādīt pēdējo autorizāciju",
"Send email to new user" : "Sūtīt e-pastu jaunajam lietotājam",
"Show email address" : "Rādīt e-pasta adreses",
"E-Mail" : "E-pasts",
"Create" : "Izveidot",
"Admin Recovery Password" : "Administratora atgūšanas parole",
"Enter the recovery password in order to recover the users files during password change" : "Ievadiet atgūšanas paroli, lai varētu atgūt lietotāja failus paroles maiņas laikā.",
+ "Group name" : "Grupas nosaukums",
+ "Everyone" : "Visi",
+ "Admins" : "Admins",
+ "Default quota" : "Apjoms pēc noklusējuma",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Lūdzu, ievadiet krātuves kvotu (piem: \"512 MB\" vai \"12 GB\")",
"Other" : "Cits",
+ "Group admin for" : "Admin grupa",
"Quota" : "Apjoms",
+ "Storage location" : "Krātuves atrašanās vieta",
+ "Last login" : "Pēdējā pieteikšanās",
+ "change full name" : "mainīt vārdu",
"set new password" : "iestatīt jaunu paroli",
+ "change email address" : "mainīt e-pasta adresi",
"Default" : "Noklusējuma",
+ "log-level out of allowed range" : "žurnāla-līmenis ārpus atļautā diapazona",
"Language changed" : "Valoda tika nomainīta",
+ "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas",
+ "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s",
+ "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Vai esat pārliecināts, ka vēlaties pievienot \"{domain}\" kā uzticamu domēnu?",
+ "Please wait...." : "Lūdzu, uzgaidiet....",
+ "iPhone" : "iPhone",
+ "add group" : "pievienot grupu",
"Everything (fatal issues, errors, warnings, info, debug)" : "Viss (letālas problēmas, kļūdas, brīdinājumi, informatīvas ziņas, atkļūdošanas paziņojumi)",
"Info, warnings, errors and fatal issues" : "Informatīvas ziņas, brīdinājumi, kļūdas un letālas problēmas",
"Warnings, errors and fatal issues" : "Brīdinājumi, kļūdas un letālas problēmas",
"Errors and fatal issues" : "Kļūdas un letālas problēmas",
"Fatal issues only" : "Tikai letālas problēmas",
"Log" : "Žurnāls",
+ "What to log" : "Ko pierakstīt",
+ "Download logfile" : "Lejupielādēt žurnālfailu",
"More" : "Vairāk",
"Less" : "Mazāk",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Šis žurnālfails ir lielāks par 100 MB. Lejupielāde var aizņemt kādu laiku.",
+ "Allow users to send mail notification for shared files" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem",
+ "Allow users to send mail notification for shared files to other users" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem citiem lietotājiem",
+ "Uninstall App" : "Atinstalēt programmu",
+ "Enable experimental apps" : "Atļaut eksperimentālās programmas",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ja vēlaties atbalstīt projektu\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pievienoties attīstībai</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">izplatīt vārdu</a>!",
+ "Add Group" : "Pievienot grupu",
"Group" : "Grupa",
- "External Storage" : "Ārējā krātuve",
- "Updates" : "Atjauninājumi",
- "An error occurred: {message}" : "Notika kļūda: {message}"
+ "Default Quota" : "Apjoms pēc noklusējuma",
+ "Full Name" : "Pilns vārds",
+ "Group Admin for" : "Admin grupa",
+ "Storage Location" : "Krātuves atrašanās vieta",
+ "Last Login" : "Pēdējā pieteikšanās"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json
index 73fb1390eb7..36e1576c800 100644
--- a/settings/l10n/lv.json
+++ b/settings/l10n/lv.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Enabled" : "Pievienots",
+ "Enabled" : "Iespējots",
"Not enabled" : "Nav pievienots",
"Wrong password" : "Nepareiza parole",
"Saved" : "Saglabāts",
@@ -8,47 +8,88 @@
"Authentication error" : "Autentifikācijas kļūda",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Lūdzu ievadiet administratora atjaunošanas paroli, citādi visi lietotāja dati tiks zaudēti",
"Wrong admin recovery password. Please check the password and try again." : "Nepareiza administratora atjaunošanas parole. Lūdzu pārbaudiet paroli un mēģiniet vēlreiz.",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Aizmugursistēmas neatbalsta paroles maiņu, bet lietotāja šifrēšanas atslēga ir veiksmīgi atjaunināta.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "programmu instalēšana un atjaunināšana, izmantojot programmu veikalu vai Federatīvajām Cloud koplietošanu",
"Federated Cloud Sharing" : "Federatīva mākoņkoplietošana",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL izmanto novecojušu %s versiju (%s). Lūdzu, atjauniniet operētājsistēmu vai funkcijām, piem., %s nedarbosies pareizi.",
+ "A problem occurred, please check your log files (Error: %s)" : "Radusies problēma, lūdzu, pārbaudiet žurnāla failus (Kļūda: %s)",
+ "Migration Completed" : "Migrācija ir pabeigta",
"Group already exists." : "Grupa jau eksistē.",
"Unable to add group." : "Nevar pievienot grupu.",
"Unable to delete group." : "Nevar izdzēst grupu.",
"test email settings" : "testēt e-pasta iestatījumus",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Radās kļūda, nosūtot e-pastu. Lūdzu, pārskatiet savus iestatījumus. (Kļūda: %s)",
"Email sent" : "Vēstule nosūtīta",
"You need to set your user email before being able to send test emails." : "Nepieciešams norādīt sava lietotāja e-pasta adresi, lai nosūtīta testa e-pastus.",
"Invalid request" : "Nederīgs vaicājums",
"Invalid mail address" : "Nepareiza e-pasta adrese",
+ "No valid group selected" : "Atlasītā grupa nav derīga",
"A user with that name already exists." : "Jau pastāv lietotājs ar šo vārdu.",
"Unable to create user." : "Nevar izveidot lietotāju.",
"Your %s account was created" : "Konts %s ir izveidots",
"Unable to delete user." : "Nevar izdzēst lietotāju.",
+ "Settings saved" : "Iestatījumi saglabāti",
"Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu",
+ "Unable to change email address" : "Nevar mainīt e-pasta adresi",
"Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.",
"Forbidden" : "Pieeja liegta",
"Invalid user" : "Nepareizs lietotājs",
"Unable to change mail address" : "Nevar nomainīt e-pasta adresi",
"Email saved" : "E-pasts tika saglabāts",
- "Couldn't remove app." : "Nebija iespējams atslēgt lietoni.",
- "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas",
- "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s",
- "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s",
- "Couldn't update app." : "Nevarēja atjaunināt lietotni.",
+ "Password confirmation is required" : "Nepieciešams paroles apstiprinājums",
+ "Couldn't remove app." : "Nebija iespējams atslēgt programmu.",
+ "Couldn't update app." : "Nevarēja atjaunināt programmu.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Tu tiešām esi pārliecināta, ka vēlies pievienot {domain} kā uzticamu domēnu?",
"Add trusted domain" : "Pievienot uzticamu domēnu",
+ "Migration in progress. Please wait until the migration is finished" : "Notiek migrācija. Lūdzu, pagaidiet, līdz migrēšana ir pabeigta",
+ "Migration started …" : "Uzsākta migrācija...",
+ "Not saved" : "Nav saglabāts",
"Sending..." : "Sūta...",
"All" : "Visi",
- "No apps found for your version" : "Neatrada aplikāciju jūsu versijai",
- "Please wait...." : "Lūdzu, uzgaidiet....",
- "Error while disabling app" : "Kļūda, atvienojot lietotni",
+ "Update to %s" : "Atjaunināts uz %s",
+ "No apps found for your version" : "Neatrada programmu jūsu versijai",
+ "Error while disabling app" : "Kļūda, atvienojot programmu",
"Disable" : "Deaktivēt",
"Enable" : "Aktivēt",
- "Error while enabling app" : "Kļūda, pievienojot lietotni",
+ "Error while enabling app" : "Kļūda, pievienojot programmu",
"Updating...." : "Atjaunina....",
- "Error while updating app" : "Kļūda, atjauninot lietotni",
+ "Error while updating app" : "Kļūda, atjauninot programmu",
"Updated" : "Atjaunināta",
"Uninstalling ...." : "Atinstalē ....",
- "Error while uninstalling app" : "Kļūda, atinstalējot lietotni",
+ "Error while uninstalling app" : "Kļūda, atinstalējot programmu",
"Uninstall" : "Atinstalēt",
+ "App update" : "Programmu atjaunināšana",
+ "Approved" : "Apstiprināts",
+ "Experimental" : "Eksperimentāls",
+ "Disconnect" : "Atvienot",
+ "Revoke" : "Atsaukt",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome for Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS Klients",
+ "Android Client" : "Android Klients",
+ "Sync client - {os}" : "Sync klients - {os}",
+ "This session" : "Šajā sesijā",
+ "Copy" : "Kopēt",
+ "Copied!" : "Nokopēts!",
+ "Not supported!" : "Nav atbalstīts!",
+ "Press ⌘-C to copy." : "Spied ⌘-C lai kopētu.",
+ "Press Ctrl-C to copy." : "Spied Ctrl-C lai kopētu.",
"Valid until {date}" : "Valīds līdz {date}",
"Delete" : "Dzēst",
+ "Local" : "Lokāls",
+ "Private" : "Privāts",
+ "Only visible to local users" : "Redzami tikai lokālajiem lietotājiem",
+ "Only visible to you" : "Redzams tikai jums",
+ "Contacts" : "Kontakti",
+ "Visible to local users and to trusted servers" : "Redzama uz vietējiem lietotājiem un uzticamiem serveriem",
+ "Public" : "Publisks",
+ "Will be synced to a global and public address book" : "Tiks sinhronizēts ar globālu un publisku adrešu grāmatu",
"Select a profile picture" : "Izvēlieties profila attēlu",
"Very weak password" : "Ļoti vāja parole",
"Weak password" : "Vāja parole",
@@ -57,58 +98,131 @@
"Strong password" : "Lieliska parole",
"Groups" : "Grupas",
"Unable to delete {objName}" : "Nevar izdzēst {objName}",
+ "Error creating group: {message}" : "Kļūda, veidojot grupu: {message}",
"A valid group name must be provided" : "Jānorāda derīgs grupas nosaukums",
"deleted {groupName}" : "grupa {groupName} dzēsta",
"undo" : "atsaukt",
"never" : "nekad",
"deleted {userName}" : "lietotājs {userName} dzēsts",
+ "Unable to add user to group {group}" : "Nevar pievienot lietotāju grupai {group}",
+ "Unable to remove user from group {group}" : "Nevar noņemt lietotāju no grupas {group}",
+ "Add group" : "Pievienot grupu",
+ "Invalid quota value \"{val}\"" : "Nederīga kvotas vērtība \"{val}\"",
+ "no group" : "neviena grupa",
+ "Password successfully changed" : "Parole veiksmīgi nomainīta",
+ "Could not change the users email" : "Nevarēja mainīt lietotāja e-pasta adrese",
"A valid username must be provided" : "Jānorāda derīgs lietotājvārds",
+ "Error creating user: {message}" : "Kļūda, veidojot lietotāju: {message}",
"A valid password must be provided" : "Jānorāda derīga parole",
"A valid email must be provided" : "Jānorāda derīga e-pasta adrese",
"__language_name__" : "Latviešu",
"Unlimited" : "Neierobežota",
+ "Personal info" : "Personiskā informācija",
+ "Sessions" : "Sesijas",
+ "App passwords" : "Programmu paroles",
"Sync clients" : "Sinhronizācijas lietotnes",
"None" : "Nav",
"Login" : "Ierakstīties",
"Plain" : "vienkāršs teksts",
"NT LAN Manager" : "NT LAN Pārvaldnieks",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "E-pasta serveris",
"Open documentation" : "Atvērt dokumentāciju",
+ "This is used for sending out notifications." : "Tas tiek izmantots, izsūtot paziņojumus.",
+ "Send mode" : "Sūtīšanas metode",
"Encryption" : "Šifrēšana",
"From address" : "No adreses",
+ "mail" : "e-pasts",
+ "Authentication method" : "Autentifikācijas metode",
+ "Authentication required" : "Nepieciešama autentifikācija",
"Server address" : "Servera adrese",
"Port" : "Ports",
"Credentials" : "Akreditācijas dati",
"SMTP Username" : "SMTP lietotājvārds",
"SMTP Password" : "SMTP parole",
+ "Store credentials" : "Saglabāt akreditācijas datus",
"Test email settings" : "Izmēģināt e-pasta iestatījumus",
"Send email" : "Sūtīt e-pastu",
+ "Please read carefully before activating server-side encryption: " : "Lūdzu, izlasiet uzmanīgi pirms aktivējiet servera šifrēšanu:",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrēšana vien negarantē sistēmas drošību. Skatiet dokumentāciju, lai iegūtu papildinformāciju par šifrēšanas programmu izmantošana, kā arī citu darbību gadījumos.",
+ "Be aware that encryption always increases the file size." : "Jāapzinās, ka šifrēšanas vienmēr palielina faila lielumu.",
+ "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." : "Vienmēr ir ieteicams regulāri veidot dublējumkopijas datu šifrēšanas gadījumam, pārliecinieties, lai dublētu, šifrēšanas atslēgas ir kopā ar jūsu datiem.",
+ "This is the final warning: Do you really want to enable encryption?" : "Šis ir pēdējais brīdinājums: vai tiešām vēlaties iespējot šifrēšanu?",
"Enable encryption" : "Ieslēgt šifrēšanu",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Nav ielādēts šifrēšanas moduļis, lūdzu, aktivizējiet šifrēšanas moduli programmu izvēlnē.",
+ "Select default encryption module:" : "Atlasiet noklusēto šifrēšanas moduli:",
+ "Start migration" : "Sākt migrāciju",
+ "Security & setup warnings" : "Drošības un iestatījumu brīdinājumi",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūkst PHP modulis “fileinfo”. Mēs iesakām to aktivēt, lai pēc iespējas labāk noteiktu mime tipus.",
+ "All checks passed." : "Visas pārbaudes veiksmīgas.",
"Cron" : "Cron",
"Execute one task with each page loaded" : "Izpildīt vienu uzdevumu ar katru ielādēto lapu",
"Version" : "Versija",
"Sharing" : "Dalīšanās",
- "Allow apps to use the Share API" : "Ļaut lietotnēm izmantot koplietošanas API",
+ "Allow apps to use the Share API" : "Ļaut programmām izmantot koplietošanas API",
"Allow users to share via link" : "Ļaut lietotājiem koplietot caur saitēm",
"Allow public uploads" : "Atļaut publisko augšupielādi",
+ "Enforce password protection" : "Ieviest paroles aizsardzību",
+ "Set default expiration date" : "Iestatīt noklusējuma beigu datumu",
"Expire after " : "Nederīga pēc",
"days" : "dienas",
+ "Enforce expiration date" : "Uzspiest beigu termiņu",
"Allow resharing" : "Atļaut atkārtotu koplietošanu",
+ "Allow sharing with groups" : "Atļaut koplietošanu ar grupu",
+ "Restrict users to only share with users in their groups" : "Ierobežot lietotājiem koplietot tikai ar lietotājiem savās grupās",
+ "Exclude groups from sharing" : "Izslēgt grupu no koplietošanas",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Tas ir īpaši ieteicams, ja, izmantojot darbvirsmas klientu, lai veiktu failu sinhronizāciju.",
+ "How to do backups" : "Kā veikt dublēšanu",
+ "Advanced monitoring" : "Papildu uzraudzība",
+ "Performance tuning" : "Veiktspējas uzstādīšana",
+ "Improving the config.php" : "Uzlabot config.php",
+ "Theming" : "Dizains",
+ "Hardening and security guidance" : "Aizsardzības un drošības norādījumi",
+ "Developer documentation" : "Izstrādātāja dokumentācija",
+ "%s-licensed" : "%s-licencēts",
"Documentation:" : "Dokumentācija:",
"User documentation" : "Lietotāja dokumentācija",
"Admin documentation" : "Administratora dokumentācija",
+ "Visit website" : "Apmeklējiet vietni",
+ "Report a bug" : "Ziņot par kļūdu",
"Show description …" : "Rādīt aprakstu …",
"Hide description …" : "Slēpt aprakstu …",
+ "This app has an update available." : "Šai programmai ir pieejams jauninājums",
+ "Enable only for specific groups" : "Iespējot tikai konkrētām grupām",
+ "Uninstall app" : "Atinstalēt programmu",
+ "SSL Root Certificates" : "SSL Root Sertifikāti",
+ "Valid until" : "Derīgs līdz",
+ "Issued By" : "Izsniedza",
+ "Valid until %s" : "Derīgs līdz %s",
+ "Import root certificate" : "Importēt root sertifikātu",
+ "Cheers!" : "Priekā!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nvienkārši Jūsu zināšanai, ka Jums tagad ir %s konts.\n\nJūsu lietotājvārds: %s\nPiekļuve: %s\n\n",
+ "Administrator documentation" : "Administratora dokumentācija",
"Online documentation" : "Tiešsaistes dokumentācija",
"Forum" : "Forums",
+ "Getting help" : "Saņemt palīdzību",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs izmantojiet <strong>%s</strong> no <strong>%s</strong>",
"Profile picture" : "Profila attēls",
"Upload new" : "Ielādēt jaunu",
+ "Select from Files" : "Izvēlēties no faila",
"Remove image" : "Novākt attēlu",
+ "png or jpg, max. 20 MB" : "png vai jpg, max. 20 MB",
"Cancel" : "Atcelt",
+ "Choose as profile picture" : "Izvēlēties kā profila attēlu",
"Full name" : "Pilns vārds",
+ "No display name set" : "Nav norādīts ekrāna vārds",
"Email" : "E-pasts",
"Your email address" : "Jūsu e-pasta adrese",
+ "No email address set" : "Nav norādīts e-pasts",
+ "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem",
+ "Phone number" : "Tālruņa numurs",
+ "Your phone number" : "Jūsu tālruņa numurs",
+ "Address" : "Adrese",
+ "Your postal address" : "Jūsu pasta adrese",
+ "Website" : "Mājaslapa",
+ "Your website" : "Jūsu mājaslapa",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Jūs esat šādu grupu biedrs:",
"Password" : "Parole",
"Current password" : "Pašreizējā parole",
@@ -116,37 +230,75 @@
"Change password" : "Mainīt paroli",
"Language" : "Valoda",
"Help translate" : "Palīdzi tulkot",
- "Get the apps to sync your files" : "Saņem lietotnes, lai sinhronizētu savas datnes",
+ "Get the apps to sync your files" : "Saņem programmu, lai sinhronizētu savas datnes",
"Desktop client" : "Darbvirsmas klients",
- "Android app" : "Android lietotne",
- "iOS app" : "iOS lietotne",
+ "Android app" : "Android programma",
+ "iOS app" : "iOS programma",
"Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni",
+ "Device" : "Ierīce",
+ "Last activity" : "Pēdējā aktivitāte",
"Name" : "Nosaukums",
+ "App name" : "Programmas nosaukums",
+ "Create new app password" : "Izveidot jaunu programmas paroli",
+ "Use the credentials below to configure your app or device." : "Izmantot akreditācijas datus, lai konfigurētu savu programmu vai ierīci.",
+ "For security reasons this password will only be shown once." : "Drošības apsvērumu dēļ šī parole, tiks parādīta tikai vienreiz.",
"Username" : "Lietotājvārds",
"Done" : "Pabeigts",
+ "Follow us on Google Plus!" : "Seko mums Google Plus!",
+ "Subscribe to our newsletter!" : "Abonēt mūsu jaunumus!",
+ "Show storage location" : "Rādīt krātuves atrašanās vietu",
+ "Show last log in" : "Rādīt pēdējo autorizāciju",
"Send email to new user" : "Sūtīt e-pastu jaunajam lietotājam",
"Show email address" : "Rādīt e-pasta adreses",
"E-Mail" : "E-pasts",
"Create" : "Izveidot",
"Admin Recovery Password" : "Administratora atgūšanas parole",
"Enter the recovery password in order to recover the users files during password change" : "Ievadiet atgūšanas paroli, lai varētu atgūt lietotāja failus paroles maiņas laikā.",
+ "Group name" : "Grupas nosaukums",
+ "Everyone" : "Visi",
+ "Admins" : "Admins",
+ "Default quota" : "Apjoms pēc noklusējuma",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Lūdzu, ievadiet krātuves kvotu (piem: \"512 MB\" vai \"12 GB\")",
"Other" : "Cits",
+ "Group admin for" : "Admin grupa",
"Quota" : "Apjoms",
+ "Storage location" : "Krātuves atrašanās vieta",
+ "Last login" : "Pēdējā pieteikšanās",
+ "change full name" : "mainīt vārdu",
"set new password" : "iestatīt jaunu paroli",
+ "change email address" : "mainīt e-pasta adresi",
"Default" : "Noklusējuma",
+ "log-level out of allowed range" : "žurnāla-līmenis ārpus atļautā diapazona",
"Language changed" : "Valoda tika nomainīta",
+ "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas",
+ "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s",
+ "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Vai esat pārliecināts, ka vēlaties pievienot \"{domain}\" kā uzticamu domēnu?",
+ "Please wait...." : "Lūdzu, uzgaidiet....",
+ "iPhone" : "iPhone",
+ "add group" : "pievienot grupu",
"Everything (fatal issues, errors, warnings, info, debug)" : "Viss (letālas problēmas, kļūdas, brīdinājumi, informatīvas ziņas, atkļūdošanas paziņojumi)",
"Info, warnings, errors and fatal issues" : "Informatīvas ziņas, brīdinājumi, kļūdas un letālas problēmas",
"Warnings, errors and fatal issues" : "Brīdinājumi, kļūdas un letālas problēmas",
"Errors and fatal issues" : "Kļūdas un letālas problēmas",
"Fatal issues only" : "Tikai letālas problēmas",
"Log" : "Žurnāls",
+ "What to log" : "Ko pierakstīt",
+ "Download logfile" : "Lejupielādēt žurnālfailu",
"More" : "Vairāk",
"Less" : "Mazāk",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Šis žurnālfails ir lielāks par 100 MB. Lejupielāde var aizņemt kādu laiku.",
+ "Allow users to send mail notification for shared files" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem",
+ "Allow users to send mail notification for shared files to other users" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem citiem lietotājiem",
+ "Uninstall App" : "Atinstalēt programmu",
+ "Enable experimental apps" : "Atļaut eksperimentālās programmas",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ja vēlaties atbalstīt projektu\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pievienoties attīstībai</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">izplatīt vārdu</a>!",
+ "Add Group" : "Pievienot grupu",
"Group" : "Grupa",
- "External Storage" : "Ārējā krātuve",
- "Updates" : "Atjauninājumi",
- "An error occurred: {message}" : "Notika kļūda: {message}"
+ "Default Quota" : "Apjoms pēc noklusējuma",
+ "Full Name" : "Pilns vārds",
+ "Group Admin for" : "Admin grupa",
+ "Storage Location" : "Krātuves atrašanās vieta",
+ "Last Login" : "Pēdējā pieteikšanās"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js
index 769ad1df48b..b4ddc955102 100644
--- a/settings/l10n/mk.js
+++ b/settings/l10n/mk.js
@@ -33,9 +33,6 @@ OC.L10N.register(
"Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта",
"Email saved" : "Електронската пошта е снимена",
"Couldn't remove app." : "Не можам да ја отстранам апликацијата.",
- "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата",
- "Unable to add user to group %s" : "Неможе да додадам корисник во група %s",
- "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s",
"Couldn't update app." : "Не можам да ја надградам апликацијата.",
"Add trusted domain" : "Додади доверлив домејн",
"Migration started …" : "Миграцијата е започнаа ...",
@@ -44,7 +41,6 @@ OC.L10N.register(
"All" : "Сите",
"Update to %s" : "Надгради на %s",
"No apps found for your version" : "За вашата верзија не се пронајдени апликации",
- "Please wait...." : "Ве молам почекајте ...",
"Error while disabling app" : "Грешка при исклучувањето на апликацијата",
"Disable" : "Оневозможи",
"Enable" : "Овозможи",
@@ -164,6 +160,10 @@ OC.L10N.register(
"Default" : "Предефиниран",
"log-level out of allowed range" : "нивото на логирање е надвор од дозволениот опсег",
"Language changed" : "Јазикот е сменет",
+ "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата",
+ "Unable to add user to group %s" : "Неможе да додадам корисник во група %s",
+ "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s",
+ "Please wait...." : "Ве молам почекајте ...",
"Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи",
"Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи",
"Errors and fatal issues" : "Грешки и фатални работи",
@@ -173,9 +173,6 @@ OC.L10N.register(
"Download logfile" : "Преземи ја датотеката со логови",
"More" : "Повеќе",
"Less" : "Помалку",
- "Group" : "Група",
- "External Storage" : "Надворешно складиште",
- "Updates" : "Ажурирања",
- "An error occurred: {message}" : "Се случи грешка: {message}"
+ "Group" : "Група"
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json
index 76c4994e0ee..cbb05bbd380 100644
--- a/settings/l10n/mk.json
+++ b/settings/l10n/mk.json
@@ -31,9 +31,6 @@
"Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта",
"Email saved" : "Електронската пошта е снимена",
"Couldn't remove app." : "Не можам да ја отстранам апликацијата.",
- "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата",
- "Unable to add user to group %s" : "Неможе да додадам корисник во група %s",
- "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s",
"Couldn't update app." : "Не можам да ја надградам апликацијата.",
"Add trusted domain" : "Додади доверлив домејн",
"Migration started …" : "Миграцијата е започнаа ...",
@@ -42,7 +39,6 @@
"All" : "Сите",
"Update to %s" : "Надгради на %s",
"No apps found for your version" : "За вашата верзија не се пронајдени апликации",
- "Please wait...." : "Ве молам почекајте ...",
"Error while disabling app" : "Грешка при исклучувањето на апликацијата",
"Disable" : "Оневозможи",
"Enable" : "Овозможи",
@@ -162,6 +158,10 @@
"Default" : "Предефиниран",
"log-level out of allowed range" : "нивото на логирање е надвор од дозволениот опсег",
"Language changed" : "Јазикот е сменет",
+ "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата",
+ "Unable to add user to group %s" : "Неможе да додадам корисник во група %s",
+ "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s",
+ "Please wait...." : "Ве молам почекајте ...",
"Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи",
"Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи",
"Errors and fatal issues" : "Грешки и фатални работи",
@@ -171,9 +171,6 @@
"Download logfile" : "Преземи ја датотеката со логови",
"More" : "Повеќе",
"Less" : "Помалку",
- "Group" : "Група",
- "External Storage" : "Надворешно складиште",
- "Updates" : "Ажурирања",
- "An error occurred: {message}" : "Се случи грешка: {message}"
+ "Group" : "Група"
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
} \ No newline at end of file
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index 27af749b5dc..32cc38f7759 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Kan ikke endre epost-adresse",
"Email saved" : "Epost lagret",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
- "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
- "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
- "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s",
"Couldn't update app." : "Kunne ikke oppdatere app.",
"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.",
@@ -54,7 +51,6 @@ OC.L10N.register(
"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.",
"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.",
- "Please wait...." : "Vennligst vent...",
"Error while disabling app" : "Deaktivering av app feilet",
"Disable" : "Deaktiver ",
"Enable" : "Aktiver",
@@ -84,6 +80,7 @@ OC.L10N.register(
"Android Client" : "Android klient",
"Sync client - {os}" : "Synkroniseringsklient - {os}",
"This session" : "Denne økten",
+ "Copy" : "Kopier",
"Copied!" : "Kopiert!",
"Not supported!" : "Ikke støttet!",
"Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
@@ -94,6 +91,7 @@ OC.L10N.register(
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Vennligst last opp et ASCII-kodet PEM-sertifikat.",
"Valid until {date}" : "Gyldig til {date}",
"Delete" : "Slett",
+ "Private" : "Privat",
"Select a profile picture" : "Velg et profilbilde",
"Very weak password" : "Veldig svakt passord",
"Weak password" : "Svakt passord",
@@ -226,7 +224,6 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Denne appen har ingen høyeste versjon av Nextcloud definert. Dette vil være en feil i fremtiden.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Denne appen kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt:",
"Enable only for specific groups" : "Aktiver kun for visse grupper",
- "Uninstall App" : "Avinstaller app",
"SSL Root Certificates" : "SSL rotsertifikater",
"Common Name" : "Vanlig navn",
"Valid until" : "Gyldig til",
@@ -309,7 +306,11 @@ OC.L10N.register(
"Default" : "Standard",
"log-level out of allowed range" : "Loggnivå utenfor tillatt område",
"Language changed" : "Språk endret",
+ "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
+ "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
+ "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som klarert domene?",
+ "Please wait...." : "Vennligst vent...",
"iPhone" : "iPhone",
"add group" : "legg til gruppe",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)",
@@ -329,6 +330,7 @@ OC.L10N.register(
"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",
"Experimental applications ahead" : "Eksperimentelle applikasjoner forut",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Eksperimentelle apper er ikke sjekket for sikkerhetsproblemer. De er nye eller de anses som ustabile og under stadig utvikling. Å installere slike apper kan forårsake tap av data eller brudd på sikkerheten.",
+ "Uninstall App" : "Avinstaller app",
"Enable experimental apps" : "Aktiver eksperimentelle apper",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei,<br><br>vil bare informere om at du nå har en %s-konto.<br><br>Brukernavnet ditt: %s<br>Gå dit: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nVil bare informere om at du nå har en %s-konto.\n\nBrukernavnet ditt: %s\nGå dit: %s\n\n",
@@ -340,24 +342,6 @@ OC.L10N.register(
"Group Admin for" : "Gruppeadministrator for",
"Storage Location" : "Lagringsplassering",
"User Backend" : "Bruker-tjener",
- "Last Login" : "Siste innlogging",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Ekstern lagring",
- "Updates" : "Oppdateringer",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud 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.",
- "No apps found for \"{query}\"" : "Ingen apper funnet for \"{query}\"",
- "An error occurred: {message}" : "Det oppstod en feil: {message}",
- "Please check the <a target=\"_blank\" 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\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.",
- "Your database does not run with \"READ COMMITED\" 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.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Serveren din kjører på Microsoft Windows. Vi anbefaler sterkt Linux for en optimal brukeropplevelse.",
- "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\" 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.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Vennligst dobbeltsjekk <a target=\"_blank\" href=\"%s\">installasjonsveiledningen ↗</a>, og se etter feil og advarsler i <a href=\"#log-section\">loggen</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Krypteringen alene gir ikke noen garanti for systemets sikkerhet. Vennligst se i Nextcloud dokumentasjonen for mer informasjon om hvordan krypteringsappen virker, og de fungerende brukeeksemplene.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" href=\"%s\">dokumentasjonen ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Denne appen har ingen laveste versjon av Nextcloud definert. Dette vil være en feil i Nextcloud 11 og senere.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Denne appen har ingen maksimum versjon av Nextcloud definert. Dette vil være en feil i Nextcloud 11 og senere.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Hvis du vil støtte prosjektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i utviklingen</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hjelp andre brukere</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Utviklet av {communityopen}Nextcloud mijøet{linkclose}, {githubopen}kildekoden{linkclose} er lisensiert under {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Siste innlogging"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index 09552049cdb..dc153fc66f6 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Kan ikke endre epost-adresse",
"Email saved" : "Epost lagret",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
- "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
- "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
- "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s",
"Couldn't update app." : "Kunne ikke oppdatere app.",
"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.",
@@ -52,7 +49,6 @@
"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.",
"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.",
- "Please wait...." : "Vennligst vent...",
"Error while disabling app" : "Deaktivering av app feilet",
"Disable" : "Deaktiver ",
"Enable" : "Aktiver",
@@ -82,6 +78,7 @@
"Android Client" : "Android klient",
"Sync client - {os}" : "Synkroniseringsklient - {os}",
"This session" : "Denne økten",
+ "Copy" : "Kopier",
"Copied!" : "Kopiert!",
"Not supported!" : "Ikke støttet!",
"Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
@@ -92,6 +89,7 @@
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Vennligst last opp et ASCII-kodet PEM-sertifikat.",
"Valid until {date}" : "Gyldig til {date}",
"Delete" : "Slett",
+ "Private" : "Privat",
"Select a profile picture" : "Velg et profilbilde",
"Very weak password" : "Veldig svakt passord",
"Weak password" : "Svakt passord",
@@ -224,7 +222,6 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Denne appen har ingen høyeste versjon av Nextcloud definert. Dette vil være en feil i fremtiden.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Denne appen kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt:",
"Enable only for specific groups" : "Aktiver kun for visse grupper",
- "Uninstall App" : "Avinstaller app",
"SSL Root Certificates" : "SSL rotsertifikater",
"Common Name" : "Vanlig navn",
"Valid until" : "Gyldig til",
@@ -307,7 +304,11 @@
"Default" : "Standard",
"log-level out of allowed range" : "Loggnivå utenfor tillatt område",
"Language changed" : "Språk endret",
+ "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
+ "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
+ "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som klarert domene?",
+ "Please wait...." : "Vennligst vent...",
"iPhone" : "iPhone",
"add group" : "legg til gruppe",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)",
@@ -327,6 +328,7 @@
"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",
"Experimental applications ahead" : "Eksperimentelle applikasjoner forut",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Eksperimentelle apper er ikke sjekket for sikkerhetsproblemer. De er nye eller de anses som ustabile og under stadig utvikling. Å installere slike apper kan forårsake tap av data eller brudd på sikkerheten.",
+ "Uninstall App" : "Avinstaller app",
"Enable experimental apps" : "Aktiver eksperimentelle apper",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei,<br><br>vil bare informere om at du nå har en %s-konto.<br><br>Brukernavnet ditt: %s<br>Gå dit: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nVil bare informere om at du nå har en %s-konto.\n\nBrukernavnet ditt: %s\nGå dit: %s\n\n",
@@ -338,24 +340,6 @@
"Group Admin for" : "Gruppeadministrator for",
"Storage Location" : "Lagringsplassering",
"User Backend" : "Bruker-tjener",
- "Last Login" : "Siste innlogging",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Ekstern lagring",
- "Updates" : "Oppdateringer",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud 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.",
- "No apps found for \"{query}\"" : "Ingen apper funnet for \"{query}\"",
- "An error occurred: {message}" : "Det oppstod en feil: {message}",
- "Please check the <a target=\"_blank\" 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\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.",
- "Your database does not run with \"READ COMMITED\" 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.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Serveren din kjører på Microsoft Windows. Vi anbefaler sterkt Linux for en optimal brukeropplevelse.",
- "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\" 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.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Vennligst dobbeltsjekk <a target=\"_blank\" href=\"%s\">installasjonsveiledningen ↗</a>, og se etter feil og advarsler i <a href=\"#log-section\">loggen</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Krypteringen alene gir ikke noen garanti for systemets sikkerhet. Vennligst se i Nextcloud dokumentasjonen for mer informasjon om hvordan krypteringsappen virker, og de fungerende brukeeksemplene.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" href=\"%s\">dokumentasjonen ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Denne appen har ingen laveste versjon av Nextcloud definert. Dette vil være en feil i Nextcloud 11 og senere.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Denne appen har ingen maksimum versjon av Nextcloud definert. Dette vil være en feil i Nextcloud 11 og senere.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Hvis du vil støtte prosjektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i utviklingen</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hjelp andre brukere</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Utviklet av {communityopen}Nextcloud mijøet{linkclose}, {githubopen}kildekoden{linkclose} er lisensiert under {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Siste innlogging"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index 2875154fbd2..91f2987d33a 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Je moet je e-mailadres invoeren voordat je testberichten kunt versturen.",
"Invalid request" : "Ongeldige aanvraag",
"Invalid mail address" : "Ongeldig e-mailadres",
+ "No valid group selected" : "Geen geldige groep geselecteerd",
"A user with that name already exists." : "Er bestaat al een gebruiker met die naam.",
"Unable to create user." : "Kan gebruiker niet aanmaken.",
"Your %s account was created" : "Je %s account is aangemaakt",
@@ -39,9 +40,6 @@ OC.L10N.register(
"Email saved" : "E-mail opgeslagen",
"Password confirmation is required" : "Wachtwoordbevestiging vereist",
"Couldn't remove app." : "Kon app niet verwijderen.",
- "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
- "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s",
- "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s",
"Couldn't update app." : "Kon de app niet bijwerken.",
"Are you really sure you want add {domain} as trusted domain?" : "Bent u er zeker van om {domain} als vertrouwd domein toe te voegen?",
"Add trusted domain" : "Vertrouwd domein toevoegen",
@@ -58,7 +56,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Officiële apps worden ontwikkeld door en binnen de community. Ze bieden centrale functionaliteit en zijn klaar voor productie.",
"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." : "Goedgekeurde apps zijn ontwikkeld door vertrouwde ontwikkelaars en hebben een beveiligingscontrole ondergaan. Ze worden actief onderhouden in een open code repository en hun ontwikkelaars vinden ze stabiel genoeg voor informeel of normaal gebruik.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Deze app is niet gecontroleerd op beveiligingsproblemen en is nieuw of staat bekend als onstabiel. Installeren op eigen risico.",
- "Please wait...." : "Even geduld a.u.b.",
+ "Enabling app …" : "Activeren app ...",
"Error while disabling app" : "Fout tijdens het uitzetten van de app",
"Disable" : "Uitschakelen",
"Enable" : "Activeer",
@@ -125,6 +123,8 @@ OC.L10N.register(
"undo" : "ongedaan maken",
"never" : "geen",
"deleted {userName}" : "verwijderd {userName}",
+ "Unable to add user to group {group}" : "Kan niet worden toegevoegd aan gebruikersgroep {group}",
+ "Unable to remove user from group {group}" : "Gebruiker kan niet worden verwijderd van groep {group}",
"Add group" : "Groep toevoegen",
"Invalid quota value \"{val}\"" : "Ongeldige quota waarde \"{val}\"",
"no group" : "geen groep",
@@ -247,7 +247,7 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Deze app heeft geen maximum Nextcloud versie toegewezen gekregen. In de toekomst wordt dit wordt een fout.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Deze app kan niet worden geïnstalleerd, omdat de volgende afhankelijkheden niet zijn ingevuld:",
"Enable only for specific groups" : "Alleen voor bepaalde groepen activeren",
- "Uninstall App" : "De-installeren app",
+ "Uninstall app" : "De-installeren app",
"SSL Root Certificates" : "SSL Root Certificaten",
"Common Name" : "Common Name",
"Valid until" : "Geldig tot",
@@ -341,7 +341,11 @@ OC.L10N.register(
"Default" : "Standaard",
"log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
"Language changed" : "Taal aangepast",
+ "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
+ "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s",
+ "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet je zeker dat je \"{domain}\" als een vertrouwd domein wilt toevoegen?",
+ "Please wait...." : "Even geduld a.u.b.",
"iPhone" : "iPhone",
"add group" : "groep toevoegen",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)",
@@ -361,6 +365,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.",
"Experimental applications ahead" : "Experimentele applicaties vooraan",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentele apps zijn niet gecontroleerd op beveiligingsproblemen, zijn nieuw of staan bekend als instabiel en worden volop ontwikkeld. Installatie kan leiden tot gegevensverlies of beveiligingsincidenten.",
+ "Uninstall App" : "De-installeren app",
"Enable experimental apps" : "Inschakelen experimentele apps",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen je laten weten dat je nu een %s account hebt.<br><br>Je gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen je laten weten dat je nu een %s account hebt.\n\nJe gebruikersnaam: %s\nGa naar: %s\n\n",
@@ -372,24 +377,6 @@ OC.L10N.register(
"Group Admin for" : "Groepsbeheerder voor",
"Storage Location" : "Opslaglocatie",
"User Backend" : "Backend gebruiker",
- "Last Login" : "Laatste inlog",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externe opslag",
- "Updates" : "Updates",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Officiële apps worden ontwikkeld door en binnen de Nextcloud community. Ze bieden cruciale functionaliteit voor Nextcloud en zijn klaar voor productie.",
- "No apps found for \"{query}\"" : "Geen apps gevonden voor {query}",
- "An error occurred: {message}" : "Er heeft zich een fout voorgedaan: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lees de <a target=\"_blank\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratienotities en de php configuratie van je server, zeker bij gebruik van php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Je database draait niet met \"READ COMMITED\" transactie isolatie niveau. Dit kan problemen opleveren als er meerdere acties tegelijkertijd worden uitgevoerd.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Je server draait op Microsoft Windows. We adviseren je om een linux server te gebruiken voor een optimale gebruikerservaring.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandlocking is gedeactiveerd, dat zou kunnen leiden tot versiebeheerproblemen. Schakel 'filelocking enabled' in config.php in om deze problemen te voorkomen. Zie de <a target=\"_blank\" href=\"%s\">documentatie ↗</a> voor meer informatie.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a target=\"_blank\" href=\"%s\">installatiehandleiding ↗</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Versleuteling alleen garandeert geen beveiliging van het systeem. Lees de Nextcloud documentatie voor meer achtergronden over de werking van de crypto app en de relevante use cases.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Om te migreren naar een andere database moet u de commandoregel tool gebruiken: 'occ db:convert-type', of lees de <a target=\"_blank\" href=\"%s\">documentatie ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Deze app heeft geen minimum Nextcloud versie toegewezen gekregen. Dit wordt een fout in Nextcloud 11 en later.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Deze app heeft geen maximum Nextcloud versie toegewezen gekregen. Dit wordt een fout in Nextcloud 11 en later.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Als je dit project wilt ondersteunen\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help mee met ontwikkelen</a>\n\t\tof\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help andere gebruikers</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Ontwikkeld door de {communityopen}Nextcloud community{linkclose}, de {githubopen}broncode{linkclose} is gelicenseerd onder de {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Laatste inlog"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index 7cc83b182fe..68b8e1ab060 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -23,6 +23,7 @@
"You need to set your user email before being able to send test emails." : "Je moet je e-mailadres invoeren voordat je testberichten kunt versturen.",
"Invalid request" : "Ongeldige aanvraag",
"Invalid mail address" : "Ongeldig e-mailadres",
+ "No valid group selected" : "Geen geldige groep geselecteerd",
"A user with that name already exists." : "Er bestaat al een gebruiker met die naam.",
"Unable to create user." : "Kan gebruiker niet aanmaken.",
"Your %s account was created" : "Je %s account is aangemaakt",
@@ -37,9 +38,6 @@
"Email saved" : "E-mail opgeslagen",
"Password confirmation is required" : "Wachtwoordbevestiging vereist",
"Couldn't remove app." : "Kon app niet verwijderen.",
- "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
- "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s",
- "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s",
"Couldn't update app." : "Kon de app niet bijwerken.",
"Are you really sure you want add {domain} as trusted domain?" : "Bent u er zeker van om {domain} als vertrouwd domein toe te voegen?",
"Add trusted domain" : "Vertrouwd domein toevoegen",
@@ -56,7 +54,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Officiële apps worden ontwikkeld door en binnen de community. Ze bieden centrale functionaliteit en zijn klaar voor productie.",
"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." : "Goedgekeurde apps zijn ontwikkeld door vertrouwde ontwikkelaars en hebben een beveiligingscontrole ondergaan. Ze worden actief onderhouden in een open code repository en hun ontwikkelaars vinden ze stabiel genoeg voor informeel of normaal gebruik.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Deze app is niet gecontroleerd op beveiligingsproblemen en is nieuw of staat bekend als onstabiel. Installeren op eigen risico.",
- "Please wait...." : "Even geduld a.u.b.",
+ "Enabling app …" : "Activeren app ...",
"Error while disabling app" : "Fout tijdens het uitzetten van de app",
"Disable" : "Uitschakelen",
"Enable" : "Activeer",
@@ -123,6 +121,8 @@
"undo" : "ongedaan maken",
"never" : "geen",
"deleted {userName}" : "verwijderd {userName}",
+ "Unable to add user to group {group}" : "Kan niet worden toegevoegd aan gebruikersgroep {group}",
+ "Unable to remove user from group {group}" : "Gebruiker kan niet worden verwijderd van groep {group}",
"Add group" : "Groep toevoegen",
"Invalid quota value \"{val}\"" : "Ongeldige quota waarde \"{val}\"",
"no group" : "geen groep",
@@ -245,7 +245,7 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Deze app heeft geen maximum Nextcloud versie toegewezen gekregen. In de toekomst wordt dit wordt een fout.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Deze app kan niet worden geïnstalleerd, omdat de volgende afhankelijkheden niet zijn ingevuld:",
"Enable only for specific groups" : "Alleen voor bepaalde groepen activeren",
- "Uninstall App" : "De-installeren app",
+ "Uninstall app" : "De-installeren app",
"SSL Root Certificates" : "SSL Root Certificaten",
"Common Name" : "Common Name",
"Valid until" : "Geldig tot",
@@ -339,7 +339,11 @@
"Default" : "Standaard",
"log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
"Language changed" : "Taal aangepast",
+ "Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
+ "Unable to add user to group %s" : "Niet in staat om gebruiker toe te voegen aan groep %s",
+ "Unable to remove user from group %s" : "Niet in staat om gebruiker te verwijderen uit groep %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet je zeker dat je \"{domain}\" als een vertrouwd domein wilt toevoegen?",
+ "Please wait...." : "Even geduld a.u.b.",
"iPhone" : "iPhone",
"add group" : "groep toevoegen",
"Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)",
@@ -359,6 +363,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.",
"Experimental applications ahead" : "Experimentele applicaties vooraan",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentele apps zijn niet gecontroleerd op beveiligingsproblemen, zijn nieuw of staan bekend als instabiel en worden volop ontwikkeld. Installatie kan leiden tot gegevensverlies of beveiligingsincidenten.",
+ "Uninstall App" : "De-installeren app",
"Enable experimental apps" : "Inschakelen experimentele apps",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen je laten weten dat je nu een %s account hebt.<br><br>Je gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen je laten weten dat je nu een %s account hebt.\n\nJe gebruikersnaam: %s\nGa naar: %s\n\n",
@@ -370,24 +375,6 @@
"Group Admin for" : "Groepsbeheerder voor",
"Storage Location" : "Opslaglocatie",
"User Backend" : "Backend gebruiker",
- "Last Login" : "Laatste inlog",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externe opslag",
- "Updates" : "Updates",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Officiële apps worden ontwikkeld door en binnen de Nextcloud community. Ze bieden cruciale functionaliteit voor Nextcloud en zijn klaar voor productie.",
- "No apps found for \"{query}\"" : "Geen apps gevonden voor {query}",
- "An error occurred: {message}" : "Er heeft zich een fout voorgedaan: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lees de <a target=\"_blank\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratienotities en de php configuratie van je server, zeker bij gebruik van php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Je database draait niet met \"READ COMMITED\" transactie isolatie niveau. Dit kan problemen opleveren als er meerdere acties tegelijkertijd worden uitgevoerd.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Je server draait op Microsoft Windows. We adviseren je om een linux server te gebruiken voor een optimale gebruikerservaring.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandlocking is gedeactiveerd, dat zou kunnen leiden tot versiebeheerproblemen. Schakel 'filelocking enabled' in config.php in om deze problemen te voorkomen. Zie de <a target=\"_blank\" href=\"%s\">documentatie ↗</a> voor meer informatie.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a target=\"_blank\" href=\"%s\">installatiehandleiding ↗</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Versleuteling alleen garandeert geen beveiliging van het systeem. Lees de Nextcloud documentatie voor meer achtergronden over de werking van de crypto app en de relevante use cases.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Om te migreren naar een andere database moet u de commandoregel tool gebruiken: 'occ db:convert-type', of lees de <a target=\"_blank\" href=\"%s\">documentatie ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Deze app heeft geen minimum Nextcloud versie toegewezen gekregen. Dit wordt een fout in Nextcloud 11 en later.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Deze app heeft geen maximum Nextcloud versie toegewezen gekregen. Dit wordt een fout in Nextcloud 11 en later.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Als je dit project wilt ondersteunen\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help mee met ontwikkelen</a>\n\t\tof\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help andere gebruikers</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Ontwikkeld door de {communityopen}Nextcloud community{linkclose}, de {githubopen}broncode{linkclose} is gelicenseerd onder de {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Laatste inlog"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/nn_NO.js b/settings/l10n/nn_NO.js
index cef991514b1..a3715eaf4d8 100644
--- a/settings/l10n/nn_NO.js
+++ b/settings/l10n/nn_NO.js
@@ -10,12 +10,8 @@ OC.L10N.register(
"Email sent" : "E-post sendt",
"Invalid request" : "Ugyldig førespurnad",
"Email saved" : "E-postadresse lagra",
- "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
- "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s",
- "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s",
"Couldn't update app." : "Klarte ikkje oppdatera programmet.",
"All" : "Alle",
- "Please wait...." : "Ver venleg og vent …",
"Error while disabling app" : "Klarte ikkje å skru av programmet",
"Disable" : "Slå av",
"Enable" : "Slå på",
@@ -73,6 +69,10 @@ OC.L10N.register(
"set new password" : "lag nytt passord",
"Default" : "Standard",
"Language changed" : "Språk endra",
+ "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
+ "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s",
+ "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s",
+ "Please wait...." : "Ver venleg og vent …",
"Log" : "Logg",
"More" : "Meir",
"Less" : "Mindre",
diff --git a/settings/l10n/nn_NO.json b/settings/l10n/nn_NO.json
index 2872655fd16..940aa42c3b1 100644
--- a/settings/l10n/nn_NO.json
+++ b/settings/l10n/nn_NO.json
@@ -8,12 +8,8 @@
"Email sent" : "E-post sendt",
"Invalid request" : "Ugyldig førespurnad",
"Email saved" : "E-postadresse lagra",
- "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
- "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s",
- "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s",
"Couldn't update app." : "Klarte ikkje oppdatera programmet.",
"All" : "Alle",
- "Please wait...." : "Ver venleg og vent …",
"Error while disabling app" : "Klarte ikkje å skru av programmet",
"Disable" : "Slå av",
"Enable" : "Slå på",
@@ -71,6 +67,10 @@
"set new password" : "lag nytt passord",
"Default" : "Standard",
"Language changed" : "Språk endra",
+ "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa",
+ "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s",
+ "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s",
+ "Please wait...." : "Ver venleg og vent …",
"Log" : "Logg",
"More" : "Meir",
"Less" : "Mindre",
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index daeb2258589..b746aadd750 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -19,6 +19,7 @@ OC.L10N.register(
"Unable to add group." : "Nie można dodać grupy.",
"Unable to delete group." : "Nie można usunąć grupy.",
"test email settings" : "przetestuj ustawienia email",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Wystąpił błąd podczas wysyłania wiadomości e-mail. Proszę zmienić swoje ustawienia. (Error: %s)",
"Email sent" : "E-mail wysłany",
"You need to set your user email before being able to send test emails." : "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.",
"Invalid request" : "Nieprawidłowe żądanie",
@@ -27,17 +28,18 @@ OC.L10N.register(
"Unable to create user." : "Nie można utworzyć użytkownika.",
"Your %s account was created" : "Twoje konto %s zostało stworzone",
"Unable to delete user." : "Nie można usunąć użytkownika.",
+ "Settings saved" : "Ustawienia zachowane",
"Unable to change full name" : "Nie można zmienić pełnej nazwy",
+ "Unable to change email address" : "Nie można zmienić adresu e-mail",
"Your full name has been changed." : "Twoja pełna nazwa została zmieniona.",
"Forbidden" : "Zabronione",
"Invalid user" : "Nieprawidłowy użytkownik",
"Unable to change mail address" : "Nie można zmienić adresu email",
"Email saved" : "E-mail zapisany",
+ "Password confirmation is required" : "Wymagane jest potwierdzenie hasła",
"Couldn't remove app." : "Nie można usunąć aplikacji.",
- "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów",
- "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s",
- "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s",
"Couldn't update app." : "Nie można uaktualnić aplikacji.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
"Add trusted domain" : "Dodaj zaufaną domenę",
"Migration in progress. Please wait until the migration is finished" : "Trwa migracja. Proszę poczekać, aż migracja dobiegnie końca.",
"Migration started …" : "Migracja rozpoczęta...",
@@ -46,33 +48,43 @@ OC.L10N.register(
"Official" : "Oficjalny",
"All" : "Wszystkie",
"Update to %s" : "Uaktualnij do %s",
- "_You have %n app update pending_::_You have %n app updates pending_" : ["Masz %n oczekującą aktualizację aplikacji","Masz %n oczekujące aktualizacje aplikacji","Masz %n oczekujących aktualizacji aplikacji"],
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Masz %n oczekującą aktualizację aplikacji","Masz %n oczekujące aktualizacje aplikacji","Masz %n oczekujących aktualizacji aplikacji","Masz %n oczekujących aktualizacji aplikacji"],
"No apps found for your version" : "Nie znaleziono aplikacji dla twojej wersji",
- "Please wait...." : "Proszę czekać...",
+ "The app will be downloaded from the app store" : "Aplikacja zostanie pobrana z App Store",
"Error while disabling app" : "Błąd podczas wyłączania aplikacji",
"Disable" : "Wyłącz",
"Enable" : "Włącz",
"Error while enabling app" : "Błąd podczas włączania aplikacji",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Błąd: ta aplikacja nie może być włączona, ponieważ sprawia, że serwer jest niestabilny",
+ "Error: could not disable broken app" : "Błąd: nie można wyłączyć zepsutą aplikację",
+ "Error while disabling broken app" : "Błąd podczas wyłączania zepsutej aplikacji",
"Updating...." : "Aktualizacja w toku...",
"Error while updating app" : "Błąd podczas aktualizacji aplikacji",
"Updated" : "Zaktualizowano",
"Uninstalling ...." : "Odinstalowywanie....",
"Error while uninstalling app" : "Błąd przy odinstalowywaniu aplikacji",
"Uninstall" : "Odinstaluj",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Aplikacja została włączona i musi być aktualizowana. Zostaniesz przekierowany na stronę aktualizacji za 5 sekund.",
"App update" : "Aktualizacja aplikacji",
"Approved" : "Zatwierdzony",
"Experimental" : "Eksperymentalny",
+ "No apps found for {query}" : "Nie znaleziono aplikacji dla {query}",
+ "Allow filesystem access" : "Zezwalaj na dostęp do systemu plików",
"Disconnect" : "Odłącz",
+ "Revoke" : "Cofnij",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome dla Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "Klient iOS",
"Android Client" : "Klient Android",
"Sync client - {os}" : "Klient synchronizacji - {os}",
"This session" : "Ta sesja",
+ "Copy" : "Skopiuj",
"Copied!" : "Skopiowano!",
"Not supported!" : "Nieobsługiwany!",
"Press ⌘-C to copy." : "Wciśnij ⌘-C by skopiować.",
@@ -80,8 +92,17 @@ OC.L10N.register(
"Error while loading browser sessions and device tokens" : "Błąd podczas ładowania sesji przeglądarek i tokenów urządzeń",
"Error while creating device token" : "Błąd podczas tworzenia tokena urządzenia.",
"Error while deleting the token" : "Błąd podczas usuwania tokena.",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Wystąpił błąd. Proszę przesłać certyfikat PEM w kodowaniu ASCII.",
"Valid until {date}" : "Ważny do {date}",
"Delete" : "Usuń",
+ "Local" : "Lokalny",
+ "Private" : "Prywatny",
+ "Only visible to local users" : "Widoczne tylko dla użytkowników lokalnych",
+ "Only visible to you" : "Widoczne tylko dla Ciebie",
+ "Contacts" : "Kontakty",
+ "Visible to local users and to trusted servers" : "Widoczne dla lokalnych użytkowników i zaufanych serwerów",
+ "Public" : "Publiczny",
+ "Will be synced to a global and public address book" : "Będą zsynchronizowane z globalną i publiczną książką adresową",
"Select a profile picture" : "Wybierz zdjęcie profilu",
"Very weak password" : "Bardzo słabe hasło",
"Weak password" : "Słabe hasło",
@@ -97,9 +118,11 @@ OC.L10N.register(
"never" : "nigdy",
"deleted {userName}" : "usunięto {userName}",
"Add group" : "Dodaj grupę",
+ "Invalid quota value \"{val}\"" : "Nieprawidłowa wartość quota \"{val}\"",
"no group" : "brak grupy",
"Password successfully changed" : "Zmiana hasła udana.",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Zmiana hasła spowoduje utratę danych, ponieważ odzyskiwanie danych nie jest włączone dla tego użytkownika",
+ "Could not change the users email" : "Nie można zmienić adresu e-mail użytkowników",
"A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika",
"Error creating user: {message}" : "Błąd podczas tworzenia użytkownika: {message}",
"A valid password must be provided" : "Należy podać prawidłowe hasło",
@@ -135,10 +158,13 @@ OC.L10N.register(
"Send email" : "Wyślij email",
"Server-side encryption" : "Szyfrowanie po stronie serwera",
"Enable server-side encryption" : "Włącz szyfrowanie po stronie serwera",
+ "Please read carefully before activating server-side encryption: " : "Proszę przeczytać uważnie przed aktywowaniem szyfrowania po stronie serwera:",
"Be aware that encryption always increases the file size." : "Należy pamiętać, że szyfrowanie zawsze zwiększa rozmiar pliku.",
"This is the final warning: Do you really want to enable encryption?" : "To ostatnie ostrzeżenie: Czy na pewno chcesz włączyć szyfrowanie?",
"Enable encryption" : "Włącz szyfrowanie",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Moduł szyfrowania nie jest załadowany, należy włączyć moduł szyfrowania w menu aplikacji.",
"Select default encryption module:" : "Wybierz domyślny moduł szyfrujący:",
+ "Start migration" : "Rozpocznij migrację",
"Security & setup warnings" : "Ostrzeżenia bezpieczeństwa i konfiguracji",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Wygląda na to, że ustawienia PHP ucinają bloki wklejonych dokumentów. To sprawi, że niektóre wbudowane aplikacje będą niedostępne.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dzieje się tak prawdopodobnie przez cache lub akcelerator taki jak Zend OPcache lub eAccelerator.",
@@ -146,6 +172,8 @@ OC.L10N.register(
"System locale can not be set to a one which supports UTF-8." : "Ustawienia regionalne systemu nie można ustawić na jeden, który obsługuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "Oznacza to, że mogą być problemy z niektórymi znakami w nazwach plików.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Zalecamy instalację na Twoim systemie komponentów wymaganych do obsługi języków: %s",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Nie było możliwe do wykonania przez cron CLI. Pojawiły się następujące błędy techniczne:",
+ "All checks passed." : "Wszystkie testy przeszły poprawnie.",
"Cron" : "Cron",
"Last cron job execution: %s." : "Ostatnie wykonanie zadania przez cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Ostatnie wykonanie zadania przez cron: %s. Wydaje się być błędny.",
@@ -153,6 +181,7 @@ OC.L10N.register(
"Execute one task with each page loaded" : "Wykonuj jedno zadanie wraz z każdą wczytaną stroną",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php jest zarejestrowany w serwisie webcron do uruchamiania cron.php raz na 15 minut przez http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Użyj systemowej usługi cron do wywoływania cron.php co 15 minut.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "Cron.php musi być wykonywany przez użytkownika systemu \"%s\".",
"Version" : "Wersja",
"Sharing" : "Udostępnianie",
"Allow apps to use the Share API" : "Zezwalaj aplikacjom na korzystanie z API udostępniania",
@@ -170,6 +199,7 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Grupy te nadal będą mogli otrzymywać udostępnione udziały, ale nie do ich inicjowania.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Pozwól użytkownikowi na autouzupełnianie w oknie użytkownika. Jeśli ta opcja jest wyłączona, to pełna nazwa musi być wprowadzona.",
"Tips & tricks" : "Porady i wskazówki",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Jest to szczególnie zalecane w przypadku korzystania z desktopowego klienta do synchronizacji plików.",
"How to do backups" : "Jak zrobić kopie zapasowe",
"Advanced monitoring" : "Zaawansowane monitorowanie",
"Performance tuning" : "Podnoszenie wydajności",
@@ -177,6 +207,7 @@ OC.L10N.register(
"Theming" : "Motyw",
"Hardening and security guidance" : "Kierowanie i wzmacnianie bezpieczeństwa",
"Developer documentation" : "Dokumentacja dewelopera",
+ "by %s" : "przez %s",
"Documentation:" : "Dokumentacja:",
"User documentation" : "Dokumentacja użytkownika",
"Admin documentation" : "Dokumentacja Administratora",
@@ -185,9 +216,10 @@ OC.L10N.register(
"Show description …" : "Pokaż opis ...",
"Hide description …" : "Ukryj opis ...",
"This app has an update available." : "Ta aplikacja ma dostępną aktualizację.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ta aplikacja nie ma przypisanej minimalnej wersji Nextcloud. W przyszłości będzie to błąd.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ta aplikacja nie ma przypisanej maksymalnej wersji Nextcloud. W przyszłości będzie to błąd.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ta aplikacja nie może być zainstalowana, ponieważ nie są spełnione następujące zależności:",
"Enable only for specific groups" : "Włącz tylko dla określonych grup",
- "Uninstall App" : "Odinstaluj aplikację",
"Common Name" : "Nazwa CN",
"Valid until" : "Ważny do",
"Issued By" : "Wydany przez",
@@ -197,6 +229,7 @@ OC.L10N.register(
"Administrator documentation" : "Dokumentacja Administratora",
"Online documentation" : "Dokumentacja Online",
"Forum" : "Forum",
+ "Getting help" : "Otrzymać pomoc",
"Commercial support" : "Wsparcie komercyjne",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Używasz <strong>%s</strong> z <strong>%s</strong>",
"Profile picture" : "Zdjęcie profilu",
@@ -204,6 +237,7 @@ OC.L10N.register(
"Select from Files" : "Wybierz z Plików",
"Remove image" : "Usuń zdjęcie",
"png or jpg, max. 20 MB" : "png lub jpg, maks. 20 MB",
+ "Picture provided by original account" : "Zdjęcie dostarczone przez oryginalne konto",
"Cancel" : "Anuluj",
"Choose as profile picture" : "Wybierz zdjęcie profilu",
"Full name" : "Pełna nazwa",
@@ -212,6 +246,13 @@ OC.L10N.register(
"Your email address" : "Twój adres e-mail",
"No email address set" : "Brak adresu email",
"For password recovery and notifications" : "W celu odzyskania hasła i powiadomień",
+ "Phone number" : "Numer telefonu",
+ "Your phone number" : "Twój numer telefonu",
+ "Address" : "Adres",
+ "Your postal address" : "Twój kod pocztowy",
+ "Website" : "Strona WWW",
+ "Your website" : "Twoja strona WWW",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Jesteś członkiem następujących grup:",
"Password" : "Hasło",
"Current password" : "Bieżące hasło",
@@ -232,10 +273,14 @@ OC.L10N.register(
"App name" : "Nazwa aplikacji",
"Create new app password" : "Utwórz nowe hasło do aplikacji",
"Use the credentials below to configure your app or device." : "Skonfiguruj aplikację lub urządzenie, aby skorzystać z poniższego poświadczenia.",
+ "For security reasons this password will only be shown once." : "Ze względów bezpieczeństwa hasło zostanie pokazane tylko raz.",
"Username" : "Nazwa użytkownika",
"Done" : "Ukończono",
"Follow us on Google Plus!" : "Śledź nas na Google Plus!",
"Like our facebook page!" : "Polub naszą stronę na Facebook!",
+ "Subscribe to our twitter channel!" : "Zapisz się do naszego kanału na Twitterze!",
+ "Subscribe to our news feed!" : "Zapisz się do naszego kanału informacyjnego!",
+ "Subscribe to our newsletter!" : "Zapisz się do naszego newslettera!",
"Show storage location" : "Pokaż miejsce przechowywania",
"Show last log in" : "Pokaż ostatni login",
"Show user backend" : "Pokaż moduł użytkownika",
@@ -245,6 +290,7 @@ OC.L10N.register(
"Create" : "Utwórz",
"Admin Recovery Password" : "Hasło klucza odzyskiwania",
"Enter the recovery password in order to recover the users files during password change" : "Wpisz hasło odzyskiwania, aby odzyskać pliki użytkowników podczas zmiany hasła",
+ "Group name" : "Nazwa grupy",
"Everyone" : "Wszyscy",
"Admins" : "Administratorzy",
"Default quota" : "Domyślny udział",
@@ -253,6 +299,7 @@ OC.L10N.register(
"Group admin for" : "Grupa admin dla",
"Quota" : "Udział",
"Storage location" : "Lokalizacja magazynu",
+ "User backend" : "Moduł użytkownika",
"Last login" : "Ostatnio zalogowany",
"change full name" : "Zmień pełna nazwę",
"set new password" : "ustaw nowe hasło",
@@ -260,7 +307,11 @@ OC.L10N.register(
"Default" : "Domyślny",
"log-level out of allowed range" : "wartość log-level spoza dozwolonego zakresu",
"Language changed" : "Zmieniono język",
+ "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów",
+ "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s",
+ "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
+ "Please wait...." : "Proszę czekać...",
"iPhone" : "iPhone",
"add group" : "dodaj grupę",
"Everything (fatal issues, errors, warnings, info, debug)" : "Wszystko (Informacje, ostrzeżenia, błędy i poważne problemy, debug)",
@@ -276,6 +327,7 @@ OC.L10N.register(
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Plik log jest większy niż 100MB. Ściąganie może trochę potrwać!",
"Allow users to send mail notification for shared files" : "Zezwól użytkownikom na wysyłanie powiadomień email dla udostępnionych plików",
"Allow users to send mail notification for shared files to other users" : "Zezwalaj użytkownikom na wysyłanie powiadomień pocztą dla współdzielonych plików do innych użytkowników",
+ "Uninstall App" : "Odinstaluj aplikację",
"Enable experimental apps" : "Włącz eksperymentalne aplikacje",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Witaj,<br><br>informujemy, że teraz masz konto na %s .<br><br>Twoja nazwa użytkownika: %s<br>Dostęp pod adresem: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Witaj,\n\ninformujemy, że teraz masz konto na %s .\n\nTwoja nazwa użytkownika:: %s\nDostęp pod adresem: %s\n\n",
@@ -283,13 +335,9 @@ OC.L10N.register(
"Group" : "Grupa",
"Default Quota" : "Domyślny udział",
"Full Name" : "Pełna nazwa",
+ "Group Admin for" : "Grupa Admin dla",
"Storage Location" : "Lokalizacja magazynu",
- "Last Login" : "Ostatnio zalogowany",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Zewnętrzna zasoby dyskowe",
- "Updates" : "Aktualizacje",
- "An error occurred: {message}" : "Wystąpił błąd: {message}",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Twój serwer działa na platformie Windows. Zalecamy Linuxa dla optymalnych doświadczeń użytkownika."
+ "User Backend" : "Moduł użytkownika",
+ "Last Login" : "Ostatnio zalogowany"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index 035dcea7514..e060b28d5ed 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -17,6 +17,7 @@
"Unable to add group." : "Nie można dodać grupy.",
"Unable to delete group." : "Nie można usunąć grupy.",
"test email settings" : "przetestuj ustawienia email",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Wystąpił błąd podczas wysyłania wiadomości e-mail. Proszę zmienić swoje ustawienia. (Error: %s)",
"Email sent" : "E-mail wysłany",
"You need to set your user email before being able to send test emails." : "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.",
"Invalid request" : "Nieprawidłowe żądanie",
@@ -25,17 +26,18 @@
"Unable to create user." : "Nie można utworzyć użytkownika.",
"Your %s account was created" : "Twoje konto %s zostało stworzone",
"Unable to delete user." : "Nie można usunąć użytkownika.",
+ "Settings saved" : "Ustawienia zachowane",
"Unable to change full name" : "Nie można zmienić pełnej nazwy",
+ "Unable to change email address" : "Nie można zmienić adresu e-mail",
"Your full name has been changed." : "Twoja pełna nazwa została zmieniona.",
"Forbidden" : "Zabronione",
"Invalid user" : "Nieprawidłowy użytkownik",
"Unable to change mail address" : "Nie można zmienić adresu email",
"Email saved" : "E-mail zapisany",
+ "Password confirmation is required" : "Wymagane jest potwierdzenie hasła",
"Couldn't remove app." : "Nie można usunąć aplikacji.",
- "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów",
- "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s",
- "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s",
"Couldn't update app." : "Nie można uaktualnić aplikacji.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
"Add trusted domain" : "Dodaj zaufaną domenę",
"Migration in progress. Please wait until the migration is finished" : "Trwa migracja. Proszę poczekać, aż migracja dobiegnie końca.",
"Migration started …" : "Migracja rozpoczęta...",
@@ -44,33 +46,43 @@
"Official" : "Oficjalny",
"All" : "Wszystkie",
"Update to %s" : "Uaktualnij do %s",
- "_You have %n app update pending_::_You have %n app updates pending_" : ["Masz %n oczekującą aktualizację aplikacji","Masz %n oczekujące aktualizacje aplikacji","Masz %n oczekujących aktualizacji aplikacji"],
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Masz %n oczekującą aktualizację aplikacji","Masz %n oczekujące aktualizacje aplikacji","Masz %n oczekujących aktualizacji aplikacji","Masz %n oczekujących aktualizacji aplikacji"],
"No apps found for your version" : "Nie znaleziono aplikacji dla twojej wersji",
- "Please wait...." : "Proszę czekać...",
+ "The app will be downloaded from the app store" : "Aplikacja zostanie pobrana z App Store",
"Error while disabling app" : "Błąd podczas wyłączania aplikacji",
"Disable" : "Wyłącz",
"Enable" : "Włącz",
"Error while enabling app" : "Błąd podczas włączania aplikacji",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Błąd: ta aplikacja nie może być włączona, ponieważ sprawia, że serwer jest niestabilny",
+ "Error: could not disable broken app" : "Błąd: nie można wyłączyć zepsutą aplikację",
+ "Error while disabling broken app" : "Błąd podczas wyłączania zepsutej aplikacji",
"Updating...." : "Aktualizacja w toku...",
"Error while updating app" : "Błąd podczas aktualizacji aplikacji",
"Updated" : "Zaktualizowano",
"Uninstalling ...." : "Odinstalowywanie....",
"Error while uninstalling app" : "Błąd przy odinstalowywaniu aplikacji",
"Uninstall" : "Odinstaluj",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Aplikacja została włączona i musi być aktualizowana. Zostaniesz przekierowany na stronę aktualizacji za 5 sekund.",
"App update" : "Aktualizacja aplikacji",
"Approved" : "Zatwierdzony",
"Experimental" : "Eksperymentalny",
+ "No apps found for {query}" : "Nie znaleziono aplikacji dla {query}",
+ "Allow filesystem access" : "Zezwalaj na dostęp do systemu plików",
"Disconnect" : "Odłącz",
+ "Revoke" : "Cofnij",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome dla Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "Klient iOS",
"Android Client" : "Klient Android",
"Sync client - {os}" : "Klient synchronizacji - {os}",
"This session" : "Ta sesja",
+ "Copy" : "Skopiuj",
"Copied!" : "Skopiowano!",
"Not supported!" : "Nieobsługiwany!",
"Press ⌘-C to copy." : "Wciśnij ⌘-C by skopiować.",
@@ -78,8 +90,17 @@
"Error while loading browser sessions and device tokens" : "Błąd podczas ładowania sesji przeglądarek i tokenów urządzeń",
"Error while creating device token" : "Błąd podczas tworzenia tokena urządzenia.",
"Error while deleting the token" : "Błąd podczas usuwania tokena.",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Wystąpił błąd. Proszę przesłać certyfikat PEM w kodowaniu ASCII.",
"Valid until {date}" : "Ważny do {date}",
"Delete" : "Usuń",
+ "Local" : "Lokalny",
+ "Private" : "Prywatny",
+ "Only visible to local users" : "Widoczne tylko dla użytkowników lokalnych",
+ "Only visible to you" : "Widoczne tylko dla Ciebie",
+ "Contacts" : "Kontakty",
+ "Visible to local users and to trusted servers" : "Widoczne dla lokalnych użytkowników i zaufanych serwerów",
+ "Public" : "Publiczny",
+ "Will be synced to a global and public address book" : "Będą zsynchronizowane z globalną i publiczną książką adresową",
"Select a profile picture" : "Wybierz zdjęcie profilu",
"Very weak password" : "Bardzo słabe hasło",
"Weak password" : "Słabe hasło",
@@ -95,9 +116,11 @@
"never" : "nigdy",
"deleted {userName}" : "usunięto {userName}",
"Add group" : "Dodaj grupę",
+ "Invalid quota value \"{val}\"" : "Nieprawidłowa wartość quota \"{val}\"",
"no group" : "brak grupy",
"Password successfully changed" : "Zmiana hasła udana.",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Zmiana hasła spowoduje utratę danych, ponieważ odzyskiwanie danych nie jest włączone dla tego użytkownika",
+ "Could not change the users email" : "Nie można zmienić adresu e-mail użytkowników",
"A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika",
"Error creating user: {message}" : "Błąd podczas tworzenia użytkownika: {message}",
"A valid password must be provided" : "Należy podać prawidłowe hasło",
@@ -133,10 +156,13 @@
"Send email" : "Wyślij email",
"Server-side encryption" : "Szyfrowanie po stronie serwera",
"Enable server-side encryption" : "Włącz szyfrowanie po stronie serwera",
+ "Please read carefully before activating server-side encryption: " : "Proszę przeczytać uważnie przed aktywowaniem szyfrowania po stronie serwera:",
"Be aware that encryption always increases the file size." : "Należy pamiętać, że szyfrowanie zawsze zwiększa rozmiar pliku.",
"This is the final warning: Do you really want to enable encryption?" : "To ostatnie ostrzeżenie: Czy na pewno chcesz włączyć szyfrowanie?",
"Enable encryption" : "Włącz szyfrowanie",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Moduł szyfrowania nie jest załadowany, należy włączyć moduł szyfrowania w menu aplikacji.",
"Select default encryption module:" : "Wybierz domyślny moduł szyfrujący:",
+ "Start migration" : "Rozpocznij migrację",
"Security & setup warnings" : "Ostrzeżenia bezpieczeństwa i konfiguracji",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Wygląda na to, że ustawienia PHP ucinają bloki wklejonych dokumentów. To sprawi, że niektóre wbudowane aplikacje będą niedostępne.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dzieje się tak prawdopodobnie przez cache lub akcelerator taki jak Zend OPcache lub eAccelerator.",
@@ -144,6 +170,8 @@
"System locale can not be set to a one which supports UTF-8." : "Ustawienia regionalne systemu nie można ustawić na jeden, który obsługuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "Oznacza to, że mogą być problemy z niektórymi znakami w nazwach plików.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Zalecamy instalację na Twoim systemie komponentów wymaganych do obsługi języków: %s",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Nie było możliwe do wykonania przez cron CLI. Pojawiły się następujące błędy techniczne:",
+ "All checks passed." : "Wszystkie testy przeszły poprawnie.",
"Cron" : "Cron",
"Last cron job execution: %s." : "Ostatnie wykonanie zadania przez cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Ostatnie wykonanie zadania przez cron: %s. Wydaje się być błędny.",
@@ -151,6 +179,7 @@
"Execute one task with each page loaded" : "Wykonuj jedno zadanie wraz z każdą wczytaną stroną",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php jest zarejestrowany w serwisie webcron do uruchamiania cron.php raz na 15 minut przez http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Użyj systemowej usługi cron do wywoływania cron.php co 15 minut.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "Cron.php musi być wykonywany przez użytkownika systemu \"%s\".",
"Version" : "Wersja",
"Sharing" : "Udostępnianie",
"Allow apps to use the Share API" : "Zezwalaj aplikacjom na korzystanie z API udostępniania",
@@ -168,6 +197,7 @@
"These groups will still be able to receive shares, but not to initiate them." : "Grupy te nadal będą mogli otrzymywać udostępnione udziały, ale nie do ich inicjowania.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Pozwól użytkownikowi na autouzupełnianie w oknie użytkownika. Jeśli ta opcja jest wyłączona, to pełna nazwa musi być wprowadzona.",
"Tips & tricks" : "Porady i wskazówki",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Jest to szczególnie zalecane w przypadku korzystania z desktopowego klienta do synchronizacji plików.",
"How to do backups" : "Jak zrobić kopie zapasowe",
"Advanced monitoring" : "Zaawansowane monitorowanie",
"Performance tuning" : "Podnoszenie wydajności",
@@ -175,6 +205,7 @@
"Theming" : "Motyw",
"Hardening and security guidance" : "Kierowanie i wzmacnianie bezpieczeństwa",
"Developer documentation" : "Dokumentacja dewelopera",
+ "by %s" : "przez %s",
"Documentation:" : "Dokumentacja:",
"User documentation" : "Dokumentacja użytkownika",
"Admin documentation" : "Dokumentacja Administratora",
@@ -183,9 +214,10 @@
"Show description …" : "Pokaż opis ...",
"Hide description …" : "Ukryj opis ...",
"This app has an update available." : "Ta aplikacja ma dostępną aktualizację.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ta aplikacja nie ma przypisanej minimalnej wersji Nextcloud. W przyszłości będzie to błąd.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ta aplikacja nie ma przypisanej maksymalnej wersji Nextcloud. W przyszłości będzie to błąd.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ta aplikacja nie może być zainstalowana, ponieważ nie są spełnione następujące zależności:",
"Enable only for specific groups" : "Włącz tylko dla określonych grup",
- "Uninstall App" : "Odinstaluj aplikację",
"Common Name" : "Nazwa CN",
"Valid until" : "Ważny do",
"Issued By" : "Wydany przez",
@@ -195,6 +227,7 @@
"Administrator documentation" : "Dokumentacja Administratora",
"Online documentation" : "Dokumentacja Online",
"Forum" : "Forum",
+ "Getting help" : "Otrzymać pomoc",
"Commercial support" : "Wsparcie komercyjne",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Używasz <strong>%s</strong> z <strong>%s</strong>",
"Profile picture" : "Zdjęcie profilu",
@@ -202,6 +235,7 @@
"Select from Files" : "Wybierz z Plików",
"Remove image" : "Usuń zdjęcie",
"png or jpg, max. 20 MB" : "png lub jpg, maks. 20 MB",
+ "Picture provided by original account" : "Zdjęcie dostarczone przez oryginalne konto",
"Cancel" : "Anuluj",
"Choose as profile picture" : "Wybierz zdjęcie profilu",
"Full name" : "Pełna nazwa",
@@ -210,6 +244,13 @@
"Your email address" : "Twój adres e-mail",
"No email address set" : "Brak adresu email",
"For password recovery and notifications" : "W celu odzyskania hasła i powiadomień",
+ "Phone number" : "Numer telefonu",
+ "Your phone number" : "Twój numer telefonu",
+ "Address" : "Adres",
+ "Your postal address" : "Twój kod pocztowy",
+ "Website" : "Strona WWW",
+ "Your website" : "Twoja strona WWW",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Jesteś członkiem następujących grup:",
"Password" : "Hasło",
"Current password" : "Bieżące hasło",
@@ -230,10 +271,14 @@
"App name" : "Nazwa aplikacji",
"Create new app password" : "Utwórz nowe hasło do aplikacji",
"Use the credentials below to configure your app or device." : "Skonfiguruj aplikację lub urządzenie, aby skorzystać z poniższego poświadczenia.",
+ "For security reasons this password will only be shown once." : "Ze względów bezpieczeństwa hasło zostanie pokazane tylko raz.",
"Username" : "Nazwa użytkownika",
"Done" : "Ukończono",
"Follow us on Google Plus!" : "Śledź nas na Google Plus!",
"Like our facebook page!" : "Polub naszą stronę na Facebook!",
+ "Subscribe to our twitter channel!" : "Zapisz się do naszego kanału na Twitterze!",
+ "Subscribe to our news feed!" : "Zapisz się do naszego kanału informacyjnego!",
+ "Subscribe to our newsletter!" : "Zapisz się do naszego newslettera!",
"Show storage location" : "Pokaż miejsce przechowywania",
"Show last log in" : "Pokaż ostatni login",
"Show user backend" : "Pokaż moduł użytkownika",
@@ -243,6 +288,7 @@
"Create" : "Utwórz",
"Admin Recovery Password" : "Hasło klucza odzyskiwania",
"Enter the recovery password in order to recover the users files during password change" : "Wpisz hasło odzyskiwania, aby odzyskać pliki użytkowników podczas zmiany hasła",
+ "Group name" : "Nazwa grupy",
"Everyone" : "Wszyscy",
"Admins" : "Administratorzy",
"Default quota" : "Domyślny udział",
@@ -251,6 +297,7 @@
"Group admin for" : "Grupa admin dla",
"Quota" : "Udział",
"Storage location" : "Lokalizacja magazynu",
+ "User backend" : "Moduł użytkownika",
"Last login" : "Ostatnio zalogowany",
"change full name" : "Zmień pełna nazwę",
"set new password" : "ustaw nowe hasło",
@@ -258,7 +305,11 @@
"Default" : "Domyślny",
"log-level out of allowed range" : "wartość log-level spoza dozwolonego zakresu",
"Language changed" : "Zmieniono język",
+ "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów",
+ "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s",
+ "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
+ "Please wait...." : "Proszę czekać...",
"iPhone" : "iPhone",
"add group" : "dodaj grupę",
"Everything (fatal issues, errors, warnings, info, debug)" : "Wszystko (Informacje, ostrzeżenia, błędy i poważne problemy, debug)",
@@ -274,6 +325,7 @@
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Plik log jest większy niż 100MB. Ściąganie może trochę potrwać!",
"Allow users to send mail notification for shared files" : "Zezwól użytkownikom na wysyłanie powiadomień email dla udostępnionych plików",
"Allow users to send mail notification for shared files to other users" : "Zezwalaj użytkownikom na wysyłanie powiadomień pocztą dla współdzielonych plików do innych użytkowników",
+ "Uninstall App" : "Odinstaluj aplikację",
"Enable experimental apps" : "Włącz eksperymentalne aplikacje",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Witaj,<br><br>informujemy, że teraz masz konto na %s .<br><br>Twoja nazwa użytkownika: %s<br>Dostęp pod adresem: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Witaj,\n\ninformujemy, że teraz masz konto na %s .\n\nTwoja nazwa użytkownika:: %s\nDostęp pod adresem: %s\n\n",
@@ -281,13 +333,9 @@
"Group" : "Grupa",
"Default Quota" : "Domyślny udział",
"Full Name" : "Pełna nazwa",
+ "Group Admin for" : "Grupa Admin dla",
"Storage Location" : "Lokalizacja magazynu",
- "Last Login" : "Ostatnio zalogowany",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Zewnętrzna zasoby dyskowe",
- "Updates" : "Aktualizacje",
- "An error occurred: {message}" : "Wystąpił błąd: {message}",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Twój serwer działa na platformie Windows. Zalecamy Linuxa dla optymalnych doświadczeń użytkownika."
+ "User Backend" : "Moduł użytkownika",
+ "Last Login" : "Ostatnio zalogowany"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index ce8433c25b7..e7a42c40add 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Você precisa configurar seu e-mail de usuário antes de ser capaz de enviar e-mails de teste.",
"Invalid request" : "Pedido inválido",
"Invalid mail address" : "Endereço de e-mail inválido",
+ "No valid group selected" : "Nenhum grupo válido foi selecionado",
"A user with that name already exists." : "Um usuário com esse nome já existe.",
"Unable to create user." : "Não é possível criar usuário.",
"Your %s account was created" : "Sua conta %s foi criada",
@@ -39,9 +40,6 @@ OC.L10N.register(
"Email saved" : "E-mail salvo",
"Password confirmation is required" : "A confirmação da senha é necessária",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
- "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
- "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
- "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s",
"Couldn't update app." : "Não foi possível atualizar a app.",
"Are you really sure you want add {domain} as trusted domain?" : "Tem certeza que deseja adicionar {domain} como um domínio confiável",
"Add trusted domain" : "Adicionar domínio confiável",
@@ -58,7 +56,7 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplicativos oficiais são desenvolvidos pela comunidade e dentro da comunidade. Eles oferecem funcionalidades centrais e estão prontos para uso em produção.",
"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." : "Aplicativos aprovados são desenvolvidos pelos desenvolvedores confiáveis e passaram por uma verificação de segurança superficial. Eles são ativamente mantidos em um repositório de código aberto e seus mantenedores consideram que eles para sejam estáveis para um casual uso normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Este aplicativo não foi verificado para as questões de segurança e é novo ou conhecido por ser instável. Instale por seu próprio risco.",
- "Please wait...." : "Por favor, aguarde...",
+ "Enabling app …" : "Ativando app ...",
"Error while disabling app" : "Erro enquanto desabilitava o aplicativo",
"Disable" : "Desabilitar",
"Enable" : "Habilitar",
@@ -125,6 +123,8 @@ OC.L10N.register(
"undo" : "desfazer",
"never" : "nunca",
"deleted {userName}" : "eliminado {userName}",
+ "Unable to add user to group {group}" : "Não é possível adicionar usuário ao grupo {group}",
+ "Unable to remove user from group {group}" : "Não é possível remover usuário do grupo {group}",
"Add group" : "Adicionar grupo",
"Invalid quota value \"{val}\"" : "Valor da quota inválido \"{val}\"",
"no group" : "nenhum grupo",
@@ -247,7 +247,7 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Este aplicativo não possui versão máxima atribuida para uso no Nextcloud. Isto poderá se converter em um erro no futuro.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Este aplicativo não pode ser instalado porque as seguintes dependências não forão cumpridas:",
"Enable only for specific groups" : "Ativar apenas para grupos específicos",
- "Uninstall App" : "Desinstalar Aplicativo",
+ "Uninstall app" : "Desinstalando app",
"SSL Root Certificates" : "Certificados Raiz SSL",
"Common Name" : "Nome",
"Valid until" : "Válido até",
@@ -341,7 +341,11 @@ OC.L10N.register(
"Default" : "Padrão",
"log-level out of allowed range" : "log-nível acima do permitido",
"Language changed" : "Idioma alterado",
+ "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
+ "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
+ "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Deseja realemente adicionar \"{domain}\" como domínio confiável?",
+ "Please wait...." : "Por favor, aguarde...",
"iPhone" : "iPhone",
"add group" : "adicionar grupo",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)",
@@ -361,6 +365,7 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.",
"Experimental applications ahead" : "Aplicações experimentais à frente",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplicativos experimentais não são marcados por questões de segurança, por serem novos ou conhecidos como instáveis e sob forte desenvolvimento. Instalá-los pode causar perda de dados ou falhas de segurança.",
+ "Uninstall App" : "Desinstalar Aplicativo",
"Enable experimental apps" : "Habilitar aplicativos experimentais",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n",
@@ -372,24 +377,6 @@ OC.L10N.register(
"Group Admin for" : "Grupo Admin para",
"Storage Location" : "Local de Armazenamento",
"User Backend" : "Administrador do Usuário",
- "Last Login" : "Último Login",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Armazenamento externo",
- "Updates" : "Atualizações",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Aplicativos oficiais são desenvolvidos por e dentro da comunidade Nextcloud. Eles oferecem funcionalidade central para Nextcloud e está pronto para uso em produção.",
- "No apps found for \"{query}\"" : "Nenhum aplicativo encontrado para \"{query}\"",
- "An error occurred: {message}" : "Ocorreu um erro: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique o <a target=\"_blank\" href=\"%s\">documento de instalação ↗</a> para as notas de configuração do PHP e a configuração do PHP do seu servidor, especialmente ao usar php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Seu banco de dados não é executado com nível de isolamento de transação \"READ COMMITTED\" . Isto pode causar problemas quando várias ações são executadas em paralelo.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "O servidor está em execução no Microsoft Windows. É altamente recomendável Linux para uma experiência ideal de para o usuário.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "O bloqueio de arquivos transacionais está desativado, isso pode levar a problemas com as condições de execução. Ative 'file locking.enabled' em config.php para evitar esses problemas. Veja a <a target=\"_blank\" href=\"%s\">documentação ↗</a> para mais informações.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor verifique o <a target=\"_blank\" href=\"%s\">guia de instalação ↗</a>, e verifique qualquer erro ou advertência no <a href=\"#log-section\">log</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Criptografia por si só não garante a segurança do sistema. Por favor consulte a documentação Nextcloud para obter mais informações sobre como o aplicativo de criptografia funciona, e os casos de uso suportados.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'occ db:convert-type', ou consulte a <a target=\"_blank\" href=\"%s\">documentação ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Este aplicativo não tem nenhuma versão mínima atribuída ao Nextcloud. Isto será um erro no Nextcloud 11 e posterior.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Este aplicativo não tem nenhuma versão máxima atribuída ao Nextcloud. Isto será um erro no Nextcloud 11 e posterior.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Se quiser dar suporte ao projeto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">junte-se ao desenvolvimento</a>\n\t\tou\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ajude outros usuários</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Desenvolvido pela {communityopen}comunidade Nextcloud {linkclose}, e {githubopen}source code{linkclose} licenciado sob {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Último Login"
},
"nplurals=2; plural=(n > 1);");
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index b828e7559b8..86d9c215b5c 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -23,6 +23,7 @@
"You need to set your user email before being able to send test emails." : "Você precisa configurar seu e-mail de usuário antes de ser capaz de enviar e-mails de teste.",
"Invalid request" : "Pedido inválido",
"Invalid mail address" : "Endereço de e-mail inválido",
+ "No valid group selected" : "Nenhum grupo válido foi selecionado",
"A user with that name already exists." : "Um usuário com esse nome já existe.",
"Unable to create user." : "Não é possível criar usuário.",
"Your %s account was created" : "Sua conta %s foi criada",
@@ -37,9 +38,6 @@
"Email saved" : "E-mail salvo",
"Password confirmation is required" : "A confirmação da senha é necessária",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
- "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
- "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
- "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s",
"Couldn't update app." : "Não foi possível atualizar a app.",
"Are you really sure you want add {domain} as trusted domain?" : "Tem certeza que deseja adicionar {domain} como um domínio confiável",
"Add trusted domain" : "Adicionar domínio confiável",
@@ -56,7 +54,7 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplicativos oficiais são desenvolvidos pela comunidade e dentro da comunidade. Eles oferecem funcionalidades centrais e estão prontos para uso em produção.",
"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." : "Aplicativos aprovados são desenvolvidos pelos desenvolvedores confiáveis e passaram por uma verificação de segurança superficial. Eles são ativamente mantidos em um repositório de código aberto e seus mantenedores consideram que eles para sejam estáveis para um casual uso normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Este aplicativo não foi verificado para as questões de segurança e é novo ou conhecido por ser instável. Instale por seu próprio risco.",
- "Please wait...." : "Por favor, aguarde...",
+ "Enabling app …" : "Ativando app ...",
"Error while disabling app" : "Erro enquanto desabilitava o aplicativo",
"Disable" : "Desabilitar",
"Enable" : "Habilitar",
@@ -123,6 +121,8 @@
"undo" : "desfazer",
"never" : "nunca",
"deleted {userName}" : "eliminado {userName}",
+ "Unable to add user to group {group}" : "Não é possível adicionar usuário ao grupo {group}",
+ "Unable to remove user from group {group}" : "Não é possível remover usuário do grupo {group}",
"Add group" : "Adicionar grupo",
"Invalid quota value \"{val}\"" : "Valor da quota inválido \"{val}\"",
"no group" : "nenhum grupo",
@@ -245,7 +245,7 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Este aplicativo não possui versão máxima atribuida para uso no Nextcloud. Isto poderá se converter em um erro no futuro.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Este aplicativo não pode ser instalado porque as seguintes dependências não forão cumpridas:",
"Enable only for specific groups" : "Ativar apenas para grupos específicos",
- "Uninstall App" : "Desinstalar Aplicativo",
+ "Uninstall app" : "Desinstalando app",
"SSL Root Certificates" : "Certificados Raiz SSL",
"Common Name" : "Nome",
"Valid until" : "Válido até",
@@ -339,7 +339,11 @@
"Default" : "Padrão",
"log-level out of allowed range" : "log-nível acima do permitido",
"Language changed" : "Idioma alterado",
+ "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
+ "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
+ "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Deseja realemente adicionar \"{domain}\" como domínio confiável?",
+ "Please wait...." : "Por favor, aguarde...",
"iPhone" : "iPhone",
"add group" : "adicionar grupo",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)",
@@ -359,6 +363,7 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.",
"Experimental applications ahead" : "Aplicações experimentais à frente",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplicativos experimentais não são marcados por questões de segurança, por serem novos ou conhecidos como instáveis e sob forte desenvolvimento. Instalá-los pode causar perda de dados ou falhas de segurança.",
+ "Uninstall App" : "Desinstalar Aplicativo",
"Enable experimental apps" : "Habilitar aplicativos experimentais",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n",
@@ -370,24 +375,6 @@
"Group Admin for" : "Grupo Admin para",
"Storage Location" : "Local de Armazenamento",
"User Backend" : "Administrador do Usuário",
- "Last Login" : "Último Login",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Armazenamento externo",
- "Updates" : "Atualizações",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Aplicativos oficiais são desenvolvidos por e dentro da comunidade Nextcloud. Eles oferecem funcionalidade central para Nextcloud e está pronto para uso em produção.",
- "No apps found for \"{query}\"" : "Nenhum aplicativo encontrado para \"{query}\"",
- "An error occurred: {message}" : "Ocorreu um erro: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique o <a target=\"_blank\" href=\"%s\">documento de instalação ↗</a> para as notas de configuração do PHP e a configuração do PHP do seu servidor, especialmente ao usar php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Seu banco de dados não é executado com nível de isolamento de transação \"READ COMMITTED\" . Isto pode causar problemas quando várias ações são executadas em paralelo.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "O servidor está em execução no Microsoft Windows. É altamente recomendável Linux para uma experiência ideal de para o usuário.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "O bloqueio de arquivos transacionais está desativado, isso pode levar a problemas com as condições de execução. Ative 'file locking.enabled' em config.php para evitar esses problemas. Veja a <a target=\"_blank\" href=\"%s\">documentação ↗</a> para mais informações.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor verifique o <a target=\"_blank\" href=\"%s\">guia de instalação ↗</a>, e verifique qualquer erro ou advertência no <a href=\"#log-section\">log</a>.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Criptografia por si só não garante a segurança do sistema. Por favor consulte a documentação Nextcloud para obter mais informações sobre como o aplicativo de criptografia funciona, e os casos de uso suportados.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'occ db:convert-type', ou consulte a <a target=\"_blank\" href=\"%s\">documentação ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Este aplicativo não tem nenhuma versão mínima atribuída ao Nextcloud. Isto será um erro no Nextcloud 11 e posterior.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Este aplicativo não tem nenhuma versão máxima atribuída ao Nextcloud. Isto será um erro no Nextcloud 11 e posterior.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Se quiser dar suporte ao projeto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">junte-se ao desenvolvimento</a>\n\t\tou\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ajude outros usuários</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Desenvolvido pela {communityopen}comunidade Nextcloud {linkclose}, e {githubopen}source code{linkclose} licenciado sob {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Último Login"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index 680dee23011..3662b709bc9 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Não foi possível alterar o teu endereço de email",
"Email saved" : "E-mail guardado",
"Couldn't remove app." : "Não foi possível remover a aplicação.",
- "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
- "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
- "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
"Couldn't update app." : "Não foi possível atualizar a app.",
"Add trusted domain" : "Adicionar domínio confiável ",
"Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor, aguarde até que a mesma esteja concluída..",
@@ -52,7 +49,6 @@ OC.L10N.register(
"The app will be downloaded from the app store" : "A aplicação será descarregada da loja de aplicações",
"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." : "As aplicações aprovadas são desenvolvidas por developers de confiança e passaram numa verificação de segurança. São mantidas ativamente num repositório de código aberto e quem as mantém considera-as estáveis para uso casual a normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Esta aplicação não foi verificada por problemas de segurança e é nova ou conhecida por ser instável. Instale-a por sua conta e risco.",
- "Please wait...." : "Por favor, aguarde...",
"Error while disabling app" : "Ocorreu um erro enquanto desativava a app",
"Disable" : "Desativar",
"Enable" : "Ativar",
@@ -194,7 +190,6 @@ OC.L10N.register(
"This app has an update available." : "Esta aplicação tem uma atualização disponível.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicação não pode ser instalada porque as seguintes dependências não podem ser realizadas:",
"Enable only for specific groups" : "Activar só para grupos específicos",
- "Uninstall App" : "Desinstalar aplicação",
"SSL Root Certificates" : "Certificados SSL Root",
"Common Name" : "Nome Comum",
"Valid until" : "Válido até",
@@ -256,7 +251,11 @@ OC.L10N.register(
"Default" : "Padrão",
"log-level out of allowed range" : "log-level fora do alcance permitido",
"Language changed" : "Idioma alterado",
+ "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
+ "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
+ "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
+ "Please wait...." : "Por favor, aguarde...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)",
"Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais",
"Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais",
@@ -274,14 +273,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "O uso de SQLite é desencorajado especialmente se estiver a pensar em dar uso ao cliente desktop para sincronizar os seus ficheiros no seu computador.",
"Experimental applications ahead" : "Aplicações experimentais de futuro",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "As apps experimentais não estão selecionadas para problemas de segurança, nova ou conhecida como instável e em forte desenvolvimento. Ao instalá-las pode causar a perda de dados ou quebra de segurança.",
+ "Uninstall App" : "Desinstalar aplicação",
"Enable experimental apps" : "Ativar apps experimentais",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>apenas para informar que você tem uma conta %s.<br><br>O seu nome de utilizador: %s<br>Acesse à sua conta: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\napenas para informar que você tem uma conta %s.\n\nO seu nome de utilizador: %s\nAcesse à sua conta: %s\n\n",
- "Group" : "Grupo",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Armazenamento Externo",
- "Updates" : "Atualizações",
- "An error occurred: {message}" : "Ocorreu um erro: {message}"
+ "Group" : "Grupo"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index 0deefe93119..28f83d064dd 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Não foi possível alterar o teu endereço de email",
"Email saved" : "E-mail guardado",
"Couldn't remove app." : "Não foi possível remover a aplicação.",
- "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
- "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
- "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
"Couldn't update app." : "Não foi possível atualizar a app.",
"Add trusted domain" : "Adicionar domínio confiável ",
"Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor, aguarde até que a mesma esteja concluída..",
@@ -50,7 +47,6 @@
"The app will be downloaded from the app store" : "A aplicação será descarregada da loja de aplicações",
"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." : "As aplicações aprovadas são desenvolvidas por developers de confiança e passaram numa verificação de segurança. São mantidas ativamente num repositório de código aberto e quem as mantém considera-as estáveis para uso casual a normal.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Esta aplicação não foi verificada por problemas de segurança e é nova ou conhecida por ser instável. Instale-a por sua conta e risco.",
- "Please wait...." : "Por favor, aguarde...",
"Error while disabling app" : "Ocorreu um erro enquanto desativava a app",
"Disable" : "Desativar",
"Enable" : "Ativar",
@@ -192,7 +188,6 @@
"This app has an update available." : "Esta aplicação tem uma atualização disponível.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicação não pode ser instalada porque as seguintes dependências não podem ser realizadas:",
"Enable only for specific groups" : "Activar só para grupos específicos",
- "Uninstall App" : "Desinstalar aplicação",
"SSL Root Certificates" : "Certificados SSL Root",
"Common Name" : "Nome Comum",
"Valid until" : "Válido até",
@@ -254,7 +249,11 @@
"Default" : "Padrão",
"log-level out of allowed range" : "log-level fora do alcance permitido",
"Language changed" : "Idioma alterado",
+ "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
+ "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
+ "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
+ "Please wait...." : "Por favor, aguarde...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)",
"Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais",
"Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais",
@@ -272,14 +271,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "O uso de SQLite é desencorajado especialmente se estiver a pensar em dar uso ao cliente desktop para sincronizar os seus ficheiros no seu computador.",
"Experimental applications ahead" : "Aplicações experimentais de futuro",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "As apps experimentais não estão selecionadas para problemas de segurança, nova ou conhecida como instável e em forte desenvolvimento. Ao instalá-las pode causar a perda de dados ou quebra de segurança.",
+ "Uninstall App" : "Desinstalar aplicação",
"Enable experimental apps" : "Ativar apps experimentais",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>apenas para informar que você tem uma conta %s.<br><br>O seu nome de utilizador: %s<br>Acesse à sua conta: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\napenas para informar que você tem uma conta %s.\n\nO seu nome de utilizador: %s\nAcesse à sua conta: %s\n\n",
- "Group" : "Grupo",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Armazenamento Externo",
- "Updates" : "Atualizações",
- "An error occurred: {message}" : "Ocorreu um erro: {message}"
+ "Group" : "Grupo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js
index 14ca21c54e6..d6a2d997686 100644
--- a/settings/l10n/ro.js
+++ b/settings/l10n/ro.js
@@ -32,9 +32,6 @@ OC.L10N.register(
"Unable to change mail address" : "Nu s-a putut schimba adresa email",
"Email saved" : "E-mail salvat",
"Couldn't remove app." : "Nu s-a putut înlătura aplicația.",
- "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ",
- "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s",
- "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
"Couldn't update app." : "Aplicaţia nu s-a putut actualiza.",
"Add trusted domain" : "Adaugă domeniu de încredere",
"Migration in progress. Please wait until the migration is finished" : "Migrare în progres. Așteaptă până când migrarea este finalizată",
@@ -45,7 +42,6 @@ OC.L10N.register(
"_You have %n app update pending_::_You have %n app updates pending_" : ["Ai %n actualizare de aplicație în așteptare","Ai %n actualizări de aplicație în așteptare","Ai %n actualizări de aplicație în așteptare"],
"No apps found for your version" : "Nu au fost găsite aplicații pentru versiunea ta",
"The app will be downloaded from the app store" : "Aplicația va fi descărcată din magazin",
- "Please wait...." : "Aşteptaţi vă rog....",
"Error while disabling app" : "Eroare în timpul dezactivării aplicației",
"Disable" : "Dezactivați",
"Enable" : "Activare",
@@ -145,7 +141,6 @@ OC.L10N.register(
"Hide description …" : "Ascunde descriere ...",
"This app has an update available." : "Este disponibilă o actualizare pentru această aplicație.",
"Enable only for specific groups" : "Activează doar pentru grupuri specifice",
- "Uninstall App" : "Dezinstalează aplicația",
"SSL Root Certificates" : "Certificate SSL rădăcină",
"Common Name" : "Nume comun",
"Valid until" : "Valabil până la",
@@ -190,6 +185,10 @@ OC.L10N.register(
"Default" : "Implicită",
"log-level out of allowed range" : "NIvelul de logare este în afara plajei admise",
"Language changed" : "Limba a fost schimbată",
+ "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ",
+ "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s",
+ "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
+ "Please wait...." : "Aşteptaţi vă rog....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (erori fatale, erori, avertizări, informări, depanare)",
"Info, warnings, errors and fatal issues" : "Informări, avertizări, erori și erori fatale",
"Warnings, errors and fatal issues" : "Avertizări, erori și erori fatale",
@@ -204,11 +203,8 @@ OC.L10N.register(
"Allow users to send mail notification for shared files" : "Permite utilizatorilor sa expedieze notificări prin e-mail pentru dosarele comune",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite e folosit ca o bază de date. Pentru instalări mari recomandăm folosirea unei alte baze de date.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "În special atunci când este folosit clientul desktop pentru sincronizarea fișierelor, utilizarea SQLite este nerecomandată.",
+ "Uninstall App" : "Dezinstalează aplicația",
"Enable experimental apps" : "Activează aplicațiile experimentale",
- "Group" : "Grup",
- "Redis" : "Redis",
- "External Storage" : "Stocare externă",
- "Updates" : "Actualizări",
- "An error occurred: {message}" : "A apărut o eroare: {message}"
+ "Group" : "Grup"
},
"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");
diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json
index a0ede124ba2..3edcf42290f 100644
--- a/settings/l10n/ro.json
+++ b/settings/l10n/ro.json
@@ -30,9 +30,6 @@
"Unable to change mail address" : "Nu s-a putut schimba adresa email",
"Email saved" : "E-mail salvat",
"Couldn't remove app." : "Nu s-a putut înlătura aplicația.",
- "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ",
- "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s",
- "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
"Couldn't update app." : "Aplicaţia nu s-a putut actualiza.",
"Add trusted domain" : "Adaugă domeniu de încredere",
"Migration in progress. Please wait until the migration is finished" : "Migrare în progres. Așteaptă până când migrarea este finalizată",
@@ -43,7 +40,6 @@
"_You have %n app update pending_::_You have %n app updates pending_" : ["Ai %n actualizare de aplicație în așteptare","Ai %n actualizări de aplicație în așteptare","Ai %n actualizări de aplicație în așteptare"],
"No apps found for your version" : "Nu au fost găsite aplicații pentru versiunea ta",
"The app will be downloaded from the app store" : "Aplicația va fi descărcată din magazin",
- "Please wait...." : "Aşteptaţi vă rog....",
"Error while disabling app" : "Eroare în timpul dezactivării aplicației",
"Disable" : "Dezactivați",
"Enable" : "Activare",
@@ -143,7 +139,6 @@
"Hide description …" : "Ascunde descriere ...",
"This app has an update available." : "Este disponibilă o actualizare pentru această aplicație.",
"Enable only for specific groups" : "Activează doar pentru grupuri specifice",
- "Uninstall App" : "Dezinstalează aplicația",
"SSL Root Certificates" : "Certificate SSL rădăcină",
"Common Name" : "Nume comun",
"Valid until" : "Valabil până la",
@@ -188,6 +183,10 @@
"Default" : "Implicită",
"log-level out of allowed range" : "NIvelul de logare este în afara plajei admise",
"Language changed" : "Limba a fost schimbată",
+ "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul adminnistrativ",
+ "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul în grupul %s",
+ "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s",
+ "Please wait...." : "Aşteptaţi vă rog....",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (erori fatale, erori, avertizări, informări, depanare)",
"Info, warnings, errors and fatal issues" : "Informări, avertizări, erori și erori fatale",
"Warnings, errors and fatal issues" : "Avertizări, erori și erori fatale",
@@ -202,11 +201,8 @@
"Allow users to send mail notification for shared files" : "Permite utilizatorilor sa expedieze notificări prin e-mail pentru dosarele comune",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite e folosit ca o bază de date. Pentru instalări mari recomandăm folosirea unei alte baze de date.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "În special atunci când este folosit clientul desktop pentru sincronizarea fișierelor, utilizarea SQLite este nerecomandată.",
+ "Uninstall App" : "Dezinstalează aplicația",
"Enable experimental apps" : "Activează aplicațiile experimentale",
- "Group" : "Grup",
- "Redis" : "Redis",
- "External Storage" : "Stocare externă",
- "Updates" : "Actualizări",
- "An error occurred: {message}" : "A apărut o eroare: {message}"
+ "Group" : "Grup"
},"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/settings/l10n/ru.js b/settings/l10n/ru.js
index fc6a289e9a2..6c5ad892fda 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -22,24 +22,26 @@ OC.L10N.register(
"test email settings" : "проверить настройки почты",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Во время отправки письма произошла ошибка. Пожалуйста проверьте настройки. (Ошибка: %s)",
"Email sent" : "Письмо отправлено",
- "You need to set your user email before being able to send test emails." : "Вы должны настроить свой адрес электронной почты прежде чем отправлять тестовые сообщения.",
+ "You need to set your user email before being able to send test emails." : "Вы должны настроить ваш собственный адрес электронной почты прежде чем отправлять тестовые сообщения.",
"Invalid request" : "Неправильный запрос",
"Invalid mail address" : "Некорректный адрес электронной почты",
+ "No valid group selected" : "Не выбрана верная группа",
"A user with that name already exists." : "Пользователь с таким именем уже существует.",
"Unable to create user." : "Невозможно создать пользователя.",
"Your %s account was created" : "Учетная запись %s создана",
"Unable to delete user." : "Невозможно удалить пользователя.",
+ "Settings saved" : "Настройки сохранены",
"Unable to change full name" : "Невозможно изменить полное имя",
+ "Unable to change email address" : "Невозможно изменить адрес электронной почты",
"Your full name has been changed." : "Ваше полное имя было изменено.",
"Forbidden" : "Запрещено",
"Invalid user" : "Неверный пользователь",
"Unable to change mail address" : "Невозможно изменить адрес электронной почты",
"Email saved" : "Адрес сохранен",
+ "Password confirmation is required" : "Требуется подтверждение пароля",
"Couldn't remove app." : "Не удалось удалить приложение.",
- "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
- "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
- "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s",
"Couldn't update app." : "Невозможно обновить приложение",
+ "Are you really sure you want add {domain} as trusted domain?" : "Вы действительно хотите добавить домен {domain} как доверенный?",
"Add trusted domain" : "Добавить доверенный домен",
"Migration in progress. Please wait until the migration is finished" : "Миграция в процессе. Пожалуйста, подождите завершения миграции",
"Migration started …" : "Начата миграция ...",
@@ -48,15 +50,15 @@ OC.L10N.register(
"Official" : "Официальное",
"All" : "Все",
"Update to %s" : "Обновить до %s",
- "_You have %n app update pending_::_You have %n app updates pending_" : ["%n обновление в очереди","%n обновлений в очереди","%n обновлений в очереди","У вас есть %n доступных обновлений"],
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["У вас есть %n доступное обновление","У вас есть %n доступных обновления","У вас есть %n доступных обновлений","У вас есть %n доступных обновлений"],
"No apps found for your version" : "Не найдено приложений для вашей версии",
"The app will be downloaded from the app store" : "Приложение будет скачано из магазина приложений",
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Официальные приложения разработаны вместе с сообществом. Они предлагают базовую функциональность и готовы для использования.",
"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." : "Подтвержденные приложения разработаны доверенными разработчиками и прошли краткую проверку на наличие проблем с безопасностью. Они активно поддерживаются в открытых репозиториях и сопровождающие их разработчики подтверждают, что приложения достаточно стабильны для нормальной работы.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Это приложение не проверялось на наличие проблем с безопасностью, также оно может работать нестабильно. Устанавливайте на свой страх и риск.",
- "Please wait...." : "Пожалуйста подождите...",
+ "Enabling app …" : "Включение приложения",
"Error while disabling app" : "Ошибка при отключении приложения",
- "Disable" : "Выключить",
+ "Disable" : "Отключить",
"Enable" : "Включить",
"Error while enabling app" : "Ошибка при включении приложения",
"Error: this app cannot be enabled because it makes the server unstable" : "Ошибка: это приложение не может быть включено, так как оно делает сервер нестабильным",
@@ -73,16 +75,22 @@ OC.L10N.register(
"Approved" : "Подтвержденное",
"Experimental" : "Экспериментальное",
"No apps found for {query}" : "Приложения не найдены по {query}",
+ "Allow filesystem access" : "Разрешить доступ к файловой системе",
"Disconnect" : "Отключить",
+ "Revoke" : "Отменить",
+ "Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome для Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "Клиент iOS",
"Android Client" : "Клиент Android",
"Sync client - {os}" : "Клиент синхронизации - {os}",
"This session" : "Эта сессия",
+ "Copy" : "Копировать",
"Copied!" : "Скопировано!",
"Not supported!" : "Не поддерживается!",
"Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.",
@@ -93,6 +101,14 @@ OC.L10N.register(
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Произошла ошибка. Пожалуйста загрузите сертификат PEM в ASCII кодировке.",
"Valid until {date}" : "Действительно до {дата}",
"Delete" : "Удалить",
+ "Local" : "Локально",
+ "Private" : "Закрытый",
+ "Only visible to local users" : "Виден только локальным пользователям",
+ "Only visible to you" : "Виден только вам",
+ "Contacts" : "Контакты",
+ "Visible to local users and to trusted servers" : "Виден локальным пользователям и доверенным серверам",
+ "Public" : "Открытый",
+ "Will be synced to a global and public address book" : "Будет синхронизирован с глобальной и открытой адресной книгой",
"Select a profile picture" : "Выберите аватар",
"Very weak password" : "Очень слабый пароль",
"Weak password" : "Слабый пароль",
@@ -107,11 +123,14 @@ OC.L10N.register(
"undo" : "отмена",
"never" : "никогда",
"deleted {userName}" : "удалён {userName}",
+ "Unable to add user to group {group}" : "Невозможно добавить пользователя в группу {group}",
+ "Unable to remove user from group {group}" : "Невозможно удалить пользователя из группы {group}",
"Add group" : "Добавить группу",
"Invalid quota value \"{val}\"" : "Недопустимая величина квоты \"{val}\"",
"no group" : "Без группы",
"Password successfully changed" : "Пароль успешно изменен.",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Изменение пароля приведёт к потере данных, так как восстановление данных не доступно для этого пользователя",
+ "Could not change the users email" : "Невозможно изменить электронный адрес пользователя",
"A valid username must be provided" : "Укажите правильное имя пользователя",
"Error creating user: {message}" : "Ошибка создания пользователя: {message}",
"A valid password must be provided" : "Должен быть указан правильный пароль",
@@ -126,6 +145,7 @@ OC.L10N.register(
"Login" : "Логин",
"Plain" : "Простой",
"NT LAN Manager" : "Менеджер NT LAN",
+ "SSL/TLS" : "SSL/TLS",
"STARTTLS" : "STARTTLS",
"Email server" : "Почтовый сервер",
"Open documentation" : "Открыть документацию",
@@ -182,6 +202,8 @@ OC.L10N.register(
"Execute one task with each page loaded" : "Выполнять одно задание с каждой загруженной страницей",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зарегистрирован в webcron и будет вызываться каждые 15 минут по http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Использовать системный cron для вызова cron.php каждые 15 минут.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "cron.php должен исполняться из под пользователя \"%s\".",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Для запуска вам необходимо расширение PHP posix. Для более подробной информации смотрите {linkstart}PHP документацию{linkend}",
"Version" : "Версия",
"Sharing" : "Общий доступ",
"Allow apps to use the Share API" : "Позволить приложениям использовать API общего доступа",
@@ -201,6 +223,8 @@ OC.L10N.register(
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Показать текст об отказе на странице загрузки публичной ссылки (Показывать только когда список файлов скрыт)",
"This text will be shown on the public link upload page when the file list is hidden." : "Этот текст будет показан при переходе по публичной ссылке на загрузку при скрытом списке файлов",
"Tips & tricks" : "Советы и трюки",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "В качестве базы данных используется SQLite. Для больших установок мы рекомендуем переключиться на другую серверную базу данных.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Рекомендуется при синхронизации файлов с использованием клиента для ПК.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Для миграции на другую базу данных используйте команду: 'occ db:convert-type' или обратитесь к a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a>.",
"How to do backups" : "Как сделать резервные копии",
"Advanced monitoring" : "Расширенный мониторинг",
@@ -223,17 +247,20 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Для этого приложения не указана максимальная версия Nextcloud. В будущем это будет ошибкой.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Приложение не может быть установлено, следующие зависимости не удовлетворены:",
"Enable only for specific groups" : "Включить только для этих групп",
- "Uninstall App" : "Удалить приложение",
+ "Uninstall app" : "Удалить приложение",
"SSL Root Certificates" : "Корневые сертификаты SSL",
"Common Name" : "Общее Имя",
"Valid until" : "Действительно до",
"Issued By" : "Выдан",
"Valid until %s" : "Действительно до %s",
"Import root certificate" : "Импорт корневого сертификата",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Здравствуйте,<br><br>просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: <strong>%s</strong><br>Зайти: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Удачи!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здравствуйте,\n\nПросто хотим сообщить, что теперь у вас есть учетная запись на %s.\n\nИмя пользователя: %s\nЗайти: %s\n",
"Administrator documentation" : "Документация администратора",
"Online documentation" : "Online-документация",
"Forum" : "Форум",
+ "Getting help" : "Помощь",
"Commercial support" : "Коммерческая поддержка",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Вы используете <strong>%s</strong> из <strong>%s</strong>",
"Profile picture" : "Аватар",
@@ -250,6 +277,14 @@ OC.L10N.register(
"Your email address" : "Ваш адрес электронной почты",
"No email address set" : "Адрес не указан",
"For password recovery and notifications" : "Для восстановления пароля и уведомлений",
+ "Phone number" : "Номер телефона",
+ "Your phone number" : "Ваш номер телефона",
+ "Address" : "Адрес",
+ "Your postal address" : "Ваш почтовый адрес",
+ "Website" : "Сайт",
+ "Your website" : "Ваш сайт",
+ "Twitter" : "Twitter",
+ "Your Twitter handle" : "Ваше имя в Twiter",
"You are member of the following groups:" : "Вы являетесь членом следующих групп:",
"Password" : "Пароль",
"Current password" : "Текущий пароль",
@@ -261,6 +296,7 @@ OC.L10N.register(
"Desktop client" : "Клиент для ПК",
"Android app" : "Android приложение",
"iOS app" : "iOS приложение",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Если хотите поддержать проект - {contributeopen}присоединяйтесь к разработке{linkclose} или {contributeopen}расскажите о нем другим{linkclose}!",
"Show First Run Wizard again" : "Показать помощник настройки снова",
"Web, desktop and mobile clients currently logged in to your account." : "Веб, настольные и мобильные клиенты, которые в настоящий момент авторизованы вашей учётной записью.",
"Device" : "Устройство",
@@ -288,6 +324,7 @@ OC.L10N.register(
"Create" : "Создать",
"Admin Recovery Password" : "Пароль административного восстановления",
"Enter the recovery password in order to recover the users files during password change" : "Введите пароль для того, чтобы восстановить файлы пользователей при смене пароля",
+ "Group name" : "Название группы",
"Everyone" : "Все",
"Admins" : "Администраторы",
"Default quota" : "Квота по умолчанию",
@@ -304,7 +341,11 @@ OC.L10N.register(
"Default" : "По умолчанию",
"log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
"Language changed" : "Язык изменён",
+ "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
+ "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
+ "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
+ "Please wait...." : "Пожалуйста подождите...",
"iPhone" : "iPhone",
"add group" : "Добавить группу",
"Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)",
@@ -324,10 +365,11 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особенно вызывает сомнение использование SQLite при синхронизации файлов с использованием клиента для ПК.",
"Experimental applications ahead" : "Экспериментальные приложения",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Экспериментальные приложения не проверялись на наличие уязвимостей безопасности, они также могут быть нестабильны, т.к. находятся в активной разработке. Их установка может повлечь потерю информации или нарушение безопасности.",
+ "Uninstall App" : "Удалить приложение",
"Enable experimental apps" : "Включить экспериментальные приложения",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Здравствуйте,<br><br>просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: %s<br>Зайти: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здравствуйте,\n\nПросто хотим сообщить, что теперь у вас есть учетная запись на %s.\n\nИмя пользователя: %s\nЗайти: %s\n",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если вы хотите поддержать проект\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\t\tили\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">расскажите о нас</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если вы хотите поддержать проект\n\t<a href=\"https://nextcloud.com/contribute\"\n\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\tили\n\t<a href=\"https://nextcloud.com/contribute\"\n\ttarget=\"_blank\" rel=\"noreferrer\">расскажите о нас</a>!",
"Add Group" : "Добавить группу",
"Group" : "Группа",
"Default Quota" : "Квота по умолчанию",
@@ -335,24 +377,6 @@ OC.L10N.register(
"Group Admin for" : "Администратор групп",
"Storage Location" : "Место хранилища",
"User Backend" : "Механизм учёта пользователей",
- "Last Login" : "Последний вход",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Внешнее хранилище",
- "Updates" : "Обновления",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Официальные приложения разрабатываются в рамках сообщества Nextcloud. Они предлагают базовую функциональность Nextcloud и готовы для использования.",
- "No apps found for \"{query}\"" : "Приложения не найдены по \"{query}\"",
- "An error occurred: {message}" : "Произошла ошибка: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста, обратитесь к <a target=\"_blank\" href=\"%s\">руководству по установке ↗</a> для получения подсказок по настройке php на вашем сервере, особенно если используете php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Ваша база данных не работает в режиме изоляции транзакций \"READ COMMITED\". Это может вызвать проблемы, если несколько действий выполняется одновременно.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ваш сервер работает на ОС Microsoft Windows. Мы настоятельно рекомендуем использовать ОС семейства Linux для достижения наилучших условий использования.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Блокировка передаваемых файлов отключена, это может вызвать ошибки. Для решения проблемы включите параметр 'filelocking.enabled' в файле config.php. Для получения дополнительной информации обратитесь к <a target=\"_blank\" href=\"%s\">документации ↗</a>.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Пожалуйста, еще раз внимательно прочитайте <a target=\"_blank\" href=\"%s\">руководство по установке ↗</a> и проверьте <a href=\"#log-section\">журнал</a> на наличие ошибок.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование не гарантирует безопасность системы . Пожалуйста, смотрите документацию по Nextcloud для получения дополнительной информации о том, как работает приложение шифрования и поддерживаемых вариантов использования.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Для миграции на другую базу данных используйте команду 'occ db:convert-type' или обратитесь к <a target=\"_blank\" href=\"%s\">документации ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "У этого приложения не указанна минимальная версия Nextcloud. Это приведет к ошибке в Nextcloud 11 и позже.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "У этого приложения не указанна минимальная версия Nextcloud. Это приведет к ошибке в Nextcloud 11 и позже.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Если вы хотите поддержать проект,\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\t\tили\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">помогите другим пользователям</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Разработано {communityopen}сообществом Nextcloud{linkclose}, {githubopen}исходный код{linkclose} лицензируется в соответствии с условиями {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Последний вход"
},
"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/settings/l10n/ru.json b/settings/l10n/ru.json
index 6dd34834297..e9c916fde66 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -20,24 +20,26 @@
"test email settings" : "проверить настройки почты",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Во время отправки письма произошла ошибка. Пожалуйста проверьте настройки. (Ошибка: %s)",
"Email sent" : "Письмо отправлено",
- "You need to set your user email before being able to send test emails." : "Вы должны настроить свой адрес электронной почты прежде чем отправлять тестовые сообщения.",
+ "You need to set your user email before being able to send test emails." : "Вы должны настроить ваш собственный адрес электронной почты прежде чем отправлять тестовые сообщения.",
"Invalid request" : "Неправильный запрос",
"Invalid mail address" : "Некорректный адрес электронной почты",
+ "No valid group selected" : "Не выбрана верная группа",
"A user with that name already exists." : "Пользователь с таким именем уже существует.",
"Unable to create user." : "Невозможно создать пользователя.",
"Your %s account was created" : "Учетная запись %s создана",
"Unable to delete user." : "Невозможно удалить пользователя.",
+ "Settings saved" : "Настройки сохранены",
"Unable to change full name" : "Невозможно изменить полное имя",
+ "Unable to change email address" : "Невозможно изменить адрес электронной почты",
"Your full name has been changed." : "Ваше полное имя было изменено.",
"Forbidden" : "Запрещено",
"Invalid user" : "Неверный пользователь",
"Unable to change mail address" : "Невозможно изменить адрес электронной почты",
"Email saved" : "Адрес сохранен",
+ "Password confirmation is required" : "Требуется подтверждение пароля",
"Couldn't remove app." : "Не удалось удалить приложение.",
- "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
- "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
- "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s",
"Couldn't update app." : "Невозможно обновить приложение",
+ "Are you really sure you want add {domain} as trusted domain?" : "Вы действительно хотите добавить домен {domain} как доверенный?",
"Add trusted domain" : "Добавить доверенный домен",
"Migration in progress. Please wait until the migration is finished" : "Миграция в процессе. Пожалуйста, подождите завершения миграции",
"Migration started …" : "Начата миграция ...",
@@ -46,15 +48,15 @@
"Official" : "Официальное",
"All" : "Все",
"Update to %s" : "Обновить до %s",
- "_You have %n app update pending_::_You have %n app updates pending_" : ["%n обновление в очереди","%n обновлений в очереди","%n обновлений в очереди","У вас есть %n доступных обновлений"],
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["У вас есть %n доступное обновление","У вас есть %n доступных обновления","У вас есть %n доступных обновлений","У вас есть %n доступных обновлений"],
"No apps found for your version" : "Не найдено приложений для вашей версии",
"The app will be downloaded from the app store" : "Приложение будет скачано из магазина приложений",
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Официальные приложения разработаны вместе с сообществом. Они предлагают базовую функциональность и готовы для использования.",
"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." : "Подтвержденные приложения разработаны доверенными разработчиками и прошли краткую проверку на наличие проблем с безопасностью. Они активно поддерживаются в открытых репозиториях и сопровождающие их разработчики подтверждают, что приложения достаточно стабильны для нормальной работы.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Это приложение не проверялось на наличие проблем с безопасностью, также оно может работать нестабильно. Устанавливайте на свой страх и риск.",
- "Please wait...." : "Пожалуйста подождите...",
+ "Enabling app …" : "Включение приложения",
"Error while disabling app" : "Ошибка при отключении приложения",
- "Disable" : "Выключить",
+ "Disable" : "Отключить",
"Enable" : "Включить",
"Error while enabling app" : "Ошибка при включении приложения",
"Error: this app cannot be enabled because it makes the server unstable" : "Ошибка: это приложение не может быть включено, так как оно делает сервер нестабильным",
@@ -71,16 +73,22 @@
"Approved" : "Подтвержденное",
"Experimental" : "Экспериментальное",
"No apps found for {query}" : "Приложения не найдены по {query}",
+ "Allow filesystem access" : "Разрешить доступ к файловой системе",
"Disconnect" : "Отключить",
+ "Revoke" : "Отменить",
+ "Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome для Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
"iOS Client" : "Клиент iOS",
"Android Client" : "Клиент Android",
"Sync client - {os}" : "Клиент синхронизации - {os}",
"This session" : "Эта сессия",
+ "Copy" : "Копировать",
"Copied!" : "Скопировано!",
"Not supported!" : "Не поддерживается!",
"Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.",
@@ -91,6 +99,14 @@
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Произошла ошибка. Пожалуйста загрузите сертификат PEM в ASCII кодировке.",
"Valid until {date}" : "Действительно до {дата}",
"Delete" : "Удалить",
+ "Local" : "Локально",
+ "Private" : "Закрытый",
+ "Only visible to local users" : "Виден только локальным пользователям",
+ "Only visible to you" : "Виден только вам",
+ "Contacts" : "Контакты",
+ "Visible to local users and to trusted servers" : "Виден локальным пользователям и доверенным серверам",
+ "Public" : "Открытый",
+ "Will be synced to a global and public address book" : "Будет синхронизирован с глобальной и открытой адресной книгой",
"Select a profile picture" : "Выберите аватар",
"Very weak password" : "Очень слабый пароль",
"Weak password" : "Слабый пароль",
@@ -105,11 +121,14 @@
"undo" : "отмена",
"never" : "никогда",
"deleted {userName}" : "удалён {userName}",
+ "Unable to add user to group {group}" : "Невозможно добавить пользователя в группу {group}",
+ "Unable to remove user from group {group}" : "Невозможно удалить пользователя из группы {group}",
"Add group" : "Добавить группу",
"Invalid quota value \"{val}\"" : "Недопустимая величина квоты \"{val}\"",
"no group" : "Без группы",
"Password successfully changed" : "Пароль успешно изменен.",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Изменение пароля приведёт к потере данных, так как восстановление данных не доступно для этого пользователя",
+ "Could not change the users email" : "Невозможно изменить электронный адрес пользователя",
"A valid username must be provided" : "Укажите правильное имя пользователя",
"Error creating user: {message}" : "Ошибка создания пользователя: {message}",
"A valid password must be provided" : "Должен быть указан правильный пароль",
@@ -124,6 +143,7 @@
"Login" : "Логин",
"Plain" : "Простой",
"NT LAN Manager" : "Менеджер NT LAN",
+ "SSL/TLS" : "SSL/TLS",
"STARTTLS" : "STARTTLS",
"Email server" : "Почтовый сервер",
"Open documentation" : "Открыть документацию",
@@ -180,6 +200,8 @@
"Execute one task with each page loaded" : "Выполнять одно задание с каждой загруженной страницей",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зарегистрирован в webcron и будет вызываться каждые 15 минут по http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Использовать системный cron для вызова cron.php каждые 15 минут.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "cron.php должен исполняться из под пользователя \"%s\".",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Для запуска вам необходимо расширение PHP posix. Для более подробной информации смотрите {linkstart}PHP документацию{linkend}",
"Version" : "Версия",
"Sharing" : "Общий доступ",
"Allow apps to use the Share API" : "Позволить приложениям использовать API общего доступа",
@@ -199,6 +221,8 @@
"Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Показать текст об отказе на странице загрузки публичной ссылки (Показывать только когда список файлов скрыт)",
"This text will be shown on the public link upload page when the file list is hidden." : "Этот текст будет показан при переходе по публичной ссылке на загрузку при скрытом списке файлов",
"Tips & tricks" : "Советы и трюки",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "В качестве базы данных используется SQLite. Для больших установок мы рекомендуем переключиться на другую серверную базу данных.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Рекомендуется при синхронизации файлов с использованием клиента для ПК.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Для миграции на другую базу данных используйте команду: 'occ db:convert-type' или обратитесь к a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a>.",
"How to do backups" : "Как сделать резервные копии",
"Advanced monitoring" : "Расширенный мониторинг",
@@ -221,17 +245,20 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Для этого приложения не указана максимальная версия Nextcloud. В будущем это будет ошибкой.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Приложение не может быть установлено, следующие зависимости не удовлетворены:",
"Enable only for specific groups" : "Включить только для этих групп",
- "Uninstall App" : "Удалить приложение",
+ "Uninstall app" : "Удалить приложение",
"SSL Root Certificates" : "Корневые сертификаты SSL",
"Common Name" : "Общее Имя",
"Valid until" : "Действительно до",
"Issued By" : "Выдан",
"Valid until %s" : "Действительно до %s",
"Import root certificate" : "Импорт корневого сертификата",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Здравствуйте,<br><br>просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: <strong>%s</strong><br>Зайти: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Удачи!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здравствуйте,\n\nПросто хотим сообщить, что теперь у вас есть учетная запись на %s.\n\nИмя пользователя: %s\nЗайти: %s\n",
"Administrator documentation" : "Документация администратора",
"Online documentation" : "Online-документация",
"Forum" : "Форум",
+ "Getting help" : "Помощь",
"Commercial support" : "Коммерческая поддержка",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Вы используете <strong>%s</strong> из <strong>%s</strong>",
"Profile picture" : "Аватар",
@@ -248,6 +275,14 @@
"Your email address" : "Ваш адрес электронной почты",
"No email address set" : "Адрес не указан",
"For password recovery and notifications" : "Для восстановления пароля и уведомлений",
+ "Phone number" : "Номер телефона",
+ "Your phone number" : "Ваш номер телефона",
+ "Address" : "Адрес",
+ "Your postal address" : "Ваш почтовый адрес",
+ "Website" : "Сайт",
+ "Your website" : "Ваш сайт",
+ "Twitter" : "Twitter",
+ "Your Twitter handle" : "Ваше имя в Twiter",
"You are member of the following groups:" : "Вы являетесь членом следующих групп:",
"Password" : "Пароль",
"Current password" : "Текущий пароль",
@@ -259,6 +294,7 @@
"Desktop client" : "Клиент для ПК",
"Android app" : "Android приложение",
"iOS app" : "iOS приложение",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Если хотите поддержать проект - {contributeopen}присоединяйтесь к разработке{linkclose} или {contributeopen}расскажите о нем другим{linkclose}!",
"Show First Run Wizard again" : "Показать помощник настройки снова",
"Web, desktop and mobile clients currently logged in to your account." : "Веб, настольные и мобильные клиенты, которые в настоящий момент авторизованы вашей учётной записью.",
"Device" : "Устройство",
@@ -286,6 +322,7 @@
"Create" : "Создать",
"Admin Recovery Password" : "Пароль административного восстановления",
"Enter the recovery password in order to recover the users files during password change" : "Введите пароль для того, чтобы восстановить файлы пользователей при смене пароля",
+ "Group name" : "Название группы",
"Everyone" : "Все",
"Admins" : "Администраторы",
"Default quota" : "Квота по умолчанию",
@@ -302,7 +339,11 @@
"Default" : "По умолчанию",
"log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
"Language changed" : "Язык изменён",
+ "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
+ "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
+ "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
+ "Please wait...." : "Пожалуйста подождите...",
"iPhone" : "iPhone",
"add group" : "Добавить группу",
"Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)",
@@ -322,10 +363,11 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особенно вызывает сомнение использование SQLite при синхронизации файлов с использованием клиента для ПК.",
"Experimental applications ahead" : "Экспериментальные приложения",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Экспериментальные приложения не проверялись на наличие уязвимостей безопасности, они также могут быть нестабильны, т.к. находятся в активной разработке. Их установка может повлечь потерю информации или нарушение безопасности.",
+ "Uninstall App" : "Удалить приложение",
"Enable experimental apps" : "Включить экспериментальные приложения",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Здравствуйте,<br><br>просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: %s<br>Зайти: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здравствуйте,\n\nПросто хотим сообщить, что теперь у вас есть учетная запись на %s.\n\nИмя пользователя: %s\nЗайти: %s\n",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если вы хотите поддержать проект\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\t\tили\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">расскажите о нас</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если вы хотите поддержать проект\n\t<a href=\"https://nextcloud.com/contribute\"\n\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\tили\n\t<a href=\"https://nextcloud.com/contribute\"\n\ttarget=\"_blank\" rel=\"noreferrer\">расскажите о нас</a>!",
"Add Group" : "Добавить группу",
"Group" : "Группа",
"Default Quota" : "Квота по умолчанию",
@@ -333,24 +375,6 @@
"Group Admin for" : "Администратор групп",
"Storage Location" : "Место хранилища",
"User Backend" : "Механизм учёта пользователей",
- "Last Login" : "Последний вход",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Внешнее хранилище",
- "Updates" : "Обновления",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Официальные приложения разрабатываются в рамках сообщества Nextcloud. Они предлагают базовую функциональность Nextcloud и готовы для использования.",
- "No apps found for \"{query}\"" : "Приложения не найдены по \"{query}\"",
- "An error occurred: {message}" : "Произошла ошибка: {message}",
- "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста, обратитесь к <a target=\"_blank\" href=\"%s\">руководству по установке ↗</a> для получения подсказок по настройке php на вашем сервере, особенно если используете php-fpm.",
- "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Ваша база данных не работает в режиме изоляции транзакций \"READ COMMITED\". Это может вызвать проблемы, если несколько действий выполняется одновременно.",
- "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ваш сервер работает на ОС Microsoft Windows. Мы настоятельно рекомендуем использовать ОС семейства Linux для достижения наилучших условий использования.",
- "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\" href=\"%s\">documentation ↗</a> for more information." : "Блокировка передаваемых файлов отключена, это может вызвать ошибки. Для решения проблемы включите параметр 'filelocking.enabled' в файле config.php. Для получения дополнительной информации обратитесь к <a target=\"_blank\" href=\"%s\">документации ↗</a>.",
- "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Пожалуйста, еще раз внимательно прочитайте <a target=\"_blank\" href=\"%s\">руководство по установке ↗</a> и проверьте <a href=\"#log-section\">журнал</a> на наличие ошибок.",
- "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование не гарантирует безопасность системы . Пожалуйста, смотрите документацию по Nextcloud для получения дополнительной информации о том, как работает приложение шифрования и поддерживаемых вариантов использования.",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Для миграции на другую базу данных используйте команду 'occ db:convert-type' или обратитесь к <a target=\"_blank\" href=\"%s\">документации ↗</a>.",
- "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "У этого приложения не указанна минимальная версия Nextcloud. Это приведет к ошибке в Nextcloud 11 и позже.",
- "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "У этого приложения не указанна минимальная версия Nextcloud. Это приведет к ошибке в Nextcloud 11 и позже.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Если вы хотите поддержать проект,\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\t\tили\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">помогите другим пользователям</a>!",
- "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Разработано {communityopen}сообществом Nextcloud{linkclose}, {githubopen}исходный код{linkclose} лицензируется в соответствии с условиями {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
+ "Last Login" : "Последний вход"
},"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/settings/l10n/si_LK.js b/settings/l10n/si_LK.js
index 76adad6876c..4ea33986970 100644
--- a/settings/l10n/si_LK.js
+++ b/settings/l10n/si_LK.js
@@ -4,8 +4,6 @@ OC.L10N.register(
"Authentication error" : "සත්‍යාපන දෝෂයක්",
"Invalid request" : "අවලංගු අයැදුමක්",
"Email saved" : "වි-තැපෑල සුරකින ලදී",
- "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
- "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"All" : "සියල්ල",
"Disable" : "අක්‍රිය කරන්න",
"Enable" : "සක්‍රිය කරන්න",
@@ -36,9 +34,10 @@ OC.L10N.register(
"Other" : "වෙනත්",
"Quota" : "සලාකය",
"Language changed" : "භාෂාව ාවනස් කිරීම",
+ "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
+ "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"Log" : "ලඝුව",
"More" : "වැඩි",
- "Less" : "අඩු",
- "External Storage" : "භාහිර ගබඩාව"
+ "Less" : "අඩු"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/si_LK.json b/settings/l10n/si_LK.json
index d6055fb31f7..0f9ebafcd6e 100644
--- a/settings/l10n/si_LK.json
+++ b/settings/l10n/si_LK.json
@@ -2,8 +2,6 @@
"Authentication error" : "සත්‍යාපන දෝෂයක්",
"Invalid request" : "අවලංගු අයැදුමක්",
"Email saved" : "වි-තැපෑල සුරකින ලදී",
- "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
- "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"All" : "සියල්ල",
"Disable" : "අක්‍රිය කරන්න",
"Enable" : "සක්‍රිය කරන්න",
@@ -34,9 +32,10 @@
"Other" : "වෙනත්",
"Quota" : "සලාකය",
"Language changed" : "භාෂාව ාවනස් කිරීම",
+ "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක",
+ "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"Log" : "ලඝුව",
"More" : "වැඩි",
- "Less" : "අඩු",
- "External Storage" : "භාහිර ගබඩාව"
+ "Less" : "අඩු"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index 8f4f6276f4b..2d3e4a35609 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -27,40 +27,76 @@ OC.L10N.register(
"Unable to create user." : "Nie je možné vytvoriť používateľa.",
"Your %s account was created" : "Váš účet %s bol vytvorený",
"Unable to delete user." : "Nie je možné zmazať používateľa.",
+ "Settings saved" : "Nastavenia uložené",
"Unable to change full name" : "Nemožno zmeniť meno a priezvisko",
+ "Unable to change email address" : "Nemožno zmeniť emailovú adresu",
"Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.",
"Forbidden" : "Zakázané",
"Invalid user" : "Neplatný používateľ",
"Unable to change mail address" : "Nemožno zmeniť emailovú adresu",
"Email saved" : "Email uložený",
+ "Password confirmation is required" : "Vyžaduje sa overenie heslom",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
- "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin",
- "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s",
- "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s",
"Couldn't update app." : "Nemožno aktualizovať aplikáciu.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Ste si istí, že chcete pridať {domain} medzi dôveryhodné domény?",
"Add trusted domain" : "Pridať dôveryhodnú doménu",
"Migration in progress. Please wait until the migration is finished" : "Prebieha migrácia. Počkajte prosím, kým sa skončí",
"Migration started …" : "Migrácia spustená ...",
+ "Not saved" : "Neuložené",
"Sending..." : "Odosielam...",
"Official" : "Oficiálny",
"All" : "Všetky",
"Update to %s" : "Aktualizovať na %s",
+ "_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",
- "Please wait...." : "Čakajte prosím...",
+ "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.",
+ "Enabling app …" : "Povoľujem aplikáciu …",
"Error while disabling app" : "Chyba pri zakázaní aplikácie",
"Disable" : "Zakázať",
"Enable" : "Zapnúť",
"Error while enabling app" : "Chyba pri povoľovaní aplikácie",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Chyba: aplikáciu nie je možné povoliť, lebo naruší stabilitu servera",
+ "Error: could not disable broken app" : "Chyba: nebolo možné zakázať poškodenú aplikáciu",
+ "Error while disabling broken app" : "Nastala chyba počas zakazovania poškodenej aplikácie",
"Updating...." : "Aktualizujem...",
"Error while updating app" : "chyba pri aktualizácii aplikácie",
"Updated" : "Aktualizované",
"Uninstalling ...." : "Prebieha odinštalovanie...",
"Error while uninstalling app" : "Chyba pri odinštalovaní aplikácie",
"Uninstall" : "Odinštalácia",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Aplikácia bola povolená, ale je potrebné ju aktualizovať. O 5 sekúnd budete presmerovaní na aktualizačnú stránku.",
+ "App update" : "Aktualizácia aplikácie",
"Approved" : "Schválené",
"Experimental" : "Experimentálny",
+ "No apps found for {query}" : "Žiadna aplikácia nebola nájdená pre {query}",
+ "Allow filesystem access" : "Povoliť prístup ku súborovému systému",
+ "Disconnect" : "Odpojiť",
+ "Revoke" : "Odvolať",
+ "Internet Explorer" : "Internet Explorer",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome pre Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS Klient",
+ "Android Client" : "Android Klient",
+ "Copy" : "Kopírovať",
+ "Copied!" : "Skopírované!",
+ "Not supported!" : "Nie je podporované!",
+ "Press ⌘-C to copy." : "Stlač ⌘-C pre skopírovanie.",
+ "Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Vyskytla sa chyba. Nahrajte prosím PEM certifikát v ASCII kódovaní.",
"Valid until {date}" : "Platný do {date}",
"Delete" : "Zmazať",
+ "Local" : "Lokálny",
+ "Private" : "Súkromný",
+ "Only visible to local users" : "Viditeľné iba pre lokálnych používateľov",
+ "Only visible to you" : "Viditeľné iba pre seba",
+ "Contacts" : "Kontakty",
+ "Visible to local users and to trusted servers" : "Viditeľné pre lokálnych používateľov a dôveryhodné servery",
+ "Public" : "Verejné",
+ "Will be synced to a global and public address book" : "Bude synchronizované s globálnym a verejným adresárom",
"Select a profile picture" : "Vybrať avatara",
"Very weak password" : "Veľmi slabé heslo",
"Weak password" : "Slabé heslo",
@@ -69,23 +105,32 @@ OC.L10N.register(
"Strong password" : "Silné heslo",
"Groups" : "Skupiny",
"Unable to delete {objName}" : "Nemožno vymazať {objName}",
+ "Error creating group: {message}" : "Chyba pri vytváraní skupiny: {message}",
"A valid group name must be provided" : "Musíte zadať platný názov skupiny",
"deleted {groupName}" : "vymazaná {groupName}",
"undo" : "vrátiť",
"never" : "nikdy",
"deleted {userName}" : "vymazané {userName}",
+ "Add group" : "Pridať skupinu",
+ "Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"",
+ "Password successfully changed" : "Heslo úspešne zmenené",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Zmena hesla bude mať za následok stratu dát, pretože obnova dát nie je k dispozícii pre tohto používateľa",
+ "Could not change the users email" : "Nemožno zmeniť email používateľa",
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
+ "Error creating user: {message}" : "Chyba pri vytváraní používateľa: {message}",
"A valid password must be provided" : "Musíte zadať platné heslo",
"A valid email must be provided" : "Musíte zadať platnú emailovú adresu",
"__language_name__" : "Slovensky",
"Unlimited" : "Nelimitované",
"Personal info" : "Osobné informácie",
+ "App passwords" : "Heslá aplikácie",
"Sync clients" : "Klienti synchronizácie",
"None" : "Žiadny",
"Login" : "Prihlásenie",
"Plain" : "Neformátovaný",
"NT LAN Manager" : "NT LAN Manager",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "Email server",
"Open documentation" : "Otvoriť dokumentáciu",
"This is used for sending out notifications." : "Používa sa na odosielanie upozornení.",
@@ -105,7 +150,12 @@ OC.L10N.register(
"Send email" : "Odoslať email",
"Server-side encryption" : "Šifrovanie na serveri",
"Enable server-side encryption" : "Povoliť šifrovanie na serveri",
+ "Please read carefully before activating server-side encryption: " : "Prečítajte prosím pozorne pred použitím šifrovania na serveri:",
+ "Be aware that encryption always increases the file size." : "Majte na vedomí, že šifrovanie vždy zväčší veľkosť súborov.",
+ "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." : "Je dobré vytvárať pravidelné zálohy vašich dát, uistite sa, že v prípade šifrovania spolu s vašimi dátami zálohujete aj šifrovacie kľúče.",
+ "This is the final warning: Do you really want to enable encryption?" : "Toto je posledné varovanie: Vážne si prajete povoliť šifrovanie?",
"Enable encryption" : "Povoliť šifrovanie",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Nebol načítaný žiadny šifrovací modul, povoľte prosím šifrovací modul v menu aplikácií.",
"Select default encryption module:" : "Vybrať predvolený šifrovací modul:",
"Start migration" : "Začať migráciu",
"Security & setup warnings" : "Bezpečnosť a nastavenia upozornení",
@@ -117,6 +167,7 @@ OC.L10N.register(
"This means that there might be problems with certain characters in file names." : "To znamená, že sa môžu vyskytnúť problémy s niektorými znakmi v názvoch súborov.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Dôrazne doporučujeme nainštalovať na váš systém požadované balíčky podporujúce jednu z nasledovných znakových sád: %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\")" : "Inštalácia mimo koreňový priečinok domény a používanie systémového príkazu cron môže spôsobiť problém s generovaním správnej URL. Pre zabránenie týmto chybám nastavte prosím správnu cestu v svojom config.php súbore pre hodnotu \"overwrite.cli.url\" (Doporučujeme: \"%s\")",
+ "All checks passed." : "Všetky kontroly prešli úspešne.",
"Cron" : "Cron",
"Last cron job execution: %s." : "Posledný cron prebehol: %s.",
"Last cron job execution: %s. Something seems wrong." : "Posledný cron prebehol: %s. Zdá sa, že niečo nie je vporiadku.",
@@ -124,6 +175,7 @@ OC.L10N.register(
"Execute one task with each page loaded" : "Vykonať jednu úlohu s každým načítaní stránky",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je zaregistrovaná v službe WebCron a zavolá cron.php každých 15 minút cez http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Použiť systémovú službu cron na spúšťanie súboru cron.php každých 15 minút.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "Je potrebné, aby cron.php bol spustený systémovým používateľom \"%s\".",
"Version" : "Verzia",
"Sharing" : "Sprístupňovanie",
"Allow apps to use the Share API" : "Povoliť aplikáciám používať API pre sprístupňovanie",
@@ -135,6 +187,7 @@ OC.L10N.register(
"days" : "dni",
"Enforce expiration date" : "Vynútiť dátum expirácie",
"Allow resharing" : "Povoliť sprístupňovanie ďalej",
+ "Allow sharing with groups" : "Povoliť sprístupnenie so skupinami",
"Restrict users to only share with users in their groups" : "Povoliť používateľom sprístupňovanie obsahu len v rámci ich skupiny",
"Exclude groups from sharing" : "Nesprístupniť obsah skupinám",
"These groups will still be able to receive shares, but not to initiate them." : "Tieto skupiny nebudú mocť sprístupňovať obsah, môžu však stále čítať sprístupnené súbory",
@@ -146,33 +199,57 @@ OC.L10N.register(
"Theming" : "Vzhľady tém",
"Hardening and security guidance" : "Sprievodca vylepšením bezpečnosti",
"Developer documentation" : "Dokumentácia vývojára",
+ "by %s" : "od %s",
+ "%s-licensed" : "%s-licencovaný",
"Documentation:" : "Dokumentácia:",
"User documentation" : "Príručka používateľa",
"Admin documentation" : "Príručka administrátora",
+ "Visit website" : "Navštíviť webstránku",
+ "Report a bug" : "Nahlásiť chybu",
"Show description …" : "Zobraziť popis …",
"Hide description …" : "Skryť popis …",
+ "This app has an update available." : "Pre túto aplikáciu je dostupná aktualizácia.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Pre túto aplikáciu nie je zadaná minimálna verzia Nextcloudu. Toto v budúcnosti spôsobí chybu.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Pre túto aplikáciu nie je zadaná maximálna verzia Nextcloudu. Toto v budúcnosti spôsobí chybu.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Túto aplikáciu nemožno nainštalovať, pretože nie sú splnené nasledovné závislosti:",
"Enable only for specific groups" : "Povoliť len pre vybrané skupiny",
- "Uninstall App" : "Odinštalovanie aplikácie",
+ "Uninstall app" : "Odinštalovať aplikáciu",
+ "SSL Root Certificates" : "Koreňové certifikáty SSL",
"Common Name" : "Bežný názov",
"Valid until" : "Platný do",
"Issued By" : "Vydal",
"Valid until %s" : "Platný do %s",
"Import root certificate" : "Importovať koreňový certifikát",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: <strong>%s</strong><br>Prihlásiť sa môžete tu: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Pekný deň!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Dobrý deň,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n",
"Administrator documentation" : "Príručka administrátora",
"Online documentation" : "Online príručka",
"Forum" : "Fórum",
+ "Getting help" : "Získať pomoc",
"Commercial support" : "Komerčná podpora",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Využívate <strong>%s</strong> z <strong>%s</strong>",
"Profile picture" : "Avatar",
"Upload new" : "Nahrať nový",
+ "Select from Files" : "Vybrať zo súborov",
"Remove image" : "Zmazať obrázok",
+ "png or jpg, max. 20 MB" : "png alebo jpg, max. 20 MB",
+ "Picture provided by original account" : "Obrázok poskytnutý originálnym účtom",
"Cancel" : "Zrušiť",
+ "Choose as profile picture" : "Použiť ako obrázok avatara",
"Full name" : "Meno a priezvisko",
"No display name set" : "Zobrazované meno nie je nastavené",
"Email" : "Email",
"Your email address" : "Vaša emailová adresa",
"No email address set" : "Emailová adresa nie je nastavená",
+ "For password recovery and notifications" : "Pre obnovu hesla a oznámenia",
+ "Phone number" : "Telefónne číslo",
+ "Your phone number" : "Vaše telefónne číslo",
+ "Address" : "Adresa",
+ "Your postal address" : "Vaša poštová adresa",
+ "Website" : "Webstránka",
+ "Your website" : "Vaša webstránka",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Ste členom nasledovných skupín:",
"Password" : "Heslo",
"Current password" : "Aktuálne heslo",
@@ -184,10 +261,20 @@ OC.L10N.register(
"Desktop client" : "Desktopový klient",
"Android app" : "Android aplikácia",
"iOS app" : "iOS aplikácia",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Ak chcete podporiť projekt {contributeopen}zapojte sa do vývoja{linkclose}, alebo {contributeopen}dajte o nás vedieť{linkclose}!",
"Show First Run Wizard again" : "Znovu zobraziť sprievodcu prvým spustením",
+ "Web, desktop and mobile clients currently logged in to your account." : "Weboví, desktopoví, alebo mobilní klienti práve prihlásení na váš účet.",
+ "Device" : "Zariadenie",
+ "Last activity" : "Posledná aktivita",
+ "Passcodes that give an app or device permissions to access your account." : "Prístupové heslá, ktoré dovolia aplikáciam alebo zariadeniam prístup na váš účet.",
"Name" : "Názov",
+ "App name" : "Názov aplikácie",
+ "Create new app password" : "Vytvoriť nové heslo aplikácie",
+ "Use the credentials below to configure your app or device." : "Pre konfiguráciu vašej aplikácie, alebo zariadenia použite nižšie uvedené prihlasovacie údaje.",
+ "For security reasons this password will only be shown once." : "Z dôvodu bezpečnosti toto heslo bude zobrazené iba jeden krát.",
"Username" : "Používateľské meno",
"Done" : "Hotovo",
+ "Follow us on Google Plus!" : "Sleduj nás na Google Plus!",
"Show storage location" : "Zobraziť umiestnenie úložiska",
"Show last log in" : "Zobraziť posledné prihlásenie",
"Show user backend" : "Zobraziť backend používateľa",
@@ -197,24 +284,37 @@ OC.L10N.register(
"Create" : "Vytvoriť",
"Admin Recovery Password" : "Obnovenie hesla administrátora",
"Enter the recovery password in order to recover the users files during password change" : "Zadajte heslo pre obnovenie súborov používateľa pri zmene hesla",
+ "Group name" : "Názov skupiny",
"Everyone" : "Všetci",
"Admins" : "Administrátori",
+ "Default quota" : "Predvolená kvóta",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Prosím zadajte kvótu úložného priestoru (napr.: \"512 MB​​\" alebo \"12 GB\")",
"Other" : "Iné",
+ "Group admin for" : "Administrátor skupiny pre",
"Quota" : "Kvóta",
+ "Storage location" : "Umiestnenie úložiska",
+ "User backend" : "Backend používateľa",
+ "Last login" : "Posledné prihlásenie",
"change full name" : "zmeniť meno a priezvisko",
"set new password" : "nastaviť nové heslo",
"change email address" : "zmeniť emailovú adresu",
"Default" : "Predvolené",
"log-level out of allowed range" : "úroveň logovania z povoleného rozpätia",
"Language changed" : "Jazyk zmenený",
+ "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin",
+ "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s",
+ "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?",
+ "Please wait...." : "Čakajte prosím...",
+ "iPhone" : "iPhone",
+ "add group" : "pridať skupinu",
"Everything (fatal issues, errors, warnings, info, debug)" : "Všetko (fatálne problémy, chyby, upozornenia, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, upozornenia, chyby a fatálne problémy",
"Warnings, errors and fatal issues" : "Upozornenia, chyby a fatálne problémy",
"Errors and fatal issues" : "Chyby a fatálne problémy",
"Fatal issues only" : "Len fatálne problémy",
"Log" : "Záznam",
+ "What to log" : "Čo sa má zaznamenávať",
"Download logfile" : "Stiahnuť súbor logu",
"More" : "Viac",
"Less" : "Menej",
@@ -225,13 +325,17 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Najmä pri používaní aplikácie na synchronizáciu s desktopom nie je databáza SQLite doporučená.",
"Experimental applications ahead" : "Experimentálna aplikácia v poradí",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentálne aplikácie nie sú preverované na bezpečnostné chyby, môžu byť nestabilné a veľmi sa meniť. Ich inštaláciou môžete spôsobiť stratu dát alebo bezpečnostné problémy.",
+ "Uninstall App" : "Odinštalovanie aplikácie",
"Enable experimental apps" : "Povoliť experimentálne aplikácie",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: %s<br>Prihlásiť sa môžete tu: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n",
+ "Add Group" : "Pridať skupinu",
"Group" : "Skupina",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externé úložisko",
- "Updates" : "Aktualizácie"
+ "Default Quota" : "Predvolená kvóta",
+ "Full Name" : "Meno a priezvisko",
+ "Group Admin for" : "Administrátor skupiny pre",
+ "Storage Location" : "Umiestnenie úložiska",
+ "User Backend" : "Backend používateľa",
+ "Last Login" : "Posledné prihlásenie"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index 2f588591ed6..227e9b1b061 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -25,40 +25,76 @@
"Unable to create user." : "Nie je možné vytvoriť používateľa.",
"Your %s account was created" : "Váš účet %s bol vytvorený",
"Unable to delete user." : "Nie je možné zmazať používateľa.",
+ "Settings saved" : "Nastavenia uložené",
"Unable to change full name" : "Nemožno zmeniť meno a priezvisko",
+ "Unable to change email address" : "Nemožno zmeniť emailovú adresu",
"Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.",
"Forbidden" : "Zakázané",
"Invalid user" : "Neplatný používateľ",
"Unable to change mail address" : "Nemožno zmeniť emailovú adresu",
"Email saved" : "Email uložený",
+ "Password confirmation is required" : "Vyžaduje sa overenie heslom",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
- "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin",
- "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s",
- "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s",
"Couldn't update app." : "Nemožno aktualizovať aplikáciu.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Ste si istí, že chcete pridať {domain} medzi dôveryhodné domény?",
"Add trusted domain" : "Pridať dôveryhodnú doménu",
"Migration in progress. Please wait until the migration is finished" : "Prebieha migrácia. Počkajte prosím, kým sa skončí",
"Migration started …" : "Migrácia spustená ...",
+ "Not saved" : "Neuložené",
"Sending..." : "Odosielam...",
"Official" : "Oficiálny",
"All" : "Všetky",
"Update to %s" : "Aktualizovať na %s",
+ "_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",
- "Please wait...." : "Čakajte prosím...",
+ "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.",
+ "Enabling app …" : "Povoľujem aplikáciu …",
"Error while disabling app" : "Chyba pri zakázaní aplikácie",
"Disable" : "Zakázať",
"Enable" : "Zapnúť",
"Error while enabling app" : "Chyba pri povoľovaní aplikácie",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Chyba: aplikáciu nie je možné povoliť, lebo naruší stabilitu servera",
+ "Error: could not disable broken app" : "Chyba: nebolo možné zakázať poškodenú aplikáciu",
+ "Error while disabling broken app" : "Nastala chyba počas zakazovania poškodenej aplikácie",
"Updating...." : "Aktualizujem...",
"Error while updating app" : "chyba pri aktualizácii aplikácie",
"Updated" : "Aktualizované",
"Uninstalling ...." : "Prebieha odinštalovanie...",
"Error while uninstalling app" : "Chyba pri odinštalovaní aplikácie",
"Uninstall" : "Odinštalácia",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Aplikácia bola povolená, ale je potrebné ju aktualizovať. O 5 sekúnd budete presmerovaní na aktualizačnú stránku.",
+ "App update" : "Aktualizácia aplikácie",
"Approved" : "Schválené",
"Experimental" : "Experimentálny",
+ "No apps found for {query}" : "Žiadna aplikácia nebola nájdená pre {query}",
+ "Allow filesystem access" : "Povoliť prístup ku súborovému systému",
+ "Disconnect" : "Odpojiť",
+ "Revoke" : "Odvolať",
+ "Internet Explorer" : "Internet Explorer",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome pre Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS Klient",
+ "Android Client" : "Android Klient",
+ "Copy" : "Kopírovať",
+ "Copied!" : "Skopírované!",
+ "Not supported!" : "Nie je podporované!",
+ "Press ⌘-C to copy." : "Stlač ⌘-C pre skopírovanie.",
+ "Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Vyskytla sa chyba. Nahrajte prosím PEM certifikát v ASCII kódovaní.",
"Valid until {date}" : "Platný do {date}",
"Delete" : "Zmazať",
+ "Local" : "Lokálny",
+ "Private" : "Súkromný",
+ "Only visible to local users" : "Viditeľné iba pre lokálnych používateľov",
+ "Only visible to you" : "Viditeľné iba pre seba",
+ "Contacts" : "Kontakty",
+ "Visible to local users and to trusted servers" : "Viditeľné pre lokálnych používateľov a dôveryhodné servery",
+ "Public" : "Verejné",
+ "Will be synced to a global and public address book" : "Bude synchronizované s globálnym a verejným adresárom",
"Select a profile picture" : "Vybrať avatara",
"Very weak password" : "Veľmi slabé heslo",
"Weak password" : "Slabé heslo",
@@ -67,23 +103,32 @@
"Strong password" : "Silné heslo",
"Groups" : "Skupiny",
"Unable to delete {objName}" : "Nemožno vymazať {objName}",
+ "Error creating group: {message}" : "Chyba pri vytváraní skupiny: {message}",
"A valid group name must be provided" : "Musíte zadať platný názov skupiny",
"deleted {groupName}" : "vymazaná {groupName}",
"undo" : "vrátiť",
"never" : "nikdy",
"deleted {userName}" : "vymazané {userName}",
+ "Add group" : "Pridať skupinu",
+ "Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"",
+ "Password successfully changed" : "Heslo úspešne zmenené",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Zmena hesla bude mať za následok stratu dát, pretože obnova dát nie je k dispozícii pre tohto používateľa",
+ "Could not change the users email" : "Nemožno zmeniť email používateľa",
"A valid username must be provided" : "Musíte zadať platné používateľské meno",
+ "Error creating user: {message}" : "Chyba pri vytváraní používateľa: {message}",
"A valid password must be provided" : "Musíte zadať platné heslo",
"A valid email must be provided" : "Musíte zadať platnú emailovú adresu",
"__language_name__" : "Slovensky",
"Unlimited" : "Nelimitované",
"Personal info" : "Osobné informácie",
+ "App passwords" : "Heslá aplikácie",
"Sync clients" : "Klienti synchronizácie",
"None" : "Žiadny",
"Login" : "Prihlásenie",
"Plain" : "Neformátovaný",
"NT LAN Manager" : "NT LAN Manager",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "Email server",
"Open documentation" : "Otvoriť dokumentáciu",
"This is used for sending out notifications." : "Používa sa na odosielanie upozornení.",
@@ -103,7 +148,12 @@
"Send email" : "Odoslať email",
"Server-side encryption" : "Šifrovanie na serveri",
"Enable server-side encryption" : "Povoliť šifrovanie na serveri",
+ "Please read carefully before activating server-side encryption: " : "Prečítajte prosím pozorne pred použitím šifrovania na serveri:",
+ "Be aware that encryption always increases the file size." : "Majte na vedomí, že šifrovanie vždy zväčší veľkosť súborov.",
+ "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." : "Je dobré vytvárať pravidelné zálohy vašich dát, uistite sa, že v prípade šifrovania spolu s vašimi dátami zálohujete aj šifrovacie kľúče.",
+ "This is the final warning: Do you really want to enable encryption?" : "Toto je posledné varovanie: Vážne si prajete povoliť šifrovanie?",
"Enable encryption" : "Povoliť šifrovanie",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Nebol načítaný žiadny šifrovací modul, povoľte prosím šifrovací modul v menu aplikácií.",
"Select default encryption module:" : "Vybrať predvolený šifrovací modul:",
"Start migration" : "Začať migráciu",
"Security & setup warnings" : "Bezpečnosť a nastavenia upozornení",
@@ -115,6 +165,7 @@
"This means that there might be problems with certain characters in file names." : "To znamená, že sa môžu vyskytnúť problémy s niektorými znakmi v názvoch súborov.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Dôrazne doporučujeme nainštalovať na váš systém požadované balíčky podporujúce jednu z nasledovných znakových sád: %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\")" : "Inštalácia mimo koreňový priečinok domény a používanie systémového príkazu cron môže spôsobiť problém s generovaním správnej URL. Pre zabránenie týmto chybám nastavte prosím správnu cestu v svojom config.php súbore pre hodnotu \"overwrite.cli.url\" (Doporučujeme: \"%s\")",
+ "All checks passed." : "Všetky kontroly prešli úspešne.",
"Cron" : "Cron",
"Last cron job execution: %s." : "Posledný cron prebehol: %s.",
"Last cron job execution: %s. Something seems wrong." : "Posledný cron prebehol: %s. Zdá sa, že niečo nie je vporiadku.",
@@ -122,6 +173,7 @@
"Execute one task with each page loaded" : "Vykonať jednu úlohu s každým načítaní stránky",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je zaregistrovaná v službe WebCron a zavolá cron.php každých 15 minút cez http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Použiť systémovú službu cron na spúšťanie súboru cron.php každých 15 minút.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "Je potrebné, aby cron.php bol spustený systémovým používateľom \"%s\".",
"Version" : "Verzia",
"Sharing" : "Sprístupňovanie",
"Allow apps to use the Share API" : "Povoliť aplikáciám používať API pre sprístupňovanie",
@@ -133,6 +185,7 @@
"days" : "dni",
"Enforce expiration date" : "Vynútiť dátum expirácie",
"Allow resharing" : "Povoliť sprístupňovanie ďalej",
+ "Allow sharing with groups" : "Povoliť sprístupnenie so skupinami",
"Restrict users to only share with users in their groups" : "Povoliť používateľom sprístupňovanie obsahu len v rámci ich skupiny",
"Exclude groups from sharing" : "Nesprístupniť obsah skupinám",
"These groups will still be able to receive shares, but not to initiate them." : "Tieto skupiny nebudú mocť sprístupňovať obsah, môžu však stále čítať sprístupnené súbory",
@@ -144,33 +197,57 @@
"Theming" : "Vzhľady tém",
"Hardening and security guidance" : "Sprievodca vylepšením bezpečnosti",
"Developer documentation" : "Dokumentácia vývojára",
+ "by %s" : "od %s",
+ "%s-licensed" : "%s-licencovaný",
"Documentation:" : "Dokumentácia:",
"User documentation" : "Príručka používateľa",
"Admin documentation" : "Príručka administrátora",
+ "Visit website" : "Navštíviť webstránku",
+ "Report a bug" : "Nahlásiť chybu",
"Show description …" : "Zobraziť popis …",
"Hide description …" : "Skryť popis …",
+ "This app has an update available." : "Pre túto aplikáciu je dostupná aktualizácia.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Pre túto aplikáciu nie je zadaná minimálna verzia Nextcloudu. Toto v budúcnosti spôsobí chybu.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Pre túto aplikáciu nie je zadaná maximálna verzia Nextcloudu. Toto v budúcnosti spôsobí chybu.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Túto aplikáciu nemožno nainštalovať, pretože nie sú splnené nasledovné závislosti:",
"Enable only for specific groups" : "Povoliť len pre vybrané skupiny",
- "Uninstall App" : "Odinštalovanie aplikácie",
+ "Uninstall app" : "Odinštalovať aplikáciu",
+ "SSL Root Certificates" : "Koreňové certifikáty SSL",
"Common Name" : "Bežný názov",
"Valid until" : "Platný do",
"Issued By" : "Vydal",
"Valid until %s" : "Platný do %s",
"Import root certificate" : "Importovať koreňový certifikát",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: <strong>%s</strong><br>Prihlásiť sa môžete tu: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Pekný deň!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Dobrý deň,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n",
"Administrator documentation" : "Príručka administrátora",
"Online documentation" : "Online príručka",
"Forum" : "Fórum",
+ "Getting help" : "Získať pomoc",
"Commercial support" : "Komerčná podpora",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Využívate <strong>%s</strong> z <strong>%s</strong>",
"Profile picture" : "Avatar",
"Upload new" : "Nahrať nový",
+ "Select from Files" : "Vybrať zo súborov",
"Remove image" : "Zmazať obrázok",
+ "png or jpg, max. 20 MB" : "png alebo jpg, max. 20 MB",
+ "Picture provided by original account" : "Obrázok poskytnutý originálnym účtom",
"Cancel" : "Zrušiť",
+ "Choose as profile picture" : "Použiť ako obrázok avatara",
"Full name" : "Meno a priezvisko",
"No display name set" : "Zobrazované meno nie je nastavené",
"Email" : "Email",
"Your email address" : "Vaša emailová adresa",
"No email address set" : "Emailová adresa nie je nastavená",
+ "For password recovery and notifications" : "Pre obnovu hesla a oznámenia",
+ "Phone number" : "Telefónne číslo",
+ "Your phone number" : "Vaše telefónne číslo",
+ "Address" : "Adresa",
+ "Your postal address" : "Vaša poštová adresa",
+ "Website" : "Webstránka",
+ "Your website" : "Vaša webstránka",
+ "Twitter" : "Twitter",
"You are member of the following groups:" : "Ste členom nasledovných skupín:",
"Password" : "Heslo",
"Current password" : "Aktuálne heslo",
@@ -182,10 +259,20 @@
"Desktop client" : "Desktopový klient",
"Android app" : "Android aplikácia",
"iOS app" : "iOS aplikácia",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Ak chcete podporiť projekt {contributeopen}zapojte sa do vývoja{linkclose}, alebo {contributeopen}dajte o nás vedieť{linkclose}!",
"Show First Run Wizard again" : "Znovu zobraziť sprievodcu prvým spustením",
+ "Web, desktop and mobile clients currently logged in to your account." : "Weboví, desktopoví, alebo mobilní klienti práve prihlásení na váš účet.",
+ "Device" : "Zariadenie",
+ "Last activity" : "Posledná aktivita",
+ "Passcodes that give an app or device permissions to access your account." : "Prístupové heslá, ktoré dovolia aplikáciam alebo zariadeniam prístup na váš účet.",
"Name" : "Názov",
+ "App name" : "Názov aplikácie",
+ "Create new app password" : "Vytvoriť nové heslo aplikácie",
+ "Use the credentials below to configure your app or device." : "Pre konfiguráciu vašej aplikácie, alebo zariadenia použite nižšie uvedené prihlasovacie údaje.",
+ "For security reasons this password will only be shown once." : "Z dôvodu bezpečnosti toto heslo bude zobrazené iba jeden krát.",
"Username" : "Používateľské meno",
"Done" : "Hotovo",
+ "Follow us on Google Plus!" : "Sleduj nás na Google Plus!",
"Show storage location" : "Zobraziť umiestnenie úložiska",
"Show last log in" : "Zobraziť posledné prihlásenie",
"Show user backend" : "Zobraziť backend používateľa",
@@ -195,24 +282,37 @@
"Create" : "Vytvoriť",
"Admin Recovery Password" : "Obnovenie hesla administrátora",
"Enter the recovery password in order to recover the users files during password change" : "Zadajte heslo pre obnovenie súborov používateľa pri zmene hesla",
+ "Group name" : "Názov skupiny",
"Everyone" : "Všetci",
"Admins" : "Administrátori",
+ "Default quota" : "Predvolená kvóta",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Prosím zadajte kvótu úložného priestoru (napr.: \"512 MB​​\" alebo \"12 GB\")",
"Other" : "Iné",
+ "Group admin for" : "Administrátor skupiny pre",
"Quota" : "Kvóta",
+ "Storage location" : "Umiestnenie úložiska",
+ "User backend" : "Backend používateľa",
+ "Last login" : "Posledné prihlásenie",
"change full name" : "zmeniť meno a priezvisko",
"set new password" : "nastaviť nové heslo",
"change email address" : "zmeniť emailovú adresu",
"Default" : "Predvolené",
"log-level out of allowed range" : "úroveň logovania z povoleného rozpätia",
"Language changed" : "Jazyk zmenený",
+ "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin",
+ "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s",
+ "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?",
+ "Please wait...." : "Čakajte prosím...",
+ "iPhone" : "iPhone",
+ "add group" : "pridať skupinu",
"Everything (fatal issues, errors, warnings, info, debug)" : "Všetko (fatálne problémy, chyby, upozornenia, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, upozornenia, chyby a fatálne problémy",
"Warnings, errors and fatal issues" : "Upozornenia, chyby a fatálne problémy",
"Errors and fatal issues" : "Chyby a fatálne problémy",
"Fatal issues only" : "Len fatálne problémy",
"Log" : "Záznam",
+ "What to log" : "Čo sa má zaznamenávať",
"Download logfile" : "Stiahnuť súbor logu",
"More" : "Viac",
"Less" : "Menej",
@@ -223,13 +323,17 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Najmä pri používaní aplikácie na synchronizáciu s desktopom nie je databáza SQLite doporučená.",
"Experimental applications ahead" : "Experimentálna aplikácia v poradí",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentálne aplikácie nie sú preverované na bezpečnostné chyby, môžu byť nestabilné a veľmi sa meniť. Ich inštaláciou môžete spôsobiť stratu dát alebo bezpečnostné problémy.",
+ "Uninstall App" : "Odinštalovanie aplikácie",
"Enable experimental apps" : "Povoliť experimentálne aplikácie",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: %s<br>Prihlásiť sa môžete tu: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n",
+ "Add Group" : "Pridať skupinu",
"Group" : "Skupina",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Externé úložisko",
- "Updates" : "Aktualizácie"
+ "Default Quota" : "Predvolená kvóta",
+ "Full Name" : "Meno a priezvisko",
+ "Group Admin for" : "Administrátor skupiny pre",
+ "Storage Location" : "Umiestnenie úložiska",
+ "User Backend" : "Backend používateľa",
+ "Last Login" : "Posledné prihlásenie"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index 4cec0ddce20..35b1758f16b 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -35,9 +35,6 @@ OC.L10N.register(
"Unable to change mail address" : "Ni mogoče spremeniti naslova elektronske pošte.",
"Email saved" : "Elektronski naslov je shranjen",
"Couldn't remove app." : "Ni mogoče odstraniti programa.",
- "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
- "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s",
- "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s",
"Couldn't update app." : "Programa ni mogoče posodobiti.",
"Add trusted domain" : "Dodaj varno domeno",
"Migration in progress. Please wait until the migration is finished" : "V teku je selitev. Počakajte, da se zaključi.",
@@ -49,7 +46,6 @@ OC.L10N.register(
"_You have %n app update pending_::_You have %n app updates pending_" : ["Na čakanju je %n posodobitev","Na čakanju sta %n posodobitvi","Na čakanju so %n posodobitve","Na čakanju je %n posodobitev"],
"No apps found for your version" : "Za to različico ni na voljo noben vstavek",
"The app will be downloaded from the app store" : "Program bo prejet iz zbirke programov",
- "Please wait...." : "Počakajte ...",
"Error while disabling app" : "Napaka onemogočanja programa",
"Disable" : "Onemogoči",
"Enable" : "Omogoči",
@@ -180,7 +176,6 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ta aplikacija nima določene maksimalne NextCloud verzije. V prihodnosti bo to napaka.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Programa ni mogoče namestiti zaradi nerešenih odvisnosti:",
"Enable only for specific groups" : "Omogoči le za posamezne skupine",
- "Uninstall App" : "Odstrani program",
"SSL Root Certificates" : "Korenska potrdila SSL",
"Common Name" : "Splošno ime",
"Valid until" : "Veljavno do",
@@ -244,7 +239,11 @@ OC.L10N.register(
"Default" : "Privzeto",
"log-level out of allowed range" : "stopnja zapisovanja je izven dovoljenega območja",
"Language changed" : "Jezik je spremenjen",
+ "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
+ "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s",
+ "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?",
+ "Please wait...." : "Počakajte ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)",
"Info, warnings, errors and fatal issues" : "Podrobnosti, opozorila, napake in usodne dogodke",
"Warnings, errors and fatal issues" : "Opozorila, napake in usodne dogodke",
@@ -261,14 +260,10 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Uporabljena zbirka je SQLite. Za obsežnejše sisteme je priporočljiv prehod na drugo vrsto zbirke.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Uporaba SQLite ni priporočljiva iz varnostnih razlogov, to še posebej velja, če se sistem krajevno usklajuje z namizjem prek odjemalca.",
"Experimental applications ahead" : "Preizkusni programi",
+ "Uninstall App" : "Odstrani program",
"Enable experimental apps" : "Omogoči preizkusne programe",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Pozdravljeni,<br><br>obveščamo vas, da je račun %s pripravljen.<br><br>Uporabniško ime: %s<br>Dostop: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Pozdravljeni,\n\nobveščamo vas, da je račun %s pripravljen.\n\nUporabniško ime: %s\nDostop: %s\n",
- "Group" : "Skupina",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Zunanja podatkovna shramba",
- "Updates" : "Posodobitve",
- "An error occurred: {message}" : "Prišlo je do napake: {message}"
+ "Group" : "Skupina"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 7fb4fdd9402..e4a83311a03 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -33,9 +33,6 @@
"Unable to change mail address" : "Ni mogoče spremeniti naslova elektronske pošte.",
"Email saved" : "Elektronski naslov je shranjen",
"Couldn't remove app." : "Ni mogoče odstraniti programa.",
- "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
- "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s",
- "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s",
"Couldn't update app." : "Programa ni mogoče posodobiti.",
"Add trusted domain" : "Dodaj varno domeno",
"Migration in progress. Please wait until the migration is finished" : "V teku je selitev. Počakajte, da se zaključi.",
@@ -47,7 +44,6 @@
"_You have %n app update pending_::_You have %n app updates pending_" : ["Na čakanju je %n posodobitev","Na čakanju sta %n posodobitvi","Na čakanju so %n posodobitve","Na čakanju je %n posodobitev"],
"No apps found for your version" : "Za to različico ni na voljo noben vstavek",
"The app will be downloaded from the app store" : "Program bo prejet iz zbirke programov",
- "Please wait...." : "Počakajte ...",
"Error while disabling app" : "Napaka onemogočanja programa",
"Disable" : "Onemogoči",
"Enable" : "Omogoči",
@@ -178,7 +174,6 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ta aplikacija nima določene maksimalne NextCloud verzije. V prihodnosti bo to napaka.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Programa ni mogoče namestiti zaradi nerešenih odvisnosti:",
"Enable only for specific groups" : "Omogoči le za posamezne skupine",
- "Uninstall App" : "Odstrani program",
"SSL Root Certificates" : "Korenska potrdila SSL",
"Common Name" : "Splošno ime",
"Valid until" : "Veljavno do",
@@ -242,7 +237,11 @@
"Default" : "Privzeto",
"log-level out of allowed range" : "stopnja zapisovanja je izven dovoljenega območja",
"Language changed" : "Jezik je spremenjen",
+ "Admins can't remove themself from the admin group" : "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
+ "Unable to add user to group %s" : "Uporabnika ni mogoče dodati k skupini %s",
+ "Unable to remove user from group %s" : "Uporabnika ni mogoče odstraniti iz skupine %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?",
+ "Please wait...." : "Počakajte ...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)",
"Info, warnings, errors and fatal issues" : "Podrobnosti, opozorila, napake in usodne dogodke",
"Warnings, errors and fatal issues" : "Opozorila, napake in usodne dogodke",
@@ -259,14 +258,10 @@
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Uporabljena zbirka je SQLite. Za obsežnejše sisteme je priporočljiv prehod na drugo vrsto zbirke.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Uporaba SQLite ni priporočljiva iz varnostnih razlogov, to še posebej velja, če se sistem krajevno usklajuje z namizjem prek odjemalca.",
"Experimental applications ahead" : "Preizkusni programi",
+ "Uninstall App" : "Odstrani program",
"Enable experimental apps" : "Omogoči preizkusne programe",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Pozdravljeni,<br><br>obveščamo vas, da je račun %s pripravljen.<br><br>Uporabniško ime: %s<br>Dostop: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Pozdravljeni,\n\nobveščamo vas, da je račun %s pripravljen.\n\nUporabniško ime: %s\nDostop: %s\n",
- "Group" : "Skupina",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Zunanja podatkovna shramba",
- "Updates" : "Posodobitve",
- "An error occurred: {message}" : "Prišlo je do napake: {message}"
+ "Group" : "Skupina"
},"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/settings/l10n/sq.js b/settings/l10n/sq.js
index d419481a36f..0f55b61956e 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -26,23 +26,25 @@ OC.L10N.register(
"Invalid request" : "Kërkesë e pavlefshme",
"Invalid mail address" : "Adresë email e pavlefshme",
"A user with that name already exists." : "Ka tashmë një përdorues me këtë emër.",
- "Unable to create user." : "S’arrin të krijojë përdoruesi.",
+ "Unable to create user." : "S’u arrit krijimi i përdoruesit.",
"Your %s account was created" : "Llogaria juaj %s u krijua",
"Unable to delete user." : "S’arrin të fshijë përdorues.",
+ "Settings saved" : "Konfigurimet u ruajtën",
"Unable to change full name" : "S’arrin të ndryshojë emrin e plotë",
+ "Unable to change email address" : "Nuk mund të ndryshohet adresa e email-it",
"Your full name has been changed." : "Emri juaj i plotë u ndryshua.",
"Forbidden" : "E ndaluar",
"Invalid user" : "Përdorues i pavlefshëm",
"Unable to change mail address" : "S’arrin të ndryshojë adresë email",
"Email saved" : "Email-i u ruajt",
+ "Password confirmation is required" : "Kërkohet konfirmimi i fjalëkalimit",
"Couldn't remove app." : "S’hoqi dot aplikacionin.",
- "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin",
- "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s",
- "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s",
"Couldn't update app." : "S’përditësoi dot aplikacionin.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Jeni i sigurt se doni ta shtoni {domain} si një domain të besuar?",
"Add trusted domain" : "Shtoni përkatësi të besuar",
"Migration in progress. Please wait until the migration is finished" : "Migrimi në rrugë e sipër. Ju lutemi, pritni, teksa migrimi përfundon",
"Migration started …" : "Migrimi filloi …",
+ "Not saved" : "Nuk u ruajt",
"Sending..." : "Po dërgohet…",
"Official" : "Zyrtare",
"All" : "Krejt",
@@ -50,9 +52,10 @@ OC.L10N.register(
"_You have %n app update pending_::_You have %n app updates pending_" : ["Keni %n përditësim aplikacioni në pritje","Keni %n përditësime aplikacionesh në pritje"],
"No apps found for your version" : "S’u gjetën aplikacione për versionin tuaj",
"The app will be downloaded from the app store" : "Aplikacioni do të shkarkohet nga shitorja e aplikacioneve",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplikacionet zyrtare zhvillohen nga komuniteti dhe brenta tij. Ato ofrojnë funksionalitet qëndror dhe janë gati për përdorim.",
"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." : "Aplikacionet e miratuara ndërtohen nga zhvillues të besuar dhe kanë kaluar një kontroll të përciptë sigurie. Mirëmbahen aktivisht në një depo të hapur kodi dhe mirëmbajtësit e tyre i konsiderojnë të qëndrueshme për përdorime nga të rastit deri në ato normale.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ky aplikacion s’është kontrolluar për probleme sigurie dhe është i ri ose i njohur si i paqëndrueshëm. Instalojeni duke e mbajtur vetë përgjegjësinë.",
- "Please wait...." : "Ju lutemi, prisni…",
+ "Enabling app …" : "Duke aktivizuar aplikacionin ...",
"Error while disabling app" : "Gabim në çaktivizimin e aplikacionit",
"Disable" : "Çaktivizoje",
"Enable" : "Aktivizoje",
@@ -71,13 +74,40 @@ OC.L10N.register(
"Approved" : "Të miratuara",
"Experimental" : "Eksperimentale",
"No apps found for {query}" : "S’u gjetën aplikacione për {query}",
+ "Allow filesystem access" : "Lejo aksesin e sistemit të skedarëve",
"Disconnect" : "Shkëputu",
+ "Revoke" : "Anulo",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome për Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "Klient iOS",
+ "Android Client" : "Klient Android",
+ "Sync client - {os}" : "Sinkronizo klientin - {os}",
+ "This session" : "Ky sesion",
+ "Copy" : "Kopjo",
+ "Copied!" : "U kopjua!",
+ "Not supported!" : "Nuk suportohet!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtyp Ctrl-C për të kopjuar.",
"Error while loading browser sessions and device tokens" : "Gabim gjatë ngarkimit të sesioneve të shfletuesit dhe token-ësh pajisjesh",
"Error while creating device token" : "Gabim gjatë krijimit të token-ëve të pajisjejeve",
"Error while deleting the token" : "Gabim gjatë fshirjes së token-it",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ndodhi një gabim. Ju lutemi, ngarkoni një dëshmi PEM të koduar me ASCII.",
"Valid until {date}" : "E vlefshme deri më {date}",
"Delete" : "Fshije",
+ "Local" : "Lokale",
+ "Private" : "Private",
+ "Only visible to local users" : "E dukshme vetëm për përdoruesit lokal",
+ "Only visible to you" : "E dukshme vetëm për ju",
+ "Contacts" : "Kontaktet",
+ "Visible to local users and to trusted servers" : "E dukshme për përdoruesit lokal dhe serverat e besuar",
+ "Public" : "Publiku",
+ "Will be synced to a global and public address book" : "Do të sinkronizohet te një libër adresash publik dhe global",
"Select a profile picture" : "Përzgjidhni një foto profili",
"Very weak password" : "Fjalëkalim shumë i dobët",
"Weak password" : "Fjalëkalim i dobët",
@@ -92,7 +122,12 @@ OC.L10N.register(
"undo" : "zhbëje",
"never" : "kurrë",
"deleted {userName}" : "u fshi {userName}",
+ "Add group" : "Shto grup",
+ "Invalid quota value \"{val}\"" : "Vlera e kuotës \"{val}\" e pavlefshme",
+ "no group" : "asnjë grup",
+ "Password successfully changed" : "Fjalëkalimi u ndryshua me sukses",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Ndryshimi i fjalëkalimit do të sjellë humbje të dhënash, ngaqë rikthimi i të dhënave s’është i përdorshëm për këtë përdorues",
+ "Could not change the users email" : "Nuk mund të ndryshohej email-i i përdoruesëve",
"A valid username must be provided" : "Duhet dhënë një emër të vlefshëm përdoruesi",
"Error creating user: {message}" : "Gabim gjatë krijimit të përdoruesit: {message}",
"A valid password must be provided" : "Duhet dhënë një fjalëkalim i vlefshëm",
@@ -107,6 +142,8 @@ OC.L10N.register(
"Login" : "Hyrje",
"Plain" : "E thjeshtë",
"NT LAN Manager" : "Përgjegjës Rrjeti NT",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "Shërbyes email-esh",
"Open documentation" : "Hapni dokumentimin",
"This is used for sending out notifications." : "Ky përdoret për të dërguar njoftime.",
@@ -128,6 +165,7 @@ OC.L10N.register(
"Enable server-side encryption" : "Aktivizo fshehtëzim më anë të shërbyesit",
"Please read carefully before activating server-side encryption: " : "Ju lutemi, lexoni me kujdes përpara aktivizimit të fshehtëzimeve më anë shërbyesi: ",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Pasi të jetë aktivizuar fshehtëzimi, krejt kartelat e ngarkuara te shërbyesi nga kjo pikë e tutje do të fshehtëzohen pasi të jenë depozituar në shërbyes. Çaktivizimi i fshehtëzimit në një datë të mëvonshme do të jetë i mundur vetëm nëse moduli aktiv i fshehtëzimeve e mbulon këtë funksion, dhe nëse plotësohen krejt parakushtet (p.sh. caktimi i një kyçi rimarrjesh).",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Vetëm shifrimi nuk garaton sigurinë e sistemit. Ju lutem shikoni dokumentimin për më shumë informacion mbi mënyrën si applikacioni punon, dhe përdorimin e rasteve të suportuara.",
"Be aware that encryption always increases the file size." : "Kini parasysh që fshehtëzimi e rrit gjithnjë madhësinë e kartelës.",
"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." : "Është gjithmonë ide e mirë të krijohen kopjeruajtje të rregullta të të dhënave tuaja, në rast fshehtëzimi sigurohuni që bëni kopjeruajtje të kyçeve të fshehtëzimit, tok me të dhënat tuaja.",
"This is the final warning: Do you really want to enable encryption?" : "Ky është sinjalizimi përfundimtar: Doni vërtet të aktivizohet fshehtëzimi?",
@@ -143,6 +181,7 @@ OC.L10N.register(
"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." : "Rregullimi Vetëm-Lexim u aktivizua. Kjo parandalon rregullimin e disa parametrave përmes ndërfaqes web. Më tej, për çdo përditësim kartela lyp të kalohet dorazi si e shkrueshme.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Duket se PHP-ja është rregulluar që të heqë blloqe të brendshme dokumentimi. Kjo do t’i bëjë të papërdrshme disa aplikacione bazë.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Kjo ka gjasa të jetë shkaktuar nga një fshehtinë/përshpejtues i tillë si Zend OPcache ose eAccelerator.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Baza juaj e të dhënave nuk ekzekutohet me nivelin \"READ COMMITED\" e izolimit për ndërveprimet. Kjo mund të shkaktojë probleme, kur kryhen paralelisht disa veprime njëherësh.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Ka të instaluar %1$s nën versionin %2$s, për arsye qëndrueshmërie dhe performance këshillojmë të përditësohet me një version %1$s më të ri.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.",
"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." : "Kyçja e kartelave gjatë transaksioneve është e çaktivizuar, kjo mund të sjellë probleme me gjendje <em>race conditions</em>. Që të shmangni këto probleme, aktivizoni 'filelocking.enabled' te config.php. Për më tepër të dhëna, shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.",
@@ -151,6 +190,7 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Këshillojmë me forcë instalimin në sistemin tuaj të paketave të domosdoshme për mbulim të një prej vendoreve vijuese: %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\")" : "Nëse instalimi juaj nuk është bërë në rrënjë të përkatësisë dhe përdor cron sistemi, mund të ketë probleme me prodhimin e URL-së. Që të shmangen këto probleme, ju lutemi, jepini mundësisë \"overwrite.cli.url\" te kartela juaj config.php vlerën e shtegut webroot të instalimit tuaj (E këshillueshme: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "S’qe e mundur të përmbushej akti cron përmes CLI-së. U shfaqën gabimet teknike vijuese:",
+ "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>." : "Ju lutem riverifikoni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> udhëzuesin e instalimit </a>,, dhe kontrolloni për ndonjë gabim apo njoftim paraprak në <a href=\"%s\">log</a>.",
"All checks passed." : "I kaloi krejt kontrollet.",
"Cron" : "Cron",
"Last cron job execution: %s." : "Përmbushja e fundit e aktit cron: %s.",
@@ -159,6 +199,8 @@ OC.L10N.register(
"Execute one task with each page loaded" : "Kryeni vetëm një veprim me secilën prej faqeve të ngarkuara",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php është regjistruar te një shërbim webcron që ta aktivizojë cron.php-në çdo 15 minuta përmes http-je.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Përdorni shërbimin cron të sistemit që ta aktivizojë cron.php-në çdo 15 minuta.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "con.php duhet të ekzekutohet bga përdoruesi i sistemit \"%s\".",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Për të bërë këtë ekzekutim ju duhet shtesa PHP posix. Shikoni {linkstart} dokumentacionin e PHP {linkend} pë më shumë detaje.",
"Version" : "Version",
"Sharing" : "Ndarje me të tjerët",
"Allow apps to use the Share API" : "Lejoni aplikacionet të përdorin API Share",
@@ -175,7 +217,11 @@ OC.L10N.register(
"Exclude groups from sharing" : "Përjashtoni grupe nga ndarjet",
"These groups will still be able to receive shares, but not to initiate them." : "Këto grupe prapë do të jenë në gjendje të marrin ndarje nga të tjerët, por jo të fillojnë të tilla.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Lejo vetëplotësim emra përdoruesish te dialogu i ndarjeve me të tjerët. Nëse kjo është e çaktivizuar, do të duhet të jepen emra përdoruesish.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Shfaqni tekstin e mospranimit në linkun publik të faqes së ngarkuar. (Shfaqet vetëm kur lista e skedarit është e fshehur.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ky tekst do të shfaqet në linkun publik të faqes së ngarkuar kur lista e skedarit të jetë e fshehur.",
"Tips & tricks" : "Ndihmëza & rrengje",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite po përdoret si bazë të dhënash e programit klient. Për instalime më të ngarkuara, këshillojmë të kalohet në një program tjetër klient baze të dhënash.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Kjo është veçanërisht e rekomanduar gjatë përdorimit të desktopit të klientit për sinkronizimin skedari. ",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Për të kaluar te një tjetër bazë të dhënash përdorni mjetin rresht urdhrash: 'occ db:convert-type', ose shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.",
"How to do backups" : "Si të bëhen kopjeruajtje",
"Advanced monitoring" : "Mbikëqyrje e mëtejshme",
@@ -194,19 +240,24 @@ OC.L10N.register(
"Show description …" : "Shfaq përshkrim …",
"Hide description …" : "Fshihe përshkrimin …",
"This app has an update available." : "Ka gati një përditësim për këtë aplikacion.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ky aplikacion nuk ka të caktuar një minimum versioni të Nextcloud. Ky do të jetë një gabim në të ardhmen.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ky aplikacion nuk ka të caktuar një maksimum versioni të Nextcloud. Ky do të jetë një gabim në të ardhmen.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ky aplikacion s’mund të instalohet, ngaqë për të nuk plotësohen varësitë vijuese:",
"Enable only for specific groups" : "Aktivizoje vetëm për grupe të veçantë",
- "Uninstall App" : "Çinstaloje Aplikacionin",
+ "Uninstall app" : "Çinstaloje Aplikacionin",
"SSL Root Certificates" : "Dëshmi SSL Rrënjë",
"Common Name" : "Emër i Rëndomtë",
"Valid until" : "E vlefshme deri më",
"Issued By" : "Lëshuar Nga",
"Valid until %s" : "E vlefshme deri më %s",
"Import root certificate" : "Importoni dëshmi rrënjë",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që tani keni një llogari %s.<br><br>Emri juaj i përdoruesit: <strong>%s</strong><br> Hyni në të te: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Gëzuar!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Njatjeta,\n\nthjesht po ju bëjmë të ditur që tani keni një llogari %s.\n\nEmri juaj i përdoruesit: %s\nHyni në të te: %s\n\n",
"Administrator documentation" : "Dokumentim për përgjegjës",
"Online documentation" : "Dokumentim në Internet",
"Forum" : "Forum",
+ "Getting help" : "Kërkoni ndihmë",
"Commercial support" : "Asistencë komerciale",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Po përdorni <strong>%s</strong> nga <strong>%s</strong>",
"Profile picture" : "Foto profili",
@@ -223,6 +274,14 @@ OC.L10N.register(
"Your email address" : "Adresa juaj email",
"No email address set" : "S’është caktuar adresë email",
"For password recovery and notifications" : "Për rimarrje fjalëkalimesh dhe njoftime ",
+ "Phone number" : "Numri i telefonit",
+ "Your phone number" : "Numri juaj i telefonit",
+ "Address" : "Adresa",
+ "Your postal address" : "Adresa juaj postale",
+ "Website" : "Website",
+ "Your website" : "Website-i juaj",
+ "Twitter" : "Twitter",
+ "Your Twitter handle" : "Emri i përdoruesit tuaj në Twitter",
"You are member of the following groups:" : "Jeni anëtar i grupeve vijuese:",
"Password" : "Fjalëkalim",
"Current password" : "Fjalëkalimi i tanishëm",
@@ -234,12 +293,25 @@ OC.L10N.register(
"Desktop client" : "Klient desktopi",
"Android app" : "Aplikacion për Android",
"iOS app" : "Aplikacion për iOS",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Nëse doni të mbështesni projektin {contributeopen} bashkohu me grupin e zhvillimit {linkclose} ose {contributeopen} përhap fjalën {linkclose}!",
"Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë",
+ "Web, desktop and mobile clients currently logged in to your account." : "Klientë në rrjet, desktop dhe celular kanë hyrë aktualisht në llogarinë tuaj.",
+ "Device" : "Pajisje",
+ "Last activity" : "Aktiviteti i fundit",
+ "Passcodes that give an app or device permissions to access your account." : "Fjalëkalimet të cilat i japin një aplikacioni ose pajisje lejen për të aksesuar llogarinë tuaj.",
"Name" : "Emër",
"App name" : "Emër aplikacioni",
"Create new app password" : "Krijoni fjalëkalim aplikacioni të ri",
+ "Use the credentials below to configure your app or device." : "Përdorni kredencialet e mëposhtme për të konfiguruar aplikacionin apo pajisjen tuaj.",
+ "For security reasons this password will only be shown once." : "Për arsye siguri ky fjalëkalim do të shofaqet vetëm një herv.",
"Username" : "Emër përdoruesi",
"Done" : "U bë",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Zhvilluar nga {communityopen}komuniteti Nextcloud {linkclose}, {githubopen}kodi i hapur{linkclose} iështë licensuar sipar {licenseopen}AGPL{linkclose}.",
+ "Follow us on Google Plus!" : "Na ndiqni në Google Plus!",
+ "Like our facebook page!" : "Pëlqeni faqen tonë në facebook!",
+ "Subscribe to our twitter channel!" : "Abonohuni në kanalin tonë në twitter!",
+ "Subscribe to our news feed!" : "Abonohuni në kanalin tonë në twitter!",
+ "Subscribe to our newsletter!" : "Abonohuni në buletinin tonë informativ!",
"Show storage location" : "Shfaq vendndodhje depozite",
"Show last log in" : "Shfaq hyrjen e fundit",
"Show user backend" : "Shfaq programin klient të përdoruesit",
@@ -249,18 +321,30 @@ OC.L10N.register(
"Create" : "Krijoje",
"Admin Recovery Password" : "Fjalëkalim Rikthimesh Nga Përgjegjësi",
"Enter the recovery password in order to recover the users files during password change" : "Jepni fjalëkalim rimarrje që të mund të rimerrni kartela përdoruesi gjatë ndryshimit të fjalëkalimit",
+ "Group name" : "Emri i grupit",
"Everyone" : "Kushdo",
"Admins" : "Administratorë",
+ "Default quota" : "Kuota Parazgjedhje",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ju lutemi, jepni kuotë depozitimi (psh: \"512 MB\" ose \"12 GB\")",
"Other" : "Tjetër",
+ "Group admin for" : "Administratori i grupit për",
"Quota" : "Kuota",
+ "Storage location" : "Vendndodhje Depozite",
+ "User backend" : "Program klient i përdoruesit",
+ "Last login" : "Hyrja e fundit",
"change full name" : "ndryshoni emrin e plotë",
"set new password" : "caktoni fjalëkalim të ri",
"change email address" : "ndryshoni adresën email",
"Default" : "Parazgjedhje",
"log-level out of allowed range" : "nivel regjistrimi jashtë intervalit të lejuar",
"Language changed" : "Gjuha u ndryshua",
+ "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin",
+ "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s",
+ "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeni vërtet i sigurt se doni të shtoni \"{domain}\" si përkatësi të besuar?",
+ "Please wait...." : "Ju lutemi, prisni…",
+ "iPhone" : "iPhone",
+ "add group" : "shtoni grup",
"Everything (fatal issues, errors, warnings, info, debug)" : "Gjithçka (probleme fatale, gabime, sinjalizime, të dhëna, diagnostikim)",
"Info, warnings, errors and fatal issues" : "Të dhëna, sinjalizime, gabime dhe probleme fatale",
"Warnings, errors and fatal issues" : "Sinjalizime, gabime dhe probleme fatale",
@@ -278,14 +362,18 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Përdorimi i SQLite-it nuk këshillohet veçanërisht kur përdoret klienti desktop për njëkohësim kartelash.",
"Experimental applications ahead" : "Keni përpara aplikacione eksperimentale",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikacionet eksperimentale nuk kontrollohen për probleme sigurie, mund të jenë të rinj ose të njohur si të paqëndrueshëm, dhe nën zhvillim intensiv. Instalimi i tyre mund të shkaktojë humbje të dhënash ose cenim të sigurisë.",
+ "Uninstall App" : "Çinstaloje Aplikacionin",
"Enable experimental apps" : "Aktivizo aplikacione eksperimentale",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që tani keni një llogar %s.<br><br>Emri juaj i përdoruesit: %s<br>Hyni në të te: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Njatjeta,\n\nthjesht po ju bëjmë të ditur që tani keni një llogari %s.\n\nEmri juaj i përdoruesit: %s\nHyni në të te: %s\n\n",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Nëse doni të mbështesni projektin\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">bashkohu skuadrës së zhvillimit</a>\n⇥⇥<or></or>\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">shpërndaj fjalën</a>!",
+ "Add Group" : "Shtoni Grup",
"Group" : "Grup",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Depozitim i Jashtëm",
- "Updates" : "Përditësime",
- "An error occurred: {message}" : "Ndodhi një gabim: {message}"
+ "Default Quota" : "Kuota Parazgjedhje",
+ "Full Name" : "Emri i Plotë",
+ "Group Admin for" : "Admini Grupi për",
+ "Storage Location" : "Vendndodhje Depozite",
+ "User Backend" : "Program klient i përdoruesit",
+ "Last Login" : "Hyrja e fundit"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json
index 8e46003c070..62d72bb52dc 100644
--- a/settings/l10n/sq.json
+++ b/settings/l10n/sq.json
@@ -24,23 +24,25 @@
"Invalid request" : "Kërkesë e pavlefshme",
"Invalid mail address" : "Adresë email e pavlefshme",
"A user with that name already exists." : "Ka tashmë një përdorues me këtë emër.",
- "Unable to create user." : "S’arrin të krijojë përdoruesi.",
+ "Unable to create user." : "S’u arrit krijimi i përdoruesit.",
"Your %s account was created" : "Llogaria juaj %s u krijua",
"Unable to delete user." : "S’arrin të fshijë përdorues.",
+ "Settings saved" : "Konfigurimet u ruajtën",
"Unable to change full name" : "S’arrin të ndryshojë emrin e plotë",
+ "Unable to change email address" : "Nuk mund të ndryshohet adresa e email-it",
"Your full name has been changed." : "Emri juaj i plotë u ndryshua.",
"Forbidden" : "E ndaluar",
"Invalid user" : "Përdorues i pavlefshëm",
"Unable to change mail address" : "S’arrin të ndryshojë adresë email",
"Email saved" : "Email-i u ruajt",
+ "Password confirmation is required" : "Kërkohet konfirmimi i fjalëkalimit",
"Couldn't remove app." : "S’hoqi dot aplikacionin.",
- "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin",
- "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s",
- "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s",
"Couldn't update app." : "S’përditësoi dot aplikacionin.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Jeni i sigurt se doni ta shtoni {domain} si një domain të besuar?",
"Add trusted domain" : "Shtoni përkatësi të besuar",
"Migration in progress. Please wait until the migration is finished" : "Migrimi në rrugë e sipër. Ju lutemi, pritni, teksa migrimi përfundon",
"Migration started …" : "Migrimi filloi …",
+ "Not saved" : "Nuk u ruajt",
"Sending..." : "Po dërgohet…",
"Official" : "Zyrtare",
"All" : "Krejt",
@@ -48,9 +50,10 @@
"_You have %n app update pending_::_You have %n app updates pending_" : ["Keni %n përditësim aplikacioni në pritje","Keni %n përditësime aplikacionesh në pritje"],
"No apps found for your version" : "S’u gjetën aplikacione për versionin tuaj",
"The app will be downloaded from the app store" : "Aplikacioni do të shkarkohet nga shitorja e aplikacioneve",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplikacionet zyrtare zhvillohen nga komuniteti dhe brenta tij. Ato ofrojnë funksionalitet qëndror dhe janë gati për përdorim.",
"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." : "Aplikacionet e miratuara ndërtohen nga zhvillues të besuar dhe kanë kaluar një kontroll të përciptë sigurie. Mirëmbahen aktivisht në një depo të hapur kodi dhe mirëmbajtësit e tyre i konsiderojnë të qëndrueshme për përdorime nga të rastit deri në ato normale.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ky aplikacion s’është kontrolluar për probleme sigurie dhe është i ri ose i njohur si i paqëndrueshëm. Instalojeni duke e mbajtur vetë përgjegjësinë.",
- "Please wait...." : "Ju lutemi, prisni…",
+ "Enabling app …" : "Duke aktivizuar aplikacionin ...",
"Error while disabling app" : "Gabim në çaktivizimin e aplikacionit",
"Disable" : "Çaktivizoje",
"Enable" : "Aktivizoje",
@@ -69,13 +72,40 @@
"Approved" : "Të miratuara",
"Experimental" : "Eksperimentale",
"No apps found for {query}" : "S’u gjetën aplikacione për {query}",
+ "Allow filesystem access" : "Lejo aksesin e sistemit të skedarëve",
"Disconnect" : "Shkëputu",
+ "Revoke" : "Anulo",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome për Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "Klient iOS",
+ "Android Client" : "Klient Android",
+ "Sync client - {os}" : "Sinkronizo klientin - {os}",
+ "This session" : "Ky sesion",
+ "Copy" : "Kopjo",
+ "Copied!" : "U kopjua!",
+ "Not supported!" : "Nuk suportohet!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtyp Ctrl-C për të kopjuar.",
"Error while loading browser sessions and device tokens" : "Gabim gjatë ngarkimit të sesioneve të shfletuesit dhe token-ësh pajisjesh",
"Error while creating device token" : "Gabim gjatë krijimit të token-ëve të pajisjejeve",
"Error while deleting the token" : "Gabim gjatë fshirjes së token-it",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ndodhi një gabim. Ju lutemi, ngarkoni një dëshmi PEM të koduar me ASCII.",
"Valid until {date}" : "E vlefshme deri më {date}",
"Delete" : "Fshije",
+ "Local" : "Lokale",
+ "Private" : "Private",
+ "Only visible to local users" : "E dukshme vetëm për përdoruesit lokal",
+ "Only visible to you" : "E dukshme vetëm për ju",
+ "Contacts" : "Kontaktet",
+ "Visible to local users and to trusted servers" : "E dukshme për përdoruesit lokal dhe serverat e besuar",
+ "Public" : "Publiku",
+ "Will be synced to a global and public address book" : "Do të sinkronizohet te një libër adresash publik dhe global",
"Select a profile picture" : "Përzgjidhni një foto profili",
"Very weak password" : "Fjalëkalim shumë i dobët",
"Weak password" : "Fjalëkalim i dobët",
@@ -90,7 +120,12 @@
"undo" : "zhbëje",
"never" : "kurrë",
"deleted {userName}" : "u fshi {userName}",
+ "Add group" : "Shto grup",
+ "Invalid quota value \"{val}\"" : "Vlera e kuotës \"{val}\" e pavlefshme",
+ "no group" : "asnjë grup",
+ "Password successfully changed" : "Fjalëkalimi u ndryshua me sukses",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Ndryshimi i fjalëkalimit do të sjellë humbje të dhënash, ngaqë rikthimi i të dhënave s’është i përdorshëm për këtë përdorues",
+ "Could not change the users email" : "Nuk mund të ndryshohej email-i i përdoruesëve",
"A valid username must be provided" : "Duhet dhënë një emër të vlefshëm përdoruesi",
"Error creating user: {message}" : "Gabim gjatë krijimit të përdoruesit: {message}",
"A valid password must be provided" : "Duhet dhënë një fjalëkalim i vlefshëm",
@@ -105,6 +140,8 @@
"Login" : "Hyrje",
"Plain" : "E thjeshtë",
"NT LAN Manager" : "Përgjegjës Rrjeti NT",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "Shërbyes email-esh",
"Open documentation" : "Hapni dokumentimin",
"This is used for sending out notifications." : "Ky përdoret për të dërguar njoftime.",
@@ -126,6 +163,7 @@
"Enable server-side encryption" : "Aktivizo fshehtëzim më anë të shërbyesit",
"Please read carefully before activating server-side encryption: " : "Ju lutemi, lexoni me kujdes përpara aktivizimit të fshehtëzimeve më anë shërbyesi: ",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Pasi të jetë aktivizuar fshehtëzimi, krejt kartelat e ngarkuara te shërbyesi nga kjo pikë e tutje do të fshehtëzohen pasi të jenë depozituar në shërbyes. Çaktivizimi i fshehtëzimit në një datë të mëvonshme do të jetë i mundur vetëm nëse moduli aktiv i fshehtëzimeve e mbulon këtë funksion, dhe nëse plotësohen krejt parakushtet (p.sh. caktimi i një kyçi rimarrjesh).",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Vetëm shifrimi nuk garaton sigurinë e sistemit. Ju lutem shikoni dokumentimin për më shumë informacion mbi mënyrën si applikacioni punon, dhe përdorimin e rasteve të suportuara.",
"Be aware that encryption always increases the file size." : "Kini parasysh që fshehtëzimi e rrit gjithnjë madhësinë e kartelës.",
"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." : "Është gjithmonë ide e mirë të krijohen kopjeruajtje të rregullta të të dhënave tuaja, në rast fshehtëzimi sigurohuni që bëni kopjeruajtje të kyçeve të fshehtëzimit, tok me të dhënat tuaja.",
"This is the final warning: Do you really want to enable encryption?" : "Ky është sinjalizimi përfundimtar: Doni vërtet të aktivizohet fshehtëzimi?",
@@ -141,6 +179,7 @@
"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." : "Rregullimi Vetëm-Lexim u aktivizua. Kjo parandalon rregullimin e disa parametrave përmes ndërfaqes web. Më tej, për çdo përditësim kartela lyp të kalohet dorazi si e shkrueshme.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Duket se PHP-ja është rregulluar që të heqë blloqe të brendshme dokumentimi. Kjo do t’i bëjë të papërdrshme disa aplikacione bazë.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Kjo ka gjasa të jetë shkaktuar nga një fshehtinë/përshpejtues i tillë si Zend OPcache ose eAccelerator.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Baza juaj e të dhënave nuk ekzekutohet me nivelin \"READ COMMITED\" e izolimit për ndërveprimet. Kjo mund të shkaktojë probleme, kur kryhen paralelisht disa veprime njëherësh.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Ka të instaluar %1$s nën versionin %2$s, për arsye qëndrueshmërie dhe performance këshillojmë të përditësohet me një version %1$s më të ri.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.",
"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." : "Kyçja e kartelave gjatë transaksioneve është e çaktivizuar, kjo mund të sjellë probleme me gjendje <em>race conditions</em>. Që të shmangni këto probleme, aktivizoni 'filelocking.enabled' te config.php. Për më tepër të dhëna, shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.",
@@ -149,6 +188,7 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Këshillojmë me forcë instalimin në sistemin tuaj të paketave të domosdoshme për mbulim të një prej vendoreve vijuese: %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\")" : "Nëse instalimi juaj nuk është bërë në rrënjë të përkatësisë dhe përdor cron sistemi, mund të ketë probleme me prodhimin e URL-së. Që të shmangen këto probleme, ju lutemi, jepini mundësisë \"overwrite.cli.url\" te kartela juaj config.php vlerën e shtegut webroot të instalimit tuaj (E këshillueshme: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "S’qe e mundur të përmbushej akti cron përmes CLI-së. U shfaqën gabimet teknike vijuese:",
+ "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>." : "Ju lutem riverifikoni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> udhëzuesin e instalimit </a>,, dhe kontrolloni për ndonjë gabim apo njoftim paraprak në <a href=\"%s\">log</a>.",
"All checks passed." : "I kaloi krejt kontrollet.",
"Cron" : "Cron",
"Last cron job execution: %s." : "Përmbushja e fundit e aktit cron: %s.",
@@ -157,6 +197,8 @@
"Execute one task with each page loaded" : "Kryeni vetëm një veprim me secilën prej faqeve të ngarkuara",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php është regjistruar te një shërbim webcron që ta aktivizojë cron.php-në çdo 15 minuta përmes http-je.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Përdorni shërbimin cron të sistemit që ta aktivizojë cron.php-në çdo 15 minuta.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "con.php duhet të ekzekutohet bga përdoruesi i sistemit \"%s\".",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Për të bërë këtë ekzekutim ju duhet shtesa PHP posix. Shikoni {linkstart} dokumentacionin e PHP {linkend} pë më shumë detaje.",
"Version" : "Version",
"Sharing" : "Ndarje me të tjerët",
"Allow apps to use the Share API" : "Lejoni aplikacionet të përdorin API Share",
@@ -173,7 +215,11 @@
"Exclude groups from sharing" : "Përjashtoni grupe nga ndarjet",
"These groups will still be able to receive shares, but not to initiate them." : "Këto grupe prapë do të jenë në gjendje të marrin ndarje nga të tjerët, por jo të fillojnë të tilla.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Lejo vetëplotësim emra përdoruesish te dialogu i ndarjeve me të tjerët. Nëse kjo është e çaktivizuar, do të duhet të jepen emra përdoruesish.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Shfaqni tekstin e mospranimit në linkun publik të faqes së ngarkuar. (Shfaqet vetëm kur lista e skedarit është e fshehur.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ky tekst do të shfaqet në linkun publik të faqes së ngarkuar kur lista e skedarit të jetë e fshehur.",
"Tips & tricks" : "Ndihmëza & rrengje",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite po përdoret si bazë të dhënash e programit klient. Për instalime më të ngarkuara, këshillojmë të kalohet në një program tjetër klient baze të dhënash.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Kjo është veçanërisht e rekomanduar gjatë përdorimit të desktopit të klientit për sinkronizimin skedari. ",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Për të kaluar te një tjetër bazë të dhënash përdorni mjetin rresht urdhrash: 'occ db:convert-type', ose shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.",
"How to do backups" : "Si të bëhen kopjeruajtje",
"Advanced monitoring" : "Mbikëqyrje e mëtejshme",
@@ -192,19 +238,24 @@
"Show description …" : "Shfaq përshkrim …",
"Hide description …" : "Fshihe përshkrimin …",
"This app has an update available." : "Ka gati një përditësim për këtë aplikacion.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ky aplikacion nuk ka të caktuar një minimum versioni të Nextcloud. Ky do të jetë një gabim në të ardhmen.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ky aplikacion nuk ka të caktuar një maksimum versioni të Nextcloud. Ky do të jetë një gabim në të ardhmen.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ky aplikacion s’mund të instalohet, ngaqë për të nuk plotësohen varësitë vijuese:",
"Enable only for specific groups" : "Aktivizoje vetëm për grupe të veçantë",
- "Uninstall App" : "Çinstaloje Aplikacionin",
+ "Uninstall app" : "Çinstaloje Aplikacionin",
"SSL Root Certificates" : "Dëshmi SSL Rrënjë",
"Common Name" : "Emër i Rëndomtë",
"Valid until" : "E vlefshme deri më",
"Issued By" : "Lëshuar Nga",
"Valid until %s" : "E vlefshme deri më %s",
"Import root certificate" : "Importoni dëshmi rrënjë",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që tani keni një llogari %s.<br><br>Emri juaj i përdoruesit: <strong>%s</strong><br> Hyni në të te: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Gëzuar!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Njatjeta,\n\nthjesht po ju bëjmë të ditur që tani keni një llogari %s.\n\nEmri juaj i përdoruesit: %s\nHyni në të te: %s\n\n",
"Administrator documentation" : "Dokumentim për përgjegjës",
"Online documentation" : "Dokumentim në Internet",
"Forum" : "Forum",
+ "Getting help" : "Kërkoni ndihmë",
"Commercial support" : "Asistencë komerciale",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Po përdorni <strong>%s</strong> nga <strong>%s</strong>",
"Profile picture" : "Foto profili",
@@ -221,6 +272,14 @@
"Your email address" : "Adresa juaj email",
"No email address set" : "S’është caktuar adresë email",
"For password recovery and notifications" : "Për rimarrje fjalëkalimesh dhe njoftime ",
+ "Phone number" : "Numri i telefonit",
+ "Your phone number" : "Numri juaj i telefonit",
+ "Address" : "Adresa",
+ "Your postal address" : "Adresa juaj postale",
+ "Website" : "Website",
+ "Your website" : "Website-i juaj",
+ "Twitter" : "Twitter",
+ "Your Twitter handle" : "Emri i përdoruesit tuaj në Twitter",
"You are member of the following groups:" : "Jeni anëtar i grupeve vijuese:",
"Password" : "Fjalëkalim",
"Current password" : "Fjalëkalimi i tanishëm",
@@ -232,12 +291,25 @@
"Desktop client" : "Klient desktopi",
"Android app" : "Aplikacion për Android",
"iOS app" : "Aplikacion për iOS",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Nëse doni të mbështesni projektin {contributeopen} bashkohu me grupin e zhvillimit {linkclose} ose {contributeopen} përhap fjalën {linkclose}!",
"Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë",
+ "Web, desktop and mobile clients currently logged in to your account." : "Klientë në rrjet, desktop dhe celular kanë hyrë aktualisht në llogarinë tuaj.",
+ "Device" : "Pajisje",
+ "Last activity" : "Aktiviteti i fundit",
+ "Passcodes that give an app or device permissions to access your account." : "Fjalëkalimet të cilat i japin një aplikacioni ose pajisje lejen për të aksesuar llogarinë tuaj.",
"Name" : "Emër",
"App name" : "Emër aplikacioni",
"Create new app password" : "Krijoni fjalëkalim aplikacioni të ri",
+ "Use the credentials below to configure your app or device." : "Përdorni kredencialet e mëposhtme për të konfiguruar aplikacionin apo pajisjen tuaj.",
+ "For security reasons this password will only be shown once." : "Për arsye siguri ky fjalëkalim do të shofaqet vetëm një herv.",
"Username" : "Emër përdoruesi",
"Done" : "U bë",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Zhvilluar nga {communityopen}komuniteti Nextcloud {linkclose}, {githubopen}kodi i hapur{linkclose} iështë licensuar sipar {licenseopen}AGPL{linkclose}.",
+ "Follow us on Google Plus!" : "Na ndiqni në Google Plus!",
+ "Like our facebook page!" : "Pëlqeni faqen tonë në facebook!",
+ "Subscribe to our twitter channel!" : "Abonohuni në kanalin tonë në twitter!",
+ "Subscribe to our news feed!" : "Abonohuni në kanalin tonë në twitter!",
+ "Subscribe to our newsletter!" : "Abonohuni në buletinin tonë informativ!",
"Show storage location" : "Shfaq vendndodhje depozite",
"Show last log in" : "Shfaq hyrjen e fundit",
"Show user backend" : "Shfaq programin klient të përdoruesit",
@@ -247,18 +319,30 @@
"Create" : "Krijoje",
"Admin Recovery Password" : "Fjalëkalim Rikthimesh Nga Përgjegjësi",
"Enter the recovery password in order to recover the users files during password change" : "Jepni fjalëkalim rimarrje që të mund të rimerrni kartela përdoruesi gjatë ndryshimit të fjalëkalimit",
+ "Group name" : "Emri i grupit",
"Everyone" : "Kushdo",
"Admins" : "Administratorë",
+ "Default quota" : "Kuota Parazgjedhje",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ju lutemi, jepni kuotë depozitimi (psh: \"512 MB\" ose \"12 GB\")",
"Other" : "Tjetër",
+ "Group admin for" : "Administratori i grupit për",
"Quota" : "Kuota",
+ "Storage location" : "Vendndodhje Depozite",
+ "User backend" : "Program klient i përdoruesit",
+ "Last login" : "Hyrja e fundit",
"change full name" : "ndryshoni emrin e plotë",
"set new password" : "caktoni fjalëkalim të ri",
"change email address" : "ndryshoni adresën email",
"Default" : "Parazgjedhje",
"log-level out of allowed range" : "nivel regjistrimi jashtë intervalit të lejuar",
"Language changed" : "Gjuha u ndryshua",
+ "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin",
+ "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s",
+ "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeni vërtet i sigurt se doni të shtoni \"{domain}\" si përkatësi të besuar?",
+ "Please wait...." : "Ju lutemi, prisni…",
+ "iPhone" : "iPhone",
+ "add group" : "shtoni grup",
"Everything (fatal issues, errors, warnings, info, debug)" : "Gjithçka (probleme fatale, gabime, sinjalizime, të dhëna, diagnostikim)",
"Info, warnings, errors and fatal issues" : "Të dhëna, sinjalizime, gabime dhe probleme fatale",
"Warnings, errors and fatal issues" : "Sinjalizime, gabime dhe probleme fatale",
@@ -276,14 +360,18 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Përdorimi i SQLite-it nuk këshillohet veçanërisht kur përdoret klienti desktop për njëkohësim kartelash.",
"Experimental applications ahead" : "Keni përpara aplikacione eksperimentale",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikacionet eksperimentale nuk kontrollohen për probleme sigurie, mund të jenë të rinj ose të njohur si të paqëndrueshëm, dhe nën zhvillim intensiv. Instalimi i tyre mund të shkaktojë humbje të dhënash ose cenim të sigurisë.",
+ "Uninstall App" : "Çinstaloje Aplikacionin",
"Enable experimental apps" : "Aktivizo aplikacione eksperimentale",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që tani keni një llogar %s.<br><br>Emri juaj i përdoruesit: %s<br>Hyni në të te: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Njatjeta,\n\nthjesht po ju bëjmë të ditur që tani keni një llogari %s.\n\nEmri juaj i përdoruesit: %s\nHyni në të te: %s\n\n",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Nëse doni të mbështesni projektin\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">bashkohu skuadrës së zhvillimit</a>\n⇥⇥<or></or>\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">shpërndaj fjalën</a>!",
+ "Add Group" : "Shtoni Grup",
"Group" : "Grup",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Depozitim i Jashtëm",
- "Updates" : "Përditësime",
- "An error occurred: {message}" : "Ndodhi një gabim: {message}"
+ "Default Quota" : "Kuota Parazgjedhje",
+ "Full Name" : "Emri i Plotë",
+ "Group Admin for" : "Admini Grupi për",
+ "Storage Location" : "Vendndodhje Depozite",
+ "User Backend" : "Program klient i përdoruesit",
+ "Last Login" : "Hyrja e fundit"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js
index 3aa65db9519..2ee6f9f0ce6 100644
--- a/settings/l10n/sr.js
+++ b/settings/l10n/sr.js
@@ -34,9 +34,6 @@ OC.L10N.register(
"Unable to change mail address" : "Не могу да изменим е-адресу",
"Email saved" : "Е-порука сачувана",
"Couldn't remove app." : "Не могу да уклоним апликацију.",
- "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе",
- "Unable to add user to group %s" : "Не могу да додам корисника у групу %s",
- "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Couldn't update app." : "Не могу да ажурирам апликацију.",
"Add trusted domain" : "Додај поуздан домен",
"Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши",
@@ -48,7 +45,6 @@ OC.L10N.register(
"No apps found for your version" : "Нема апликација за вашу верзију",
"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." : "Одобрене апликације су развили проверени програмери и апликације су прошле основне безбедносне провере. Оне се активно одржавају у репозиторијуму за апликације отвореног кода и њихови одржаватељи сматрају да су стабилне за уобичајену употребу.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ова апликација није проверена по питању безбедности и нова је или зна да буде нестабилна. Инсталирате је на сопствену одговорност.",
- "Please wait...." : "Сачекајте…",
"Error while disabling app" : "Грешка при искључивању апликације",
"Disable" : "Искључи",
"Enable" : "Укључи",
@@ -161,7 +157,6 @@ OC.L10N.register(
"Hide description …" : "Сакриј опис…",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Апликација се не може инсталирати јер следеће зависности нису испуњене:",
"Enable only for specific groups" : "Укључи само за одређене групе",
- "Uninstall App" : "Деинсталирај апликацију",
"Common Name" : "Уобичајено име",
"Valid until" : "Важи до",
"Issued By" : "Издавач",
@@ -216,7 +211,11 @@ OC.L10N.register(
"Default" : "Подразумевано",
"log-level out of allowed range" : "ниво бележења је ван дозвољеног опсега",
"Language changed" : "Језик је промењен",
+ "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе",
+ "Unable to add user to group %s" : "Не могу да додам корисника у групу %s",
+ "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?",
+ "Please wait...." : "Сачекајте…",
"Everything (fatal issues, errors, warnings, info, debug)" : "Све (фаталне проблеме, грешке, упозорења, информације, отклањање грешака)",
"Info, warnings, errors and fatal issues" : "Информације, упозорења, грешке и фатални проблеми",
"Warnings, errors and fatal issues" : "Упозорења, грешке и фатални проблеми",
@@ -233,13 +232,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент програм у графичком окружењу, коришћење СКуЛајта није препоручљиво.",
"Experimental applications ahead" : "Експериментална апликација",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Експерименталне апликације се непроверене што се тиче безбедности и могу бити нестабилне и недовршене. Инсталирање може довести до губитка података или нарушавања безбедности.",
+ "Uninstall App" : "Деинсталирај апликацију",
"Enable experimental apps" : "Укључи експерименталне апликације",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Поздрав,<br><br>само вас обавештавам да сад имате %s налог.<br><br>Ваше корисничко име: %s<br>Приступите му на: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Поздрав.\n\nСамо да знате да сада имате %s налог.\n\nВаше корисничко име: %s\nПриступите му на: %s\n",
- "Group" : "Група",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Спољашње складиште",
- "Updates" : "Ажурирања"
+ "Group" : "Група"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json
index 20567600fbd..399d1df09a3 100644
--- a/settings/l10n/sr.json
+++ b/settings/l10n/sr.json
@@ -32,9 +32,6 @@
"Unable to change mail address" : "Не могу да изменим е-адресу",
"Email saved" : "Е-порука сачувана",
"Couldn't remove app." : "Не могу да уклоним апликацију.",
- "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе",
- "Unable to add user to group %s" : "Не могу да додам корисника у групу %s",
- "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Couldn't update app." : "Не могу да ажурирам апликацију.",
"Add trusted domain" : "Додај поуздан домен",
"Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши",
@@ -46,7 +43,6 @@
"No apps found for your version" : "Нема апликација за вашу верзију",
"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." : "Одобрене апликације су развили проверени програмери и апликације су прошле основне безбедносне провере. Оне се активно одржавају у репозиторијуму за апликације отвореног кода и њихови одржаватељи сматрају да су стабилне за уобичајену употребу.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ова апликација није проверена по питању безбедности и нова је или зна да буде нестабилна. Инсталирате је на сопствену одговорност.",
- "Please wait...." : "Сачекајте…",
"Error while disabling app" : "Грешка при искључивању апликације",
"Disable" : "Искључи",
"Enable" : "Укључи",
@@ -159,7 +155,6 @@
"Hide description …" : "Сакриј опис…",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Апликација се не може инсталирати јер следеће зависности нису испуњене:",
"Enable only for specific groups" : "Укључи само за одређене групе",
- "Uninstall App" : "Деинсталирај апликацију",
"Common Name" : "Уобичајено име",
"Valid until" : "Важи до",
"Issued By" : "Издавач",
@@ -214,7 +209,11 @@
"Default" : "Подразумевано",
"log-level out of allowed range" : "ниво бележења је ван дозвољеног опсега",
"Language changed" : "Језик је промењен",
+ "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе",
+ "Unable to add user to group %s" : "Не могу да додам корисника у групу %s",
+ "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?",
+ "Please wait...." : "Сачекајте…",
"Everything (fatal issues, errors, warnings, info, debug)" : "Све (фаталне проблеме, грешке, упозорења, информације, отклањање грешака)",
"Info, warnings, errors and fatal issues" : "Информације, упозорења, грешке и фатални проблеми",
"Warnings, errors and fatal issues" : "Упозорења, грешке и фатални проблеми",
@@ -231,13 +230,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент програм у графичком окружењу, коришћење СКуЛајта није препоручљиво.",
"Experimental applications ahead" : "Експериментална апликација",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Експерименталне апликације се непроверене што се тиче безбедности и могу бити нестабилне и недовршене. Инсталирање може довести до губитка података или нарушавања безбедности.",
+ "Uninstall App" : "Деинсталирај апликацију",
"Enable experimental apps" : "Укључи експерименталне апликације",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Поздрав,<br><br>само вас обавештавам да сад имате %s налог.<br><br>Ваше корисничко име: %s<br>Приступите му на: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Поздрав.\n\nСамо да знате да сада имате %s налог.\n\nВаше корисничко име: %s\nПриступите му на: %s\n",
- "Group" : "Група",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Спољашње складиште",
- "Updates" : "Ажурирања"
+ "Group" : "Група"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index 2d9d3f205fe..964c65427cd 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -10,9 +10,9 @@ OC.L10N.register(
"Authentication error" : "Fel vid autentisering",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Ange ett återställningslösenord för administratören. Annars kommer all användardata förloras",
"Wrong admin recovery password. Please check the password and try again." : "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen.",
- "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend stödjer ej lösenordsbyte, men användarens ändring av krypteringsnyckel lyckades.",
- "installing and updating apps via the app store or Federated Cloud Sharing" : "installering och uppdatering utav applikationer eller Federate Cloud delning.",
- "Federated Cloud Sharing" : "Federate Cloud delning",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend stödjer inte lösenordsbyte, men användarens ändring av krypteringsnyckel lyckades.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "installering och uppdatering utav applikationer eller Federerad Moln-delning.",
+ "Federated Cloud Sharing" : "Federerad Moln-delning",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL använder en föråldrad %s version (%s). Var god uppdatera ditt operativsystem annars kan funktioner som %s sluta fungera pålitligt.",
"A problem occurred, please check your log files (Error: %s)" : "Ett problem uppstod, var god kontrollera loggfiler (Error: %s)",
"Migration Completed" : "Migrering Färdigställd",
@@ -29,20 +29,22 @@ OC.L10N.register(
"Unable to create user." : "Kan inte skapa användare.",
"Your %s account was created" : "Ditt %s konto skapades",
"Unable to delete user." : "Kan inte radera användare.",
- "Unable to change full name" : "Kunde inte ändra hela namnet",
+ "Settings saved" : "Inställningar sparade",
+ "Unable to change full name" : "Kunde inte ändra namn",
+ "Unable to change email address" : "Kunde inte ändra e-postadress",
"Your full name has been changed." : "Hela ditt namn har ändrats",
"Forbidden" : "Förbjuden",
"Invalid user" : "Ogiltig användare",
"Unable to change mail address" : "Kan inte ändra e-postadress",
"Email saved" : "E-post sparad",
+ "Password confirmation is required" : "Lösenordsbekräftelse krävs",
"Couldn't remove app." : "Kunde inte ta bort applikationen.",
- "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen",
- "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s",
- "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s",
"Couldn't update app." : "Kunde inte uppdatera appen.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Är du verkligen säker att du vill lägga till (domain) som tillförlitlig domän?",
"Add trusted domain" : "Lägg till betrodd domän",
"Migration in progress. Please wait until the migration is finished" : "Migrering pågår. Var god vänta tills migreringen är färdigställd.",
"Migration started …" : "Migrering påbörjad ...",
+ "Not saved" : "Inte sparad",
"Sending..." : "Skickar ...",
"Official" : "Officiell",
"All" : "Alla",
@@ -50,15 +52,16 @@ OC.L10N.register(
"_You have %n app update pending_::_You have %n app updates pending_" : ["Du har %n applikationsuppdatering väntandes.","Du har %n applikationsuppdateringar väntandes."],
"No apps found for your version" : "Inga appar funna för din version",
"The app will be downloaded from the app store" : "Appen kommer hämtas från appstore",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Officiella appar är utvecklade av Nextclouds community. De erbjuder central funktionalitet och är redo för att användas i produktion.",
"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." : "Godkända appar är utvecklade av betrodda utvecklare och har genomgått enklare säkerhetstester. De är aktivt utvecklade i ett öppet kodbibliotek och deras underhållare anser dom stabila nog för enklare till normalt användande.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denna applikation är ej kontrollerad för säkerhetsbrister och är ny eller känd att orsaka instabilitetsproblem. Installera på egen risk.",
- "Please wait...." : "Var god vänta ...",
+ "Enabling app …" : "Aktiverar app ...",
"Error while disabling app" : "Fel vid inaktivering av app",
- "Disable" : "Deaktivera",
+ "Disable" : "Inaktivera",
"Enable" : "Aktivera",
"Error while enabling app" : "Fel vid aktivering av app",
"Error: this app cannot be enabled because it makes the server unstable" : "Fel uppstod: Denna applikation kan ej startas för det gör servern ostabil.",
- "Error: could not disable broken app" : "Fel: Gick ej att inaktivera trasig applikation.",
+ "Error: could not disable broken app" : "Fel: Gick inte att inaktivera trasig applikation.",
"Error while disabling broken app" : "Fel under inaktivering av trasig applikation.",
"Updating...." : "Uppdaterar ...",
"Error while updating app" : "Fel uppstod vid uppdatering av appen",
@@ -71,13 +74,40 @@ OC.L10N.register(
"Approved" : "Godkänd",
"Experimental" : "Experimentiell",
"No apps found for {query}" : "Inga applikationer funna för {query}",
+ "Allow filesystem access" : "Tillåt åtkomst till filsystemet",
"Disconnect" : "Koppla från",
+ "Revoke" : "Återkalla",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome för Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS-app",
+ "Android Client" : "Android-app",
+ "Sync client - {os}" : "Synk-klient - (os)",
+ "This session" : "Denna session ",
+ "Copy" : "Kopiera",
+ "Copied!" : "Kopierad!",
+ "Not supported!" : "Stöds ej!",
+ "Press ⌘-C to copy." : "Tryck ⌘-C för att kopiera.",
+ "Press Ctrl-C to copy." : "Tryck Ctrl-C för att kopiera.",
"Error while loading browser sessions and device tokens" : "Fel vid inläsning av webbläsarsessioner och enhetstoken.",
"Error while creating device token" : "Fel vid skapande av enhetstoken",
"Error while deleting the token" : "Fel vid borttagning av token",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ett fel uppstod. Var god ladda upp ett ASCII-kodad PEM certifikat.",
"Valid until {date}" : "Giltig t.o.m. {date}",
"Delete" : "Radera",
+ "Local" : "Lokal",
+ "Private" : "Privat",
+ "Only visible to local users" : "Endast synlig för lokala användare",
+ "Only visible to you" : "Endast synlig för dig",
+ "Contacts" : "Kontakter",
+ "Visible to local users and to trusted servers" : "Synlig för lokala användare och tillförlitliga servrar",
+ "Public" : "Offentlig",
+ "Will be synced to a global and public address book" : "Kommer att synkroniseras till global och offentlig adressbok",
"Select a profile picture" : "Välj en profilbild",
"Very weak password" : "Väldigt svagt lösenord",
"Weak password" : "Svagt lösenord",
@@ -92,20 +122,28 @@ OC.L10N.register(
"undo" : "ångra",
"never" : "aldrig",
"deleted {userName}" : "raderade {userName}",
+ "Add group" : "Lägg till grupp",
+ "Invalid quota value \"{val}\"" : "Ogiltigt quota värde \"{val}\"",
+ "no group" : "ingen grupp",
+ "Password successfully changed" : "Ändringen av lösenordet lyckades.",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Ändring utav lösenord kommer resultera i förlorad data, eftersom dataåterställning ej är tillgängligt för denna användare.",
+ "Could not change the users email" : "Kunde inte ändra användarens e-postadress",
"A valid username must be provided" : "Ett giltigt användarnamn måste anges",
"Error creating user: {message}" : "Fel uppstod när användare skulle skapas: {message}",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"A valid email must be provided" : "En giltig e-postadress måste anges",
"__language_name__" : "Svenska",
- "Unlimited" : "Obegränsad",
+ "Unlimited" : "Obegränsat",
"Personal info" : "Personlig information",
"Sessions" : "Sessioner",
+ "App passwords" : "Applösenord",
"Sync clients" : "Synk-klienter",
"None" : "Ingen",
"Login" : "Logga in",
"Plain" : "Enkel",
"NT LAN Manager" : "NT LAN Manager",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "E-post server",
"Open documentation" : "Öppna dokumentation",
"This is used for sending out notifications." : "Detta används för att skicka ut notifieringar.",
@@ -127,12 +165,13 @@ OC.L10N.register(
"Enable server-side encryption" : "Aktivera kryptering på server.",
"Please read carefully before activating server-side encryption: " : "OBS: Var god läs noga innan kryptering aktiveras på servern.",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "När kryptering är aktiverat, så kommer alla filer som laddas upp till servern från den tidpunkt och frammåt bli krypterad på servern. Det kommer bara vara möjligt att inaktivera kryptering vid ett senare tillfälle om krypteringsmodulen stödjer den funktionen och alla förvillkor (exempelvis använder återställningsnyckel) är mötta.",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Enbart kryptering garanterar inte säkerhet i systemet. Vänligen se dokumentationen för ytterligare information om hur krypteringsappen fungerar, och de supporterade användarfallen.",
"Be aware that encryption always increases the file size." : "OBS! Observera att kryptering alltid ökar filstorleken",
"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 är alltid en god ide att skapa regelbundna säkerhetskopior av din data, om kryptering används var säker på att även krypteringsnycklarna säkerhetskopieras tillsammans med din data.",
"This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?",
"Enable encryption" : "Aktivera kryptering",
"No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.",
- "Select default encryption module:" : "Välj standard krypteringsmodul:",
+ "Select default encryption module:" : "Välj 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 behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.",
"Start migration" : "Starta migrering",
@@ -142,25 +181,29 @@ OC.L10N.register(
"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." : "Läs-bara konfigureringen har blivit aktiv. Detta förhindrar att några konfigureringar kan sättas via web-gränssnittet.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP är tydligen inställd för att rensa inline doc block. Detta kommer att göra flera kärnapplikationer otillgängliga.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Detta orsakas troligtvis av en cache/accelerator som t ex Zend OPchache 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 databas kör inte \"READ COMMITED\" transaktionsisoleringsnvån. Detta kan orsaka problem när flera åtgärder körs parallellt.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s under version %2$s är installerad, för stabilitet och prestanda rekommenderar vi uppdatering till en nyare %1$s version.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.",
- "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." : "Transactional file locking är inaktiverad, detta kan innebära konkurrenstillstånd. Aktivera \"filelocking.enabled' i config.php för att undvika dessa problem. Se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentationen ↗</a> för mer information.",
+ "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." : "\"Transactional file locking\" är inaktiverad, detta kan innebära konkurrenstillstånd. Aktivera \"filelocking.enabled' i config.php för att undvika dessa problem. Se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentationen ↗</a> för mer information.",
"System locale can not be set to a one which supports UTF-8." : "Systemspråk kan inte ställas in till ett som stödjer UTF-8.",
"This means that there might be problems with certain characters in file names." : "Detta betyder att där kan komma att uppstå problem med vissa tecken i filnamn.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi rekommenderar starkt att installera de nödvändiga paketen på ditt system för att stödja en av följande språkversioner: %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\")" : "Om din installation inte installerades på roten av domänen och använder system cron så kan det uppstå problem med URL-genereringen. För att undvika dessa problem, var vänlig sätt \"overwrite.cli.url\"-inställningen i din config.php-fil till webbrotsökvägen av din installation (Föreslagen: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ej möjligt att exekvera cronjob via CLI. Följande tekniska fel har uppstått:",
+ "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>." : "Var god att dubbelkolla <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installationsguiden ↗</a>, och kolla efter några ändringar eller varningar i <a href=\"%s\">loggfilen</a>.",
"All checks passed." : "Alla kontroller lyckades!",
"Cron" : "Cron",
- "Last cron job execution: %s." : "Sista cron kördes %s",
- "Last cron job execution: %s. Something seems wrong." : "Sista cron kördes %s. Något verkar vara fel.",
+ "Last cron job execution: %s." : "Sista cron kördes för %s",
+ "Last cron job execution: %s. Something seems wrong." : "Sista cron kördes för %s. Något verkar vara fel.",
"Cron was not executed yet!" : "Cron har inte körts ännu!",
"Execute one task with each page loaded" : "Exekvera en uppgift vid varje sidladdning",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Använd systemets cron-tjänst för att anropa cron.php var 15:e minut.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "Cron.php behöver exekveras av systemanvändaren \"%s\".",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "För att köra detta behöver du PHP posix tillägget. Se {linkstart}PHP dokumentationen{linkend} för ytterligare detaljer.",
"Version" : "Version",
"Sharing" : "Dela",
- "Allow apps to use the Share API" : "Tillåt applikationer att använda delat API",
+ "Allow apps to use the Share API" : "Tillåt applikationer att använda API för delning",
"Allow users to share via link" : "Tillåt användare att dela via länk",
"Allow public uploads" : "Tillåt offentlig uppladdning",
"Enforce password protection" : "Tillämpa lösenordskydd",
@@ -174,7 +217,11 @@ OC.L10N.register(
"Exclude groups from sharing" : "Exkludera grupp från att dela",
"These groups will still be able to receive shares, but not to initiate them." : "Dessa grupper kommer fortfarande kunna ta emot delningar, men inte skapa delningar.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Tillåt användarnamn att autokompletteras i delningsfönstret. Om det är inaktiverat krävs fullständigt användarnamn i rutan.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Visa friskrivningstext på offentliga uppladdningssidan. (Visas endast när fil-listan är gömd.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Denna text kommer att visa på den offentliga uppladdnings-sidan när fil-listan är gömd.",
"Tips & tricks" : "Tips & tricks",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite används som databas. För större installationer så rekommenderar vi ett byte till en annan databasbackend.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Detta rekommenderas speciellt när skrivbordsklienten används för att synkronisera filer.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "För att migrera till en annan databas använd kommandoverktyget 'occ db:convert-type' eller se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> dokumentationen ↗</a>",
"How to do backups" : "Hur man skapar säkerhetskopior",
"Advanced monitoring" : "Advancerad bevakning",
@@ -182,7 +229,7 @@ OC.L10N.register(
"Improving the config.php" : "Förbättra config.php",
"Theming" : "Teman",
"Hardening and security guidance" : "Säkerhetsriktlinjer",
- "Developer documentation" : "Utvecklar dokumentation",
+ "Developer documentation" : "Utvecklardokumentation",
"by %s" : "av %s",
"%s-licensed" : "%s-licensierad.",
"Documentation:" : "Dokumentation:",
@@ -193,19 +240,24 @@ OC.L10N.register(
"Show description …" : "Visa beskrivning",
"Hide description …" : "Dölj beskrivning",
"This app has an update available." : "Denna applikation har en uppdatering tillgänglig.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Denna app har ingen max Nextcloudversion tilldelad. Detta kommer att innebära ett problem i framtiden.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Denna app har ingen minimum Nextcloudversion tilldelad. Detta kommer att innebära ett problem i framtiden.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Denna applikation kan inte installeras då följande beroenden inte är uppfyllda: %s",
"Enable only for specific groups" : "Aktivera endast för specifika grupper",
- "Uninstall App" : "Avinstallera applikation",
+ "Uninstall app" : "Avinstallera app",
"SSL Root Certificates" : "SSL Root certifikat",
"Common Name" : "Vanligt namn",
"Valid until" : "Giltigt till",
"Issued By" : "Utfärdat av",
"Valid until %s" : "Giltigt till %s",
"Import root certificate" : "Importera root certifikat",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hej där,<br><br>Tänkte bara informera om att du du nu har ett %s konto.<br><br>Ditt användarnamn: <strong>%s</strong><br>Logga in: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Ha de fint!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nTänkte bara informera om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nLogga in: %s\n\n",
"Administrator documentation" : "Administratörsdokumentation",
"Online documentation" : "Online dokumentation",
"Forum" : "Forum",
+ "Getting help" : "Få hjälp",
"Commercial support" : "Kommersiell support",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Du använder <strong>%s</strong> av <strong>%s</strong>",
"Profile picture" : "Profilbild",
@@ -216,12 +268,20 @@ OC.L10N.register(
"Picture provided by original account" : "Bild gjordes tillgänglig av orginal konto",
"Cancel" : "Avbryt",
"Choose as profile picture" : "Välj som profilbild",
- "Full name" : "Fullständigt namn",
+ "Full name" : "Namn",
"No display name set" : "Inget visningsnamn angivet",
"Email" : "E-post",
"Your email address" : "Din e-postadress",
"No email address set" : "Ingen e-postadress angiven",
"For password recovery and notifications" : "För lösenordsåterställning och notifieringar",
+ "Phone number" : "Telefonnummer",
+ "Your phone number" : "Ditt telefonnummer",
+ "Address" : "Adress",
+ "Your postal address" : "Din postadress",
+ "Website" : "Webbsida",
+ "Your website" : "Din webbsida",
+ "Twitter" : "Twitter",
+ "Your Twitter handle" : "Ditt Twitterkonto",
"You are member of the following groups:" : "Du är medlem i följande grupper:",
"Password" : "Lösenord",
"Current password" : "Nuvarande lösenord",
@@ -233,10 +293,25 @@ OC.L10N.register(
"Desktop client" : "Skrivbordsklient",
"Android app" : "Android-app",
"iOS app" : "iOS-app",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Om du vill stödja projektet {contributeopen}, delta i utvecklinngen{linkclose} eller {contributeopen}sprida det vidare{linkclose}!",
"Show First Run Wizard again" : "Visa Första uppstarts-guiden igen",
+ "Web, desktop and mobile clients currently logged in to your account." : "Webb, skrivbordsklienter och mobila klienter som är inloggade på ditt konto just nu.",
+ "Device" : "Enhet",
+ "Last activity" : "Senaste aktivitet",
+ "Passcodes that give an app or device permissions to access your account." : "Lösenordskod som ger en applikation eller enhet rättigheter att ansluta till ditt konto.",
"Name" : "Namn",
+ "App name" : "Appnamn",
+ "Create new app password" : "Skapa nytt applösenord",
+ "Use the credentials below to configure your app or device." : "Använd följande autentiseringsuppgifter för att konfigurera din app eller enhet",
+ "For security reasons this password will only be shown once." : "Av säkerhetsskäl kommer lösenordet endast att visas en gång",
"Username" : "Användarnamn",
"Done" : "Färdig",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Utvecklat av {communityopen}Nextclouds community{linkclose}, {githubopen}källkoden{linkclose} är licensierad enligt {licenseopen}AGPL-standard{linkclose}.",
+ "Follow us on Google Plus!" : "Fälj oss på Google Plus!",
+ "Like our facebook page!" : "Gilla vår Facebooksida!",
+ "Subscribe to our twitter channel!" : "Prenumerera på vårt Twitterkonto!",
+ "Subscribe to our news feed!" : "Prenumerera på vårt nyhetsflöde!",
+ "Subscribe to our newsletter!" : "Prenumerera på vårt nyhetsbrev!",
"Show storage location" : "Visa lagringsplats",
"Show last log in" : "Visa senaste inloggning",
"Show user backend" : "Visa användar-backend",
@@ -244,20 +319,32 @@ OC.L10N.register(
"Show email address" : "Visa e-postadress",
"E-Mail" : "E-post",
"Create" : "Skapa",
- "Admin Recovery Password" : "Admin-återställningslösenord",
+ "Admin Recovery Password" : "Admin-återställningslösen",
"Enter the recovery password in order to recover the users files during password change" : "Ange återställningslösenordet för att återställa användarnas filer vid lösenordsbyte",
+ "Group name" : "Gruppnamn",
"Everyone" : "Alla",
"Admins" : "Administratörer",
- "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Var god skriv in lagringskvot (ex: \"512MB\" eller \"12 GB\")",
+ "Default quota" : "Förvalt lagringsutrymme",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ange storlek på lagringsutrymmet (t.ex: \"512 MB\" eller \"12 GB\")",
"Other" : "Annat",
- "Quota" : "Kvot",
- "change full name" : "ändra hela namnet",
+ "Group admin for" : "Gruppadministratör för",
+ "Quota" : "Lagringsutrymme",
+ "Storage location" : "Lagringsplats",
+ "User backend" : "Användarbackend",
+ "Last login" : "Senaste inloggning",
+ "change full name" : "ändra namn",
"set new password" : "ange nytt lösenord",
"change email address" : "ändra e-postadress",
"Default" : "Förvald",
"log-level out of allowed range" : "logg-nivå utanför tillåtet område",
"Language changed" : "Språk ändrades",
+ "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen",
+ "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s",
+ "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Är du verkligen säker på att du vill lägga till \"{domain}\" som en trusted domian?",
+ "Please wait...." : "Var god vänta ...",
+ "iPhone" : "iPhone",
+ "add group" : "lägg till grupp",
"Everything (fatal issues, errors, warnings, info, debug)" : "Allting (allvarliga fel, fel, varningar, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, varningar och allvarliga fel",
"Warnings, errors and fatal issues" : "Varningar, fel och allvarliga fel",
@@ -265,24 +352,28 @@ OC.L10N.register(
"Fatal issues only" : "Endast allvarliga fel",
"Log" : "Logg",
"What to log" : "Vad som ska loggas",
- "Download logfile" : "Ladda ner loggfil",
+ "Download logfile" : "Ladda ned loggfil",
"More" : "Mer",
"Less" : "Mindre",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nerladdningen kan ta en stund!",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nedladdningen kan ta en stund!",
"Allow users to send mail notification for shared files" : "Tillåt användare att skicka mailnotifieringar för delade filer",
"Allow users to send mail notification for shared files to other users" : "Tillåt användare att skicka mejlnotifiering för delade filer till andra användare",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite används som databas. För större installationer så rekommenderar vi ett byte till en annan databasmotor.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när desktop klienten för filsynkronisering används så avråds användande av SQLite.",
"Experimental applications ahead" : "Experimentiella applikationer framför",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentella applikationer är ej kontrollerade för säkerhetsproblem, nya eller kända att vara instabila och under föränderlig utveckling. Installation utav dessa kan orsaka dataförlust eller säkerhetsbrott.",
+ "Uninstall App" : "Avinstallera applikation",
"Enable experimental apps" : "Aktivera experimentiella applikationer",
- "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej där,<br><br>vill bara informera dig om att du nu har ett %s konto.<br><br>Ditt användarnamn: %s<br>Accessa det genom: <a href=\"%s\">%s</a><br><br>",
- "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nvill bara informera dig om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nAccessa det genom: %s\n",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej där,<br><br>Tänkte bara informera dig om att du nu har ett %s konto.<br><br>Ditt användarnamn: %s<br>Accessa det här: <a href=\"%s\">%s</a><br><br>",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nTänkte bara informera dig om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nAccessa det här: %s\n",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Om du vill stödja projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i uvecklingen</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">sprid det vidare</a>!",
+ "Add Group" : "Lägg till Grupp",
"Group" : "Grupp",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Extern lagring",
- "Updates" : "Uppdateringar",
- "An error occurred: {message}" : "Ett fel inträffade: {message}"
+ "Default Quota" : "Förvald datakvot",
+ "Full Name" : "Namn",
+ "Group Admin for" : "Gruppadmin för",
+ "Storage Location" : "Lagringsplats",
+ "User Backend" : "Användarbackend",
+ "Last Login" : "Senaste inloggining"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index 5c92b9ddfa0..8bfa6e9b38e 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -8,9 +8,9 @@
"Authentication error" : "Fel vid autentisering",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Ange ett återställningslösenord för administratören. Annars kommer all användardata förloras",
"Wrong admin recovery password. Please check the password and try again." : "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen.",
- "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend stödjer ej lösenordsbyte, men användarens ändring av krypteringsnyckel lyckades.",
- "installing and updating apps via the app store or Federated Cloud Sharing" : "installering och uppdatering utav applikationer eller Federate Cloud delning.",
- "Federated Cloud Sharing" : "Federate Cloud delning",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend stödjer inte lösenordsbyte, men användarens ändring av krypteringsnyckel lyckades.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "installering och uppdatering utav applikationer eller Federerad Moln-delning.",
+ "Federated Cloud Sharing" : "Federerad Moln-delning",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL använder en föråldrad %s version (%s). Var god uppdatera ditt operativsystem annars kan funktioner som %s sluta fungera pålitligt.",
"A problem occurred, please check your log files (Error: %s)" : "Ett problem uppstod, var god kontrollera loggfiler (Error: %s)",
"Migration Completed" : "Migrering Färdigställd",
@@ -27,20 +27,22 @@
"Unable to create user." : "Kan inte skapa användare.",
"Your %s account was created" : "Ditt %s konto skapades",
"Unable to delete user." : "Kan inte radera användare.",
- "Unable to change full name" : "Kunde inte ändra hela namnet",
+ "Settings saved" : "Inställningar sparade",
+ "Unable to change full name" : "Kunde inte ändra namn",
+ "Unable to change email address" : "Kunde inte ändra e-postadress",
"Your full name has been changed." : "Hela ditt namn har ändrats",
"Forbidden" : "Förbjuden",
"Invalid user" : "Ogiltig användare",
"Unable to change mail address" : "Kan inte ändra e-postadress",
"Email saved" : "E-post sparad",
+ "Password confirmation is required" : "Lösenordsbekräftelse krävs",
"Couldn't remove app." : "Kunde inte ta bort applikationen.",
- "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen",
- "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s",
- "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s",
"Couldn't update app." : "Kunde inte uppdatera appen.",
+ "Are you really sure you want add {domain} as trusted domain?" : "Är du verkligen säker att du vill lägga till (domain) som tillförlitlig domän?",
"Add trusted domain" : "Lägg till betrodd domän",
"Migration in progress. Please wait until the migration is finished" : "Migrering pågår. Var god vänta tills migreringen är färdigställd.",
"Migration started …" : "Migrering påbörjad ...",
+ "Not saved" : "Inte sparad",
"Sending..." : "Skickar ...",
"Official" : "Officiell",
"All" : "Alla",
@@ -48,15 +50,16 @@
"_You have %n app update pending_::_You have %n app updates pending_" : ["Du har %n applikationsuppdatering väntandes.","Du har %n applikationsuppdateringar väntandes."],
"No apps found for your version" : "Inga appar funna för din version",
"The app will be downloaded from the app store" : "Appen kommer hämtas från appstore",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Officiella appar är utvecklade av Nextclouds community. De erbjuder central funktionalitet och är redo för att användas i produktion.",
"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." : "Godkända appar är utvecklade av betrodda utvecklare och har genomgått enklare säkerhetstester. De är aktivt utvecklade i ett öppet kodbibliotek och deras underhållare anser dom stabila nog för enklare till normalt användande.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denna applikation är ej kontrollerad för säkerhetsbrister och är ny eller känd att orsaka instabilitetsproblem. Installera på egen risk.",
- "Please wait...." : "Var god vänta ...",
+ "Enabling app …" : "Aktiverar app ...",
"Error while disabling app" : "Fel vid inaktivering av app",
- "Disable" : "Deaktivera",
+ "Disable" : "Inaktivera",
"Enable" : "Aktivera",
"Error while enabling app" : "Fel vid aktivering av app",
"Error: this app cannot be enabled because it makes the server unstable" : "Fel uppstod: Denna applikation kan ej startas för det gör servern ostabil.",
- "Error: could not disable broken app" : "Fel: Gick ej att inaktivera trasig applikation.",
+ "Error: could not disable broken app" : "Fel: Gick inte att inaktivera trasig applikation.",
"Error while disabling broken app" : "Fel under inaktivering av trasig applikation.",
"Updating...." : "Uppdaterar ...",
"Error while updating app" : "Fel uppstod vid uppdatering av appen",
@@ -69,13 +72,40 @@
"Approved" : "Godkänd",
"Experimental" : "Experimentiell",
"No apps found for {query}" : "Inga applikationer funna för {query}",
+ "Allow filesystem access" : "Tillåt åtkomst till filsystemet",
"Disconnect" : "Koppla från",
+ "Revoke" : "Återkalla",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome för Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS-app",
+ "Android Client" : "Android-app",
+ "Sync client - {os}" : "Synk-klient - (os)",
+ "This session" : "Denna session ",
+ "Copy" : "Kopiera",
+ "Copied!" : "Kopierad!",
+ "Not supported!" : "Stöds ej!",
+ "Press ⌘-C to copy." : "Tryck ⌘-C för att kopiera.",
+ "Press Ctrl-C to copy." : "Tryck Ctrl-C för att kopiera.",
"Error while loading browser sessions and device tokens" : "Fel vid inläsning av webbläsarsessioner och enhetstoken.",
"Error while creating device token" : "Fel vid skapande av enhetstoken",
"Error while deleting the token" : "Fel vid borttagning av token",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ett fel uppstod. Var god ladda upp ett ASCII-kodad PEM certifikat.",
"Valid until {date}" : "Giltig t.o.m. {date}",
"Delete" : "Radera",
+ "Local" : "Lokal",
+ "Private" : "Privat",
+ "Only visible to local users" : "Endast synlig för lokala användare",
+ "Only visible to you" : "Endast synlig för dig",
+ "Contacts" : "Kontakter",
+ "Visible to local users and to trusted servers" : "Synlig för lokala användare och tillförlitliga servrar",
+ "Public" : "Offentlig",
+ "Will be synced to a global and public address book" : "Kommer att synkroniseras till global och offentlig adressbok",
"Select a profile picture" : "Välj en profilbild",
"Very weak password" : "Väldigt svagt lösenord",
"Weak password" : "Svagt lösenord",
@@ -90,20 +120,28 @@
"undo" : "ångra",
"never" : "aldrig",
"deleted {userName}" : "raderade {userName}",
+ "Add group" : "Lägg till grupp",
+ "Invalid quota value \"{val}\"" : "Ogiltigt quota värde \"{val}\"",
+ "no group" : "ingen grupp",
+ "Password successfully changed" : "Ändringen av lösenordet lyckades.",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Ändring utav lösenord kommer resultera i förlorad data, eftersom dataåterställning ej är tillgängligt för denna användare.",
+ "Could not change the users email" : "Kunde inte ändra användarens e-postadress",
"A valid username must be provided" : "Ett giltigt användarnamn måste anges",
"Error creating user: {message}" : "Fel uppstod när användare skulle skapas: {message}",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"A valid email must be provided" : "En giltig e-postadress måste anges",
"__language_name__" : "Svenska",
- "Unlimited" : "Obegränsad",
+ "Unlimited" : "Obegränsat",
"Personal info" : "Personlig information",
"Sessions" : "Sessioner",
+ "App passwords" : "Applösenord",
"Sync clients" : "Synk-klienter",
"None" : "Ingen",
"Login" : "Logga in",
"Plain" : "Enkel",
"NT LAN Manager" : "NT LAN Manager",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "E-post server",
"Open documentation" : "Öppna dokumentation",
"This is used for sending out notifications." : "Detta används för att skicka ut notifieringar.",
@@ -125,12 +163,13 @@
"Enable server-side encryption" : "Aktivera kryptering på server.",
"Please read carefully before activating server-side encryption: " : "OBS: Var god läs noga innan kryptering aktiveras på servern.",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "När kryptering är aktiverat, så kommer alla filer som laddas upp till servern från den tidpunkt och frammåt bli krypterad på servern. Det kommer bara vara möjligt att inaktivera kryptering vid ett senare tillfälle om krypteringsmodulen stödjer den funktionen och alla förvillkor (exempelvis använder återställningsnyckel) är mötta.",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Enbart kryptering garanterar inte säkerhet i systemet. Vänligen se dokumentationen för ytterligare information om hur krypteringsappen fungerar, och de supporterade användarfallen.",
"Be aware that encryption always increases the file size." : "OBS! Observera att kryptering alltid ökar filstorleken",
"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 är alltid en god ide att skapa regelbundna säkerhetskopior av din data, om kryptering används var säker på att även krypteringsnycklarna säkerhetskopieras tillsammans med din data.",
"This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?",
"Enable encryption" : "Aktivera kryptering",
"No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.",
- "Select default encryption module:" : "Välj standard krypteringsmodul:",
+ "Select default encryption module:" : "Välj 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 behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.",
"Start migration" : "Starta migrering",
@@ -140,25 +179,29 @@
"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." : "Läs-bara konfigureringen har blivit aktiv. Detta förhindrar att några konfigureringar kan sättas via web-gränssnittet.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP är tydligen inställd för att rensa inline doc block. Detta kommer att göra flera kärnapplikationer otillgängliga.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Detta orsakas troligtvis av en cache/accelerator som t ex Zend OPchache 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 databas kör inte \"READ COMMITED\" transaktionsisoleringsnvån. Detta kan orsaka problem när flera åtgärder körs parallellt.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s under version %2$s är installerad, för stabilitet och prestanda rekommenderar vi uppdatering till en nyare %1$s version.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.",
- "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." : "Transactional file locking är inaktiverad, detta kan innebära konkurrenstillstånd. Aktivera \"filelocking.enabled' i config.php för att undvika dessa problem. Se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentationen ↗</a> för mer information.",
+ "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." : "\"Transactional file locking\" är inaktiverad, detta kan innebära konkurrenstillstånd. Aktivera \"filelocking.enabled' i config.php för att undvika dessa problem. Se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentationen ↗</a> för mer information.",
"System locale can not be set to a one which supports UTF-8." : "Systemspråk kan inte ställas in till ett som stödjer UTF-8.",
"This means that there might be problems with certain characters in file names." : "Detta betyder att där kan komma att uppstå problem med vissa tecken i filnamn.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi rekommenderar starkt att installera de nödvändiga paketen på ditt system för att stödja en av följande språkversioner: %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\")" : "Om din installation inte installerades på roten av domänen och använder system cron så kan det uppstå problem med URL-genereringen. För att undvika dessa problem, var vänlig sätt \"overwrite.cli.url\"-inställningen i din config.php-fil till webbrotsökvägen av din installation (Föreslagen: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ej möjligt att exekvera cronjob via CLI. Följande tekniska fel har uppstått:",
+ "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>." : "Var god att dubbelkolla <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installationsguiden ↗</a>, och kolla efter några ändringar eller varningar i <a href=\"%s\">loggfilen</a>.",
"All checks passed." : "Alla kontroller lyckades!",
"Cron" : "Cron",
- "Last cron job execution: %s." : "Sista cron kördes %s",
- "Last cron job execution: %s. Something seems wrong." : "Sista cron kördes %s. Något verkar vara fel.",
+ "Last cron job execution: %s." : "Sista cron kördes för %s",
+ "Last cron job execution: %s. Something seems wrong." : "Sista cron kördes för %s. Något verkar vara fel.",
"Cron was not executed yet!" : "Cron har inte körts ännu!",
"Execute one task with each page loaded" : "Exekvera en uppgift vid varje sidladdning",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Använd systemets cron-tjänst för att anropa cron.php var 15:e minut.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "Cron.php behöver exekveras av systemanvändaren \"%s\".",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "För att köra detta behöver du PHP posix tillägget. Se {linkstart}PHP dokumentationen{linkend} för ytterligare detaljer.",
"Version" : "Version",
"Sharing" : "Dela",
- "Allow apps to use the Share API" : "Tillåt applikationer att använda delat API",
+ "Allow apps to use the Share API" : "Tillåt applikationer att använda API för delning",
"Allow users to share via link" : "Tillåt användare att dela via länk",
"Allow public uploads" : "Tillåt offentlig uppladdning",
"Enforce password protection" : "Tillämpa lösenordskydd",
@@ -172,7 +215,11 @@
"Exclude groups from sharing" : "Exkludera grupp från att dela",
"These groups will still be able to receive shares, but not to initiate them." : "Dessa grupper kommer fortfarande kunna ta emot delningar, men inte skapa delningar.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Tillåt användarnamn att autokompletteras i delningsfönstret. Om det är inaktiverat krävs fullständigt användarnamn i rutan.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Visa friskrivningstext på offentliga uppladdningssidan. (Visas endast när fil-listan är gömd.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Denna text kommer att visa på den offentliga uppladdnings-sidan när fil-listan är gömd.",
"Tips & tricks" : "Tips & tricks",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite används som databas. För större installationer så rekommenderar vi ett byte till en annan databasbackend.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Detta rekommenderas speciellt när skrivbordsklienten används för att synkronisera filer.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "För att migrera till en annan databas använd kommandoverktyget 'occ db:convert-type' eller se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> dokumentationen ↗</a>",
"How to do backups" : "Hur man skapar säkerhetskopior",
"Advanced monitoring" : "Advancerad bevakning",
@@ -180,7 +227,7 @@
"Improving the config.php" : "Förbättra config.php",
"Theming" : "Teman",
"Hardening and security guidance" : "Säkerhetsriktlinjer",
- "Developer documentation" : "Utvecklar dokumentation",
+ "Developer documentation" : "Utvecklardokumentation",
"by %s" : "av %s",
"%s-licensed" : "%s-licensierad.",
"Documentation:" : "Dokumentation:",
@@ -191,19 +238,24 @@
"Show description …" : "Visa beskrivning",
"Hide description …" : "Dölj beskrivning",
"This app has an update available." : "Denna applikation har en uppdatering tillgänglig.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Denna app har ingen max Nextcloudversion tilldelad. Detta kommer att innebära ett problem i framtiden.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Denna app har ingen minimum Nextcloudversion tilldelad. Detta kommer att innebära ett problem i framtiden.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Denna applikation kan inte installeras då följande beroenden inte är uppfyllda: %s",
"Enable only for specific groups" : "Aktivera endast för specifika grupper",
- "Uninstall App" : "Avinstallera applikation",
+ "Uninstall app" : "Avinstallera app",
"SSL Root Certificates" : "SSL Root certifikat",
"Common Name" : "Vanligt namn",
"Valid until" : "Giltigt till",
"Issued By" : "Utfärdat av",
"Valid until %s" : "Giltigt till %s",
"Import root certificate" : "Importera root certifikat",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hej där,<br><br>Tänkte bara informera om att du du nu har ett %s konto.<br><br>Ditt användarnamn: <strong>%s</strong><br>Logga in: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "Ha de fint!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nTänkte bara informera om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nLogga in: %s\n\n",
"Administrator documentation" : "Administratörsdokumentation",
"Online documentation" : "Online dokumentation",
"Forum" : "Forum",
+ "Getting help" : "Få hjälp",
"Commercial support" : "Kommersiell support",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Du använder <strong>%s</strong> av <strong>%s</strong>",
"Profile picture" : "Profilbild",
@@ -214,12 +266,20 @@
"Picture provided by original account" : "Bild gjordes tillgänglig av orginal konto",
"Cancel" : "Avbryt",
"Choose as profile picture" : "Välj som profilbild",
- "Full name" : "Fullständigt namn",
+ "Full name" : "Namn",
"No display name set" : "Inget visningsnamn angivet",
"Email" : "E-post",
"Your email address" : "Din e-postadress",
"No email address set" : "Ingen e-postadress angiven",
"For password recovery and notifications" : "För lösenordsåterställning och notifieringar",
+ "Phone number" : "Telefonnummer",
+ "Your phone number" : "Ditt telefonnummer",
+ "Address" : "Adress",
+ "Your postal address" : "Din postadress",
+ "Website" : "Webbsida",
+ "Your website" : "Din webbsida",
+ "Twitter" : "Twitter",
+ "Your Twitter handle" : "Ditt Twitterkonto",
"You are member of the following groups:" : "Du är medlem i följande grupper:",
"Password" : "Lösenord",
"Current password" : "Nuvarande lösenord",
@@ -231,10 +291,25 @@
"Desktop client" : "Skrivbordsklient",
"Android app" : "Android-app",
"iOS app" : "iOS-app",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Om du vill stödja projektet {contributeopen}, delta i utvecklinngen{linkclose} eller {contributeopen}sprida det vidare{linkclose}!",
"Show First Run Wizard again" : "Visa Första uppstarts-guiden igen",
+ "Web, desktop and mobile clients currently logged in to your account." : "Webb, skrivbordsklienter och mobila klienter som är inloggade på ditt konto just nu.",
+ "Device" : "Enhet",
+ "Last activity" : "Senaste aktivitet",
+ "Passcodes that give an app or device permissions to access your account." : "Lösenordskod som ger en applikation eller enhet rättigheter att ansluta till ditt konto.",
"Name" : "Namn",
+ "App name" : "Appnamn",
+ "Create new app password" : "Skapa nytt applösenord",
+ "Use the credentials below to configure your app or device." : "Använd följande autentiseringsuppgifter för att konfigurera din app eller enhet",
+ "For security reasons this password will only be shown once." : "Av säkerhetsskäl kommer lösenordet endast att visas en gång",
"Username" : "Användarnamn",
"Done" : "Färdig",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Utvecklat av {communityopen}Nextclouds community{linkclose}, {githubopen}källkoden{linkclose} är licensierad enligt {licenseopen}AGPL-standard{linkclose}.",
+ "Follow us on Google Plus!" : "Fälj oss på Google Plus!",
+ "Like our facebook page!" : "Gilla vår Facebooksida!",
+ "Subscribe to our twitter channel!" : "Prenumerera på vårt Twitterkonto!",
+ "Subscribe to our news feed!" : "Prenumerera på vårt nyhetsflöde!",
+ "Subscribe to our newsletter!" : "Prenumerera på vårt nyhetsbrev!",
"Show storage location" : "Visa lagringsplats",
"Show last log in" : "Visa senaste inloggning",
"Show user backend" : "Visa användar-backend",
@@ -242,20 +317,32 @@
"Show email address" : "Visa e-postadress",
"E-Mail" : "E-post",
"Create" : "Skapa",
- "Admin Recovery Password" : "Admin-återställningslösenord",
+ "Admin Recovery Password" : "Admin-återställningslösen",
"Enter the recovery password in order to recover the users files during password change" : "Ange återställningslösenordet för att återställa användarnas filer vid lösenordsbyte",
+ "Group name" : "Gruppnamn",
"Everyone" : "Alla",
"Admins" : "Administratörer",
- "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Var god skriv in lagringskvot (ex: \"512MB\" eller \"12 GB\")",
+ "Default quota" : "Förvalt lagringsutrymme",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ange storlek på lagringsutrymmet (t.ex: \"512 MB\" eller \"12 GB\")",
"Other" : "Annat",
- "Quota" : "Kvot",
- "change full name" : "ändra hela namnet",
+ "Group admin for" : "Gruppadministratör för",
+ "Quota" : "Lagringsutrymme",
+ "Storage location" : "Lagringsplats",
+ "User backend" : "Användarbackend",
+ "Last login" : "Senaste inloggning",
+ "change full name" : "ändra namn",
"set new password" : "ange nytt lösenord",
"change email address" : "ändra e-postadress",
"Default" : "Förvald",
"log-level out of allowed range" : "logg-nivå utanför tillåtet område",
"Language changed" : "Språk ändrades",
+ "Admins can't remove themself from the admin group" : "Administratörer kan inte ta bort sig själva från admingruppen",
+ "Unable to add user to group %s" : "Kan inte lägga till användare i gruppen %s",
+ "Unable to remove user from group %s" : "Kan inte radera användare från gruppen %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Är du verkligen säker på att du vill lägga till \"{domain}\" som en trusted domian?",
+ "Please wait...." : "Var god vänta ...",
+ "iPhone" : "iPhone",
+ "add group" : "lägg till grupp",
"Everything (fatal issues, errors, warnings, info, debug)" : "Allting (allvarliga fel, fel, varningar, info, debug)",
"Info, warnings, errors and fatal issues" : "Info, varningar och allvarliga fel",
"Warnings, errors and fatal issues" : "Varningar, fel och allvarliga fel",
@@ -263,24 +350,28 @@
"Fatal issues only" : "Endast allvarliga fel",
"Log" : "Logg",
"What to log" : "Vad som ska loggas",
- "Download logfile" : "Ladda ner loggfil",
+ "Download logfile" : "Ladda ned loggfil",
"More" : "Mer",
"Less" : "Mindre",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nerladdningen kan ta en stund!",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nedladdningen kan ta en stund!",
"Allow users to send mail notification for shared files" : "Tillåt användare att skicka mailnotifieringar för delade filer",
"Allow users to send mail notification for shared files to other users" : "Tillåt användare att skicka mejlnotifiering för delade filer till andra användare",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite används som databas. För större installationer så rekommenderar vi ett byte till en annan databasmotor.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när desktop klienten för filsynkronisering används så avråds användande av SQLite.",
"Experimental applications ahead" : "Experimentiella applikationer framför",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentella applikationer är ej kontrollerade för säkerhetsproblem, nya eller kända att vara instabila och under föränderlig utveckling. Installation utav dessa kan orsaka dataförlust eller säkerhetsbrott.",
+ "Uninstall App" : "Avinstallera applikation",
"Enable experimental apps" : "Aktivera experimentiella applikationer",
- "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej där,<br><br>vill bara informera dig om att du nu har ett %s konto.<br><br>Ditt användarnamn: %s<br>Accessa det genom: <a href=\"%s\">%s</a><br><br>",
- "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nvill bara informera dig om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nAccessa det genom: %s\n",
+ "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej där,<br><br>Tänkte bara informera dig om att du nu har ett %s konto.<br><br>Ditt användarnamn: %s<br>Accessa det här: <a href=\"%s\">%s</a><br><br>",
+ "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nTänkte bara informera dig om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nAccessa det här: %s\n",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Om du vill stödja projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i uvecklingen</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">sprid det vidare</a>!",
+ "Add Group" : "Lägg till Grupp",
"Group" : "Grupp",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Extern lagring",
- "Updates" : "Uppdateringar",
- "An error occurred: {message}" : "Ett fel inträffade: {message}"
+ "Default Quota" : "Förvald datakvot",
+ "Full Name" : "Namn",
+ "Group Admin for" : "Gruppadmin för",
+ "Storage Location" : "Lagringsplats",
+ "User Backend" : "Användarbackend",
+ "Last Login" : "Senaste inloggining"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/ta_LK.js b/settings/l10n/ta_LK.js
index 5691031789e..ff63cae0124 100644
--- a/settings/l10n/ta_LK.js
+++ b/settings/l10n/ta_LK.js
@@ -4,8 +4,6 @@ OC.L10N.register(
"Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
"Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்",
"Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
- "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
- "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"All" : "எல்லாம்",
"Disable" : "இயலுமைப்ப",
"Enable" : "இயலுமைப்படுத்துக",
@@ -35,8 +33,9 @@ OC.L10N.register(
"Other" : "மற்றவை",
"Quota" : "பங்கு",
"Language changed" : "மொழி மாற்றப்பட்டது",
+ "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
+ "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"More" : "மேலதிக",
- "Less" : "குறைவான",
- "External Storage" : "வெளி சேமிப்பு"
+ "Less" : "குறைவான"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/ta_LK.json b/settings/l10n/ta_LK.json
index 917526629f8..7a862136b81 100644
--- a/settings/l10n/ta_LK.json
+++ b/settings/l10n/ta_LK.json
@@ -2,8 +2,6 @@
"Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு",
"Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்",
"Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது",
- "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
- "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"All" : "எல்லாம்",
"Disable" : "இயலுமைப்ப",
"Enable" : "இயலுமைப்படுத்துக",
@@ -33,8 +31,9 @@
"Other" : "மற்றவை",
"Quota" : "பங்கு",
"Language changed" : "மொழி மாற்றப்பட்டது",
+ "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது",
+ "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது",
"More" : "மேலதிக",
- "Less" : "குறைவான",
- "External Storage" : "வெளி சேமிப்பு"
+ "Less" : "குறைவான"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js
index efb6b92bedf..f2a1d599c1d 100644
--- a/settings/l10n/th_TH.js
+++ b/settings/l10n/th_TH.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "ไม่สามารถที่จะเปลี่ยนที่อยู่อีเมล",
"Email saved" : "อีเมลถูกบันทึกแล้ว",
"Couldn't remove app." : "ไม่สามารถลบแอพฯ",
- "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
- "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
- "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Couldn't update app." : "ไม่สามารถอัพเดทแอปฯ",
"Add trusted domain" : "เพิ่มโดเมนที่เชื่อถือได้",
"Migration in progress. Please wait until the migration is finished" : "ในระหว่างดำเนินการโยกย้าย กรุณารอสักครู่จนกว่าการโยกย้ายจะเสร็จสิ้น",
@@ -52,7 +49,6 @@ OC.L10N.register(
"The app will be downloaded from the app store" : "แอพฯจะดาวน์โหลดได้จากแอพสโตร์",
"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." : "แอพพลิเคชันได้รับการอนุมัติและพัฒนาโดยนักพัฒนาที่น่าเชื่อถือและได้ผ่านการตรวจสอบความปลอดภัยคร่าวๆ พวกเขาจะได้รับการบำรุงรักษาอย่างดีในการเก็บข้อมูลรหัสเปิด มันอาจยังไม่เสถียรพอสำหรับการเปิดใช้งานปกติ",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "แอพฯ นี้ไม่ได้ตรวจสอบปัญหาด้านความปลอดภัยและเป็นแอพฯใหม่หรือที่รู้จักกันคือจะไม่เสถียร ติดตั้งบนความเสี่ยงของคุณเอง",
- "Please wait...." : "กรุณารอสักครู่...",
"Error while disabling app" : "เกิดข้อผิดพลาดขณะปิดการใช้งานแอพพลิเคชัน",
"Disable" : "ปิดใช้งาน",
"Enable" : "เปิดใช้งาน",
@@ -184,7 +180,6 @@ OC.L10N.register(
"Hide description …" : "ซ่อนรายละเอียด ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "ไม่สามารถติดตั้งแอพฯนี้เพราะไม่มีตัวอ้างอิงต่อไปนี้:",
"Enable only for specific groups" : "เปิดใช้งานเพียงเฉพาะกลุ่ม",
- "Uninstall App" : "ถอนการติดตั้งแอพฯ",
"SSL Root Certificates" : "ใบรับรอง SSL",
"Common Name" : "ชื่อทั่วไป",
"Valid until" : "ใช้ได้จนถึง",
@@ -246,7 +241,11 @@ OC.L10N.register(
"Default" : "ค่าเริ่มต้น",
"log-level out of allowed range" : "ระดับ-บันทึก ไม่ได้อยู่ในช่วงที่ได้รับอนุญาต",
"Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว",
+ "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
+ "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
+ "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "คุณแน่ใจจริงๆ ว่าคุณต้องการเพิ่ม \"{domain}\" เป็นโดเมนที่เชื่อถือได้?",
+ "Please wait...." : "กรุณารอสักครู่...",
"Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)",
"Info, warnings, errors and fatal issues" : "ข้อมูล คำเตือน ข้อผิดพลาดและปัญหาร้ายแรง",
"Warnings, errors and fatal issues" : "คำเตือนข้อผิดพลาดและปัญหาที่ร้ายแรง",
@@ -264,14 +263,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "โดยเฉพาะอย่างยิ่งเมื่อใช้ไคลเอนต์เดสก์ทอปสำหรับการประสานข้อมูลโดย SQLite",
"Experimental applications ahead" : "การใช้งานก่อนการทดลอง",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "การทดลองแอพพลิเคชันไม่ได้ถูกตรวจสอบปัญหาด้านความปลอดภัย การติดตั้งพวกเขาสามารถก่อให้เกิดการสูญเสียข้อมูลหรือการละเมิดความปลอดภัย",
+ "Uninstall App" : "ถอนการติดตั้งแอพฯ",
"Enable experimental apps" : "เปิดใช้งานแอพพลิเคชั่นทดลอง",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "นี่คุณ<br><br>อยากจะแจ้งให้คุณทราบว่าขณะนี้คุณมีบัญชี %s<br><br>ชื่อผู้ใช้ของคุณคือ: %s<br>เข้าไปงานได้ที่: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "นี่คุณ\n\nอยากให้คุณทราบว่าขณะนี้คุณมี %s บัญชี\n\nชื่อผู้ใช้ของคุณ: %s\nดูได้ที่: %s\n",
- "Group" : "กลุ่ม",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก",
- "Updates" : "อัพเดท",
- "An error occurred: {message}" : "เกิดข้อผิดพลาด: {message}"
+ "Group" : "กลุ่ม"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json
index e926161b592..e3cc8835b53 100644
--- a/settings/l10n/th_TH.json
+++ b/settings/l10n/th_TH.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "ไม่สามารถที่จะเปลี่ยนที่อยู่อีเมล",
"Email saved" : "อีเมลถูกบันทึกแล้ว",
"Couldn't remove app." : "ไม่สามารถลบแอพฯ",
- "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
- "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
- "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Couldn't update app." : "ไม่สามารถอัพเดทแอปฯ",
"Add trusted domain" : "เพิ่มโดเมนที่เชื่อถือได้",
"Migration in progress. Please wait until the migration is finished" : "ในระหว่างดำเนินการโยกย้าย กรุณารอสักครู่จนกว่าการโยกย้ายจะเสร็จสิ้น",
@@ -50,7 +47,6 @@
"The app will be downloaded from the app store" : "แอพฯจะดาวน์โหลดได้จากแอพสโตร์",
"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." : "แอพพลิเคชันได้รับการอนุมัติและพัฒนาโดยนักพัฒนาที่น่าเชื่อถือและได้ผ่านการตรวจสอบความปลอดภัยคร่าวๆ พวกเขาจะได้รับการบำรุงรักษาอย่างดีในการเก็บข้อมูลรหัสเปิด มันอาจยังไม่เสถียรพอสำหรับการเปิดใช้งานปกติ",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "แอพฯ นี้ไม่ได้ตรวจสอบปัญหาด้านความปลอดภัยและเป็นแอพฯใหม่หรือที่รู้จักกันคือจะไม่เสถียร ติดตั้งบนความเสี่ยงของคุณเอง",
- "Please wait...." : "กรุณารอสักครู่...",
"Error while disabling app" : "เกิดข้อผิดพลาดขณะปิดการใช้งานแอพพลิเคชัน",
"Disable" : "ปิดใช้งาน",
"Enable" : "เปิดใช้งาน",
@@ -182,7 +178,6 @@
"Hide description …" : "ซ่อนรายละเอียด ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "ไม่สามารถติดตั้งแอพฯนี้เพราะไม่มีตัวอ้างอิงต่อไปนี้:",
"Enable only for specific groups" : "เปิดใช้งานเพียงเฉพาะกลุ่ม",
- "Uninstall App" : "ถอนการติดตั้งแอพฯ",
"SSL Root Certificates" : "ใบรับรอง SSL",
"Common Name" : "ชื่อทั่วไป",
"Valid until" : "ใช้ได้จนถึง",
@@ -244,7 +239,11 @@
"Default" : "ค่าเริ่มต้น",
"log-level out of allowed range" : "ระดับ-บันทึก ไม่ได้อยู่ในช่วงที่ได้รับอนุญาต",
"Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว",
+ "Admins can't remove themself from the admin group" : "ผู้ดูแลระบบไม่สามารถลบตัวเองออกจากกลุ่มผู้ดูแลได้",
+ "Unable to add user to group %s" : "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
+ "Unable to remove user from group %s" : "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "คุณแน่ใจจริงๆ ว่าคุณต้องการเพิ่ม \"{domain}\" เป็นโดเมนที่เชื่อถือได้?",
+ "Please wait...." : "กรุณารอสักครู่...",
"Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)",
"Info, warnings, errors and fatal issues" : "ข้อมูล คำเตือน ข้อผิดพลาดและปัญหาร้ายแรง",
"Warnings, errors and fatal issues" : "คำเตือนข้อผิดพลาดและปัญหาที่ร้ายแรง",
@@ -262,14 +261,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "โดยเฉพาะอย่างยิ่งเมื่อใช้ไคลเอนต์เดสก์ทอปสำหรับการประสานข้อมูลโดย SQLite",
"Experimental applications ahead" : "การใช้งานก่อนการทดลอง",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "การทดลองแอพพลิเคชันไม่ได้ถูกตรวจสอบปัญหาด้านความปลอดภัย การติดตั้งพวกเขาสามารถก่อให้เกิดการสูญเสียข้อมูลหรือการละเมิดความปลอดภัย",
+ "Uninstall App" : "ถอนการติดตั้งแอพฯ",
"Enable experimental apps" : "เปิดใช้งานแอพพลิเคชั่นทดลอง",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "นี่คุณ<br><br>อยากจะแจ้งให้คุณทราบว่าขณะนี้คุณมีบัญชี %s<br><br>ชื่อผู้ใช้ของคุณคือ: %s<br>เข้าไปงานได้ที่: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "นี่คุณ\n\nอยากให้คุณทราบว่าขณะนี้คุณมี %s บัญชี\n\nชื่อผู้ใช้ของคุณ: %s\nดูได้ที่: %s\n",
- "Group" : "กลุ่ม",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก",
- "Updates" : "อัพเดท",
- "An error occurred: {message}" : "เกิดข้อผิดพลาด: {message}"
+ "Group" : "กลุ่ม"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index 299a33b7a26..418854fb4dc 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Posta adresini değiştirme başarısız",
"Email saved" : "E-posta kaydedildi",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
- "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
- "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
- "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor",
"Couldn't update app." : "Uygulama güncellenemedi.",
"Add trusted domain" : "Güvenilir alan adı ekle",
"Migration in progress. Please wait until the migration is finished" : "Taşınma sürüyor. Lütfen taşınma tamamlanana kadar bekleyin",
@@ -53,7 +50,6 @@ OC.L10N.register(
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Resmi uygulamalar topluluk tarafından geliştirilmiştir. Merkezi işlevleri yerine getirdikleri gibi kullanıma da hazırdırlar.",
"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." : "Onaylanan uygulamalar güvenilir geliştiriciler tarafından geliştirilir ve detaylı olmayan bir güvenlik kontrolünden geçirilir. Bunlar açık kaynak kod deposunda bulunmakta ve normal kullanım için kararlı oldukları varsayılmaktadır.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Bu uygulama güvenlik kontrolünden geçmedi veya yeni ya da kararsız olarak bilinmektedir. Kendiniz bu riski alarak yükleyebilirsiniz.",
- "Please wait...." : "Lütfen bekleyin....",
"Error while disabling app" : "Uygulama devre dışı bırakılırken hata",
"Disable" : "Devre Dışı Bırak",
"Enable" : "Etkinleştir",
@@ -213,7 +209,6 @@ OC.L10N.register(
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için atanan en yüksek Nextcloud sürümü bulunmuyor. Bu ileride bir hata olacaktır.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Bu uygulama, aşağıdaki bağımlılıklar sağlanmadığından yüklenemiyor:",
"Enable only for specific groups" : "Sadece belirli gruplar için etkinleştir",
- "Uninstall App" : "Uygulamayı Kaldır",
"SSL Root Certificates" : "SSL Kök Sertifikaları",
"Common Name" : "Ortak Ad",
"Valid until" : "Geçerlilik",
@@ -287,7 +282,11 @@ OC.L10N.register(
"Default" : "Öntanımlı",
"log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
"Language changed" : "Dil değiştirildi",
+ "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
+ "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
+ "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?",
+ "Please wait...." : "Lütfen bekleyin....",
"iPhone" : "iPhone",
"Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)",
"Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar",
@@ -306,14 +305,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Özellikle dosya eşitleme için masaüstü istemcisi kullanılırken SQLite kullanımı önerilmez.",
"Experimental applications ahead" : "İlerideki deneysel uygulamalar",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Deneysel uygulamalar güvenlik açısından denetlenmemiş, yeni veya kararsız olmaya açık ya da geliştirilme aşamasında olan uygulamalardır. Yüklemek veri kaybı veya güvenlik açıklarına sebep olabilir.",
+ "Uninstall App" : "Uygulamayı Kaldır",
"Enable experimental apps" : "Deneysel uygulamaları etkinleştir",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Merhaba,<br><br>Sadece artık bir %s hesabınızın olduğunu söylemek istedim.<br><br>Kullanıcı adınız: %s<br>Şuradan erişin: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Merhaba,\n\nSadece, artık bir %s hesabınızın olduğunu söylemek istedim.\n\nKullanıcı adınız: %s\nErişim: %s\n\n",
- "Group" : "Grup",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Harici Depolama",
- "Updates" : "Güncellemeler",
- "An error occurred: {message}" : "Bir hata oluştu: {message}"
+ "Group" : "Grup"
},
"nplurals=2; plural=(n > 1);");
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 4051f85b81c..4472e7f8242 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Posta adresini değiştirme başarısız",
"Email saved" : "E-posta kaydedildi",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
- "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
- "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
- "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor",
"Couldn't update app." : "Uygulama güncellenemedi.",
"Add trusted domain" : "Güvenilir alan adı ekle",
"Migration in progress. Please wait until the migration is finished" : "Taşınma sürüyor. Lütfen taşınma tamamlanana kadar bekleyin",
@@ -51,7 +48,6 @@
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Resmi uygulamalar topluluk tarafından geliştirilmiştir. Merkezi işlevleri yerine getirdikleri gibi kullanıma da hazırdırlar.",
"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." : "Onaylanan uygulamalar güvenilir geliştiriciler tarafından geliştirilir ve detaylı olmayan bir güvenlik kontrolünden geçirilir. Bunlar açık kaynak kod deposunda bulunmakta ve normal kullanım için kararlı oldukları varsayılmaktadır.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Bu uygulama güvenlik kontrolünden geçmedi veya yeni ya da kararsız olarak bilinmektedir. Kendiniz bu riski alarak yükleyebilirsiniz.",
- "Please wait...." : "Lütfen bekleyin....",
"Error while disabling app" : "Uygulama devre dışı bırakılırken hata",
"Disable" : "Devre Dışı Bırak",
"Enable" : "Etkinleştir",
@@ -211,7 +207,6 @@
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için atanan en yüksek Nextcloud sürümü bulunmuyor. Bu ileride bir hata olacaktır.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Bu uygulama, aşağıdaki bağımlılıklar sağlanmadığından yüklenemiyor:",
"Enable only for specific groups" : "Sadece belirli gruplar için etkinleştir",
- "Uninstall App" : "Uygulamayı Kaldır",
"SSL Root Certificates" : "SSL Kök Sertifikaları",
"Common Name" : "Ortak Ad",
"Valid until" : "Geçerlilik",
@@ -285,7 +280,11 @@
"Default" : "Öntanımlı",
"log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
"Language changed" : "Dil değiştirildi",
+ "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
+ "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
+ "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?",
+ "Please wait...." : "Lütfen bekleyin....",
"iPhone" : "iPhone",
"Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)",
"Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar",
@@ -304,14 +303,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Özellikle dosya eşitleme için masaüstü istemcisi kullanılırken SQLite kullanımı önerilmez.",
"Experimental applications ahead" : "İlerideki deneysel uygulamalar",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Deneysel uygulamalar güvenlik açısından denetlenmemiş, yeni veya kararsız olmaya açık ya da geliştirilme aşamasında olan uygulamalardır. Yüklemek veri kaybı veya güvenlik açıklarına sebep olabilir.",
+ "Uninstall App" : "Uygulamayı Kaldır",
"Enable experimental apps" : "Deneysel uygulamaları etkinleştir",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Merhaba,<br><br>Sadece artık bir %s hesabınızın olduğunu söylemek istedim.<br><br>Kullanıcı adınız: %s<br>Şuradan erişin: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Merhaba,\n\nSadece, artık bir %s hesabınızın olduğunu söylemek istedim.\n\nKullanıcı adınız: %s\nErişim: %s\n\n",
- "Group" : "Grup",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "Harici Depolama",
- "Updates" : "Güncellemeler",
- "An error occurred: {message}" : "Bir hata oluştu: {message}"
+ "Group" : "Grup"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/settings/l10n/ug.js b/settings/l10n/ug.js
index 23c82ac55ce..c93f085439d 100644
--- a/settings/l10n/ug.js
+++ b/settings/l10n/ug.js
@@ -4,12 +4,8 @@ OC.L10N.register(
"Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"Invalid request" : "ئىناۋەتسىز ئىلتىماس",
"Email saved" : "تورخەت ساقلاندى",
- "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ",
- "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ",
- "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
"Couldn't update app." : "ئەپنى يېڭىلىيالمايدۇ.",
"All" : "ھەممىسى",
- "Please wait...." : "سەل كۈتۈڭ…",
"Disable" : "چەكلە",
"Enable" : "قوزغات",
"Updating...." : "يېڭىلاۋاتىدۇ…",
@@ -47,6 +43,10 @@ OC.L10N.register(
"set new password" : "يېڭى ئىم تەڭشە",
"Default" : "كۆڭۈلدىكى",
"Language changed" : "تىل ئۆزگەردى",
+ "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ",
+ "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ",
+ "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
+ "Please wait...." : "سەل كۈتۈڭ…",
"Log" : "خاتىرە",
"More" : "تېخىمۇ كۆپ",
"Less" : "ئاز"
diff --git a/settings/l10n/ug.json b/settings/l10n/ug.json
index 5130f148f26..70a46e94da0 100644
--- a/settings/l10n/ug.json
+++ b/settings/l10n/ug.json
@@ -2,12 +2,8 @@
"Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"Invalid request" : "ئىناۋەتسىز ئىلتىماس",
"Email saved" : "تورخەت ساقلاندى",
- "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ",
- "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ",
- "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
"Couldn't update app." : "ئەپنى يېڭىلىيالمايدۇ.",
"All" : "ھەممىسى",
- "Please wait...." : "سەل كۈتۈڭ…",
"Disable" : "چەكلە",
"Enable" : "قوزغات",
"Updating...." : "يېڭىلاۋاتىدۇ…",
@@ -45,6 +41,10 @@
"set new password" : "يېڭى ئىم تەڭشە",
"Default" : "كۆڭۈلدىكى",
"Language changed" : "تىل ئۆزگەردى",
+ "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ",
+ "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ",
+ "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
+ "Please wait...." : "سەل كۈتۈڭ…",
"Log" : "خاتىرە",
"More" : "تېخىمۇ كۆپ",
"Less" : "ئاز"
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index 1df27fc1acc..0ba5efbf720 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "Неможливо поміняти email адресу",
"Email saved" : "Адресу збережено",
"Couldn't remove app." : "Неможливо видалити додаток.",
- "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів",
- "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s",
- "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s",
"Couldn't update app." : "Не вдалося оновити додаток. ",
"Add trusted domain" : "Додати довірений домен",
"Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться",
@@ -50,7 +47,6 @@ OC.L10N.register(
"No apps found for your version" : "Немає застосунків для вашої версії",
"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." : "Схвалені додатки розроблені довіреними розробниками і пройшли незалежну перевірку безпеки. Їх активно супроводжують у репозиторії з відкритим кодом, а їх розробники стежать, щоб вони були стабільні й прийнятні для повсякденного використання.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ця програма не перевірена на вразливості безпеки і є новою або нестабільною. Встановлюйте її на власний ризик.",
- "Please wait...." : "Зачекайте, будь ласка...",
"Error while disabling app" : "Помилка вимикання додатка",
"Disable" : "Вимкнути",
"Enable" : "Увімкнути",
@@ -163,7 +159,6 @@ OC.L10N.register(
"Hide description …" : "Сховати деталі ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ця програма не може бути встановлено, так як наступні залежності не будуть виконані:",
"Enable only for specific groups" : "Включити тільки для конкретних груп",
- "Uninstall App" : "Видалити додаток",
"Common Name" : "Ім'я:",
"Valid until" : "Дійсно до",
"Issued By" : "Виданий",
@@ -220,7 +215,11 @@ OC.L10N.register(
"Default" : "За замовчуванням",
"log-level out of allowed range" : "рівень протоколювання перевищує дозволені межі",
"Language changed" : "Мову змінено",
+ "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів",
+ "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s",
+ "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
+ "Please wait...." : "Зачекайте, будь ласка...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)",
"Info, warnings, errors and fatal issues" : "Інформаційні, попередження, помилки та критичні проблеми",
"Warnings, errors and fatal issues" : "Попередження, помилки та критичні проблеми",
@@ -237,13 +236,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особливо сумнівне використання SQLite при синхронізації файлів з використанням клієнта для ПК.",
"Experimental applications ahead" : "Спершу експериментальні додатки",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Експериментальні додатки не перевірені на наявність проблем безпеки, нові або нестабільні і в процесі активної розробки. Встановлення їх може спричинити втрату даних або дірки в безпеці.",
+ "Uninstall App" : "Видалити додаток",
"Enable experimental apps" : "Увімкнути експериментальні застосунки",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Агов,<br><br>просто щоб ви знали, у вас є аккаунт %s.<br><br>Ваше ім'я користувача: %s<br>Перейдіть сюди: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Агов,\n\nпросто щоб ви знали, у вас є аккаунт %s.\n\nВаше ім'я користувача: %s\nПерейдіть сюди: %s\n\n",
- "Group" : "Група",
- "Redis" : "Redis",
- "External Storage" : "Зовнішні сховища",
- "Updates" : "Оновлення",
- "An error occurred: {message}" : "Сталася помилка: {message}"
+ "Group" : "Група"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index e660970f1ec..948dc4de7ee 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "Неможливо поміняти email адресу",
"Email saved" : "Адресу збережено",
"Couldn't remove app." : "Неможливо видалити додаток.",
- "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів",
- "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s",
- "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s",
"Couldn't update app." : "Не вдалося оновити додаток. ",
"Add trusted domain" : "Додати довірений домен",
"Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться",
@@ -48,7 +45,6 @@
"No apps found for your version" : "Немає застосунків для вашої версії",
"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." : "Схвалені додатки розроблені довіреними розробниками і пройшли незалежну перевірку безпеки. Їх активно супроводжують у репозиторії з відкритим кодом, а їх розробники стежать, щоб вони були стабільні й прийнятні для повсякденного використання.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ця програма не перевірена на вразливості безпеки і є новою або нестабільною. Встановлюйте її на власний ризик.",
- "Please wait...." : "Зачекайте, будь ласка...",
"Error while disabling app" : "Помилка вимикання додатка",
"Disable" : "Вимкнути",
"Enable" : "Увімкнути",
@@ -161,7 +157,6 @@
"Hide description …" : "Сховати деталі ...",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ця програма не може бути встановлено, так як наступні залежності не будуть виконані:",
"Enable only for specific groups" : "Включити тільки для конкретних груп",
- "Uninstall App" : "Видалити додаток",
"Common Name" : "Ім'я:",
"Valid until" : "Дійсно до",
"Issued By" : "Виданий",
@@ -218,7 +213,11 @@
"Default" : "За замовчуванням",
"log-level out of allowed range" : "рівень протоколювання перевищує дозволені межі",
"Language changed" : "Мову змінено",
+ "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів",
+ "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s",
+ "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
+ "Please wait...." : "Зачекайте, будь ласка...",
"Everything (fatal issues, errors, warnings, info, debug)" : "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)",
"Info, warnings, errors and fatal issues" : "Інформаційні, попередження, помилки та критичні проблеми",
"Warnings, errors and fatal issues" : "Попередження, помилки та критичні проблеми",
@@ -235,13 +234,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особливо сумнівне використання SQLite при синхронізації файлів з використанням клієнта для ПК.",
"Experimental applications ahead" : "Спершу експериментальні додатки",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Експериментальні додатки не перевірені на наявність проблем безпеки, нові або нестабільні і в процесі активної розробки. Встановлення їх може спричинити втрату даних або дірки в безпеці.",
+ "Uninstall App" : "Видалити додаток",
"Enable experimental apps" : "Увімкнути експериментальні застосунки",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Агов,<br><br>просто щоб ви знали, у вас є аккаунт %s.<br><br>Ваше ім'я користувача: %s<br>Перейдіть сюди: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Агов,\n\nпросто щоб ви знали, у вас є аккаунт %s.\n\nВаше ім'я користувача: %s\nПерейдіть сюди: %s\n\n",
- "Group" : "Група",
- "Redis" : "Redis",
- "External Storage" : "Зовнішні сховища",
- "Updates" : "Оновлення",
- "An error occurred: {message}" : "Сталася помилка: {message}"
+ "Group" : "Група"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/settings/l10n/vi.js b/settings/l10n/vi.js
index 7ebe8f3a668..cd73020bddb 100644
--- a/settings/l10n/vi.js
+++ b/settings/l10n/vi.js
@@ -9,12 +9,8 @@ OC.L10N.register(
"Unable to change full name" : "Họ và tên không thể đổi ",
"Your full name has been changed." : "Họ và tên đã được thay đổi.",
"Email saved" : "Lưu email",
- "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
- "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s",
- "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s",
"Couldn't update app." : "Không thể cập nhật ứng dụng",
"All" : "Tất cả",
- "Please wait...." : "Xin hãy đợi...",
"Disable" : "Tắt",
"Enable" : "Bật",
"Updating...." : "Đang cập nhật...",
@@ -63,10 +59,13 @@ OC.L10N.register(
"set new password" : "đặt mật khẩu mới",
"Default" : "Mặc định",
"Language changed" : "Ngôn ngữ đã được thay đổi",
+ "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
+ "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s",
+ "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s",
+ "Please wait...." : "Xin hãy đợi...",
"Log" : "Log",
"More" : "hơn",
"Less" : "ít",
- "Group" : "N",
- "External Storage" : "Lưu trữ ngoài"
+ "Group" : "N"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/vi.json b/settings/l10n/vi.json
index bdbe044ba1a..cd1a4245ca0 100644
--- a/settings/l10n/vi.json
+++ b/settings/l10n/vi.json
@@ -7,12 +7,8 @@
"Unable to change full name" : "Họ và tên không thể đổi ",
"Your full name has been changed." : "Họ và tên đã được thay đổi.",
"Email saved" : "Lưu email",
- "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
- "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s",
- "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s",
"Couldn't update app." : "Không thể cập nhật ứng dụng",
"All" : "Tất cả",
- "Please wait...." : "Xin hãy đợi...",
"Disable" : "Tắt",
"Enable" : "Bật",
"Updating...." : "Đang cập nhật...",
@@ -61,10 +57,13 @@
"set new password" : "đặt mật khẩu mới",
"Default" : "Mặc định",
"Language changed" : "Ngôn ngữ đã được thay đổi",
+ "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
+ "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s",
+ "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s",
+ "Please wait...." : "Xin hãy đợi...",
"Log" : "Log",
"More" : "hơn",
"Less" : "ít",
- "Group" : "N",
- "External Storage" : "Lưu trữ ngoài"
+ "Group" : "N"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index efbb86447dd..9392b2d92e1 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -3,58 +3,63 @@ OC.L10N.register(
{
"Enabled" : "开启",
"Not enabled" : "未启用",
- "Wrong password" : "错误密码",
+ "Wrong password" : "密码错误",
"Saved" : "已保存",
"No user supplied" : "没有满足的用户",
- "Unable to change password" : "不能更改密码",
+ "Unable to change password" : "无法修改密码",
"Authentication error" : "认证错误",
- "Please provide an admin recovery password, otherwise all user data will be lost" : "请提供管理员恢复密码,否则所有用户的数据都将遗失。",
- "Wrong admin recovery password. Please check the password and try again." : "错误的管理员恢复密码。请检查密码并重试。",
- "Backend doesn't support password change, but the user's encryption key was successfully updated." : "后端不支持密码更改,但用户的加密密钥已成功更新。",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "请提供管理员恢复密码, 否则所有用户的数据都将丢失.",
+ "Wrong admin recovery password. Please check the password and try again." : "错误的管理员恢复密码. 请检查密码并重试.",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "后端不支持修改密码, 但用户的加密密钥已成功更新.",
"installing and updating apps via the app store or Federated Cloud Sharing" : "通过应用程序商店或联合云共享安装和更新应用程序",
"Federated Cloud Sharing" : "联合云共享",
- "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL使用了过时 %s 版本 (%s)。请更新你的操作系统或功能比如 %s 将无法可靠地工作。",
- "A problem occurred, please check your log files (Error: %s)" : "出现了故障,请检查你的日志文件 (错误: %s)",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL 当前使用的过时 %s 的版本 (%s). 请更新你的操作系统或组件, 例如 %s 将无法可靠地工作.",
+ "A problem occurred, please check your log files (Error: %s)" : "出现了问题, 请检查您的日志文件 (错误: %s)",
"Migration Completed" : "迁移完成",
- "Group already exists." : "组已经存在。",
- "Unable to add group." : "无法添加组。",
- "Unable to delete group." : "无法删除组",
+ "Group already exists." : "分组已经存在.",
+ "Unable to add group." : "无法添加分组.",
+ "Unable to delete group." : "无法删除分组.",
"test email settings" : "测试电子邮件设置",
- "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "在发送电子邮件时出现问题。请修改您的设置。 (错误: %s)",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "在发送电子邮件时出现问题. 请修正您的设置. (错误: %s)",
"Email sent" : "邮件已发送",
- "You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的用户电子邮件。",
+ "You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的电子邮件地址.",
"Invalid request" : "无效请求",
"Invalid mail address" : "无效的电子邮件地址",
- "A user with that name already exists." : "使用该名称的用户已存在。",
- "Unable to create user." : "无法创建用户。",
+ "No valid group selected" : "没有选择有效的分组",
+ "A user with that name already exists." : "使用该名称的用户已存在.",
+ "Unable to create user." : "无法创建用户.",
"Your %s account was created" : "你的帐户 %s 已创建",
- "Unable to delete user." : "不能删除用户",
+ "Unable to delete user." : "无法删除用户",
+ "Settings saved" : "设置已保存",
"Unable to change full name" : "无法修改全名",
- "Your full name has been changed." : "您的全名已修改。",
+ "Unable to change email address" : "无法修改电子邮箱地址",
+ "Your full name has been changed." : "您的全名已修改.",
"Forbidden" : "被禁止",
- "Invalid user" : "用户无效",
- "Unable to change mail address" : "无法更改邮箱地址",
+ "Invalid user" : "无效用户",
+ "Unable to change mail address" : "无法修改电子邮箱地址",
"Email saved" : "电子邮件已保存",
- "Couldn't remove app." : "无法删除应用。",
- "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。",
- "Unable to add user to group %s" : "无法把用户增加到组 %s",
- "Unable to remove user from group %s" : "无法从组%s中移除用户",
- "Couldn't update app." : "无法更新应用。",
- "Add trusted domain" : "添加信任域",
- "Migration in progress. Please wait until the migration is finished" : "迁移正在进行中。请等待,直到完成迁移",
+ "Password confirmation is required" : "需要密码确认",
+ "Couldn't remove app." : "无法删除应用.",
+ "Couldn't update app." : "无法更新应用.",
+ "Are you really sure you want add {domain} as trusted domain?" : "您确定将 {domain} 添加为信任的域名么?",
+ "Add trusted domain" : "添加信任域名",
+ "Migration in progress. Please wait until the migration is finished" : "正在进行迁移. 请稍等, 直到迁移完成",
"Migration started …" : "迁移开始...",
+ "Not saved" : "未保存",
"Sending..." : "正在发送...",
"Official" : "官方",
"All" : "全部",
"Update to %s" : "更新为 %s",
"_You have %n app update pending_::_You have %n app updates pending_" : ["%n 个应用正在等待升级"],
"No apps found for your version" : "未找到适合当前版本的应用",
- "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." : "已认可的应用是由值得信赖的开发商开发,并已通过了一个粗略的安全检查。他们放在一个开放的代码库并且维护人员认为他们是稳定的差不多可以正常使用。",
- "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用未检查安全问题,它是新的或已知是不稳定的。安装风险自担。",
- "Please wait...." : "请稍等....",
+ "The app will be downloaded from the app store" : "该应用将从应用商店下载",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "官方应用由社区和内部开发. 其可以提供核心功能并保证生产用途.",
+ "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." : "认证应用由值得信赖的开发者开发, 并通过了一个粗略的安全检查. 其在开放的代码库中活跃地维护, 他们的维护者认为在普通用途足够稳定.",
+ "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用没有检查安全问题, 它是新的或已知不稳定的. 安装风险自担.",
+ "Enabling app …" : "正在启用应用程序...",
"Error while disabling app" : "禁用应用时出错",
"Disable" : "禁用",
- "Enable" : "开启",
+ "Enable" : "启用",
"Error while enabling app" : "启用应用时出错",
"Error: this app cannot be enabled because it makes the server unstable" : "错误: 无法启用应用因为它会导致服务器不稳定",
"Error: could not disable broken app" : "错误: 无法禁用损坏的应用",
@@ -62,31 +67,70 @@ OC.L10N.register(
"Updating...." : "正在更新....",
"Error while updating app" : "更新应用时出错",
"Updated" : "已更新",
- "Uninstalling ...." : "卸载中....",
+ "Uninstalling ...." : "正在卸载....",
"Error while uninstalling app" : "卸载应用时发生了一个错误",
"Uninstall" : "卸载",
- "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "该应用已启用,但是需要更新。5秒后将跳转到更新页面。",
- "App update" : "应用更新",
- "Approved" : "已认可",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "该应用已启用, 但是需要更新. 5秒后将跳转到更新页面.",
+ "App update" : "更新应用",
+ "Approved" : "已认证",
"Experimental" : "实验",
- "An error occurred. Please upload an ASCII-encoded PEM certificate." : "出现了一个错误。请上传 ASCII 编码的 PEM 证书。",
+ "No apps found for {query}" : "找不到符合 {query} 的应用",
+ "Allow filesystem access" : "允许访问文件系统",
+ "Disconnect" : "断开连接",
+ "Revoke" : "撤销",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome for Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS 客户端",
+ "Android Client" : "Android 客户端",
+ "Sync client - {os}" : "同步客户端 - {os}",
+ "This session" : "当前会话",
+ "Copy" : "复制",
+ "Copied!" : "已复制!",
+ "Not supported!" : "不支持!",
+ "Press ⌘-C to copy." : "按 ⌘-C 键复制.",
+ "Press Ctrl-C to copy." : "按 Ctrl-C 复制.",
+ "Error while loading browser sessions and device tokens" : "加载浏览器会话和设备令牌时出错",
+ "Error while creating device token" : "创建设备令牌时出错",
+ "Error while deleting the token" : "删除令牌时出错",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "出现了一个错误. 请上传 ASCII 编码的 PEM 证书.",
"Valid until {date}" : "有效期至 {date}",
"Delete" : "删除",
+ "Local" : "本地",
+ "Private" : "私有",
+ "Only visible to local users" : "仅对本地用户可见",
+ "Only visible to you" : "仅您自己可见",
+ "Contacts" : "联系人",
+ "Visible to local users and to trusted servers" : "仅对本地用户和信任的服务器可见",
+ "Public" : "公开",
+ "Will be synced to a global and public address book" : "将同步到全局和公开地址簿中",
"Select a profile picture" : "选择头像",
"Very weak password" : "非常弱的密码",
"Weak password" : "弱密码",
"So-so password" : "一般强度的密码",
"Good password" : "较强的密码",
"Strong password" : "强密码",
- "Groups" : "组",
+ "Groups" : "分组",
"Unable to delete {objName}" : "无法删除 {objName}",
- "Error creating group: {message}" : "创建组时出错: {message}",
- "A valid group name must be provided" : "请提供一个有效的组名称",
+ "Error creating group: {message}" : "创建分组时出错: {message}",
+ "A valid group name must be provided" : "请提供一个有效的分组名称",
"deleted {groupName}" : "已删除 {groupName}",
"undo" : "撤销",
"never" : "从不",
"deleted {userName}" : "已删除 {userName}",
- "Changing the password will result in data loss, because data recovery is not available for this user" : "更改密码会导致数据丢失,因为数据恢复不适用于此用户",
+ "Unable to add user to group {group}" : "无法将用户添加到分组 {group}",
+ "Unable to remove user from group {group}" : "无法从分组 {group} 中移除用户",
+ "Add group" : "添加分组",
+ "Invalid quota value \"{val}\"" : "无效的配额值 \"{val}\"",
+ "no group" : "没有分组",
+ "Password successfully changed" : "密码修改成功",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "修改密码会导致数据丢失, 因为数据恢复不适用于此用户",
+ "Could not change the users email" : "无法修改用户电子邮箱地址",
"A valid username must be provided" : "必须提供合法的用户名",
"Error creating user: {message}" : "创建用户出错: {message}",
"A valid password must be provided" : "必须提供合法的密码",
@@ -94,14 +138,18 @@ OC.L10N.register(
"__language_name__" : "简体中文",
"Unlimited" : "无限",
"Personal info" : "个人信息",
- "Sync clients" : "客户端",
+ "Sessions" : "会话",
+ "App passwords" : "应用密码",
+ "Sync clients" : "同步客户端",
"None" : "无",
"Login" : "登录",
- "Plain" : "Plain",
+ "Plain" : "明文",
"NT LAN Manager" : "NT LAN 管理器",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "电子邮件服务器",
"Open documentation" : "打开文档",
- "This is used for sending out notifications." : "这被用于发送通知。",
+ "This is used for sending out notifications." : "这被用于发送通知.",
"Send mode" : "发送模式",
"Encryption" : "加密",
"From address" : "来自地址",
@@ -118,39 +166,47 @@ OC.L10N.register(
"Send email" : "发送邮件",
"Server-side encryption" : "服务器端加密",
"Enable server-side encryption" : "启用服务器端加密",
- "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前,请仔细阅读:",
- "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密被启用,之后上传到服务器的所有文件都将服务器上加密。只有当启用状态的加密模块支持解密并且所有的先决条件(例如,设定恢复键)得到满足时才能解除加密。",
- "Be aware that encryption always increases the file size." : "请注意,加密会增加文件大小。",
- "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." : "定期备份数据有利于保证数据完整,并且确保备份您的加密数据和加密密钥。",
- "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告:你真的想启用加密?",
+ "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前, 请仔细阅读:",
+ "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密被启用, 之后上传到服务器的所有文件都将服务器上加密. 只有当启用状态的加密模块支持解密并且所有前提都满足时 (例如: 设定恢复密钥) 才能解除加密.",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "单独的加密不能保证系统的安全性. 请参考加密应用工作原理和支持的用例的文档获取更多信息",
+ "Be aware that encryption always increases the file size." : "请注意, 加密会增加文件大小.",
+ "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." : "定期备份数据有助于保证数据完整, 并且确保备份您的加密数据和加密密钥.",
+ "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告: 你确定要启用加密?",
"Enable encryption" : "启用加密",
- "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块,请在 APP 应用菜单中启用加密模块。",
- "Select default encryption module:" : "选择默认的加密模块:",
- "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'" : "你需要升级你的加密密钥 (旧版 ownCloud <= 8.0) 。 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'",
- "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要将加密密钥从旧版(ownCloud<=8.0)迁移到新版。",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块, 请在 APP 应用菜单中启用加密模块.",
+ "Select default encryption module:" : "选择默认的加密模块:",
+ "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'" : "您需要从旧版本 (ownCloud <= 8.0) 迁移您的加密密钥. 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要从旧版本 (ownCloud<=8.0) 迁移您的加密密钥.",
"Start migration" : "开始迁移",
"Security & setup warnings" : "安全及设置警告",
- "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 似乎没有设置好查询的系统环境变量。 用 getenv(\\\"PATH\\\") 测试只返回一个空值。",
- "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." : "只读配置已启用。这样可防止通过 WEB 接口设置一些配置。此外,每次更新后该文件需要手动设置为可写。",
- "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除行内 <doc> 块,这将导致数个核心应用无法访问。",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "这可能是由缓存/加速器造成的,例如 Zend OPcache 或 eAccelerator。",
- "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP模块'文件信息'丢失. 我们强烈建议启用此模块以便mime类型检测取得最佳结果.",
- "System locale can not be set to a one which supports UTF-8." : "系统语系无法设置为支持 UTF-8 的语系。",
- "This means that there might be problems with certain characters in file names." : "这意味着一些文件名中的特定字符可能有问题。",
- "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议安装在系统上所需的软件包支持以下区域设置之一: %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\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")",
- "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:",
- "All checks passed." : "所有检查已通过。",
+ "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 的设置似乎有问题, 无法获取系统环境变量. 使用 getenv(\\\"PATH\\\") 测试时仅返回空结果.",
+ "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." : "请检查 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">安装文档 ↗</a> 中关于 PHP 配置的说明并在您的服务器中进行配置, 尤其是使用 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." : "已启用只读配置. 这将阻止在 Web 界面中进行设置. 此外, 每次更新后该文件需要手动设置为可写入.",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除内联块, 这将导致多个核心应用无法访问.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "这可能是由缓存/加速器造成的, 例如 Zend OPcache 或 eAccelerator.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "您的数据库不能在 \"READ COMMITTED\" 事务隔离级别运行. 这样可能导致在多个并行操作时出现问题.",
+ "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "已安装 %1$s 的低版本 %2$s. 出于稳定性和性能的原因, 我们建议您升级到更新的 %1$s 版本.",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 模块 'fileinfo' 缺失. 我们强烈建议启用此模块以便在 MIME 类型检测时获得最准确的结果.",
+ "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." : "事务文件锁被禁用, 这可能导致竞争条件的问题. 在 config.php 中启用 'filelocking.enabled' 选项来避免这些问题. 请参考 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">文档↗</a> 获取更多信息.",
+ "System locale can not be set to a one which supports UTF-8." : "系统区域无法设置为支持 UTF-8 的区域.",
+ "This means that there might be problems with certain characters in file names." : "这意味着当文件名中包含特定字符时可能出现问题.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议在您的系统中安装需要的包以支持下列区域: %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\")" : "如果您不是安装在域名的根目录, 并且使用系统 cron 服务时, 可能导致 URL 生成问题. 为了避免这些问题, 请在您的 config.php 文件中设置 \"overwrite.cli.url\" 选项为您的安装根目录路径 (建议: \"%s\")",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下列的技术错误, 无法通过 CLI 执行计划任务:",
+ "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>." : "请再次检查 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">安装指南 ↗</a>, 并检查 <a href=\"%s\">日志</a> 中的任何错误或警告.",
+ "All checks passed." : "所有检查已通过.",
"Cron" : "计划任务",
- "Last cron job execution: %s." : "上次定时任务执行于: %s.",
- "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 似乎有些问题。",
- "Cron was not executed yet!" : "定时任务还未被执行!",
+ "Last cron job execution: %s." : "上次定时任务执行于: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 但存在一些问题.",
+ "Cron was not executed yet!" : "定时任务还未被执行!",
"Execute one task with each page loaded" : "每个页面加载后执行一个任务",
- "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 已注册于一个 webcron 服务来通过 http 每 15 分钟执行 cron.php。",
- "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 CRON 服务每 15 分钟执行一次 cron.php 文件。",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 注册到 webcron 服务上, 通过 http 每 15 分钟执行 cron.php.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 cron 服务每 15 分钟执行一次 cron.php 文件.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "cron.php 需要被系统用户 \"%s\" 执行.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "为了运行该功能, 您需要 PHP posix 扩展. 请参考 {linkstart}PHP 文档{linkend} 获取更多信息.",
"Version" : "版本",
"Sharing" : "共享",
- "Allow apps to use the Share API" : "允许应用软件使用共享API",
+ "Allow apps to use the Share API" : "允许应用使用共享 API",
"Allow users to share via link" : "允许用户通过链接分享文件",
"Allow public uploads" : "允许公开上传",
"Enforce password protection" : "强制密码保护",
@@ -158,93 +214,143 @@ OC.L10N.register(
"Expire after " : "过期于",
"days" : "天",
"Enforce expiration date" : "强制过期日期",
- "Allow resharing" : "允许再次共享",
+ "Allow resharing" : "允许二次共享",
"Allow sharing with groups" : "允许群组共享",
"Restrict users to only share with users in their groups" : "限制仅与组内用户分享",
"Exclude groups from sharing" : "在分享中排除组",
- "These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享,但无法向他人分享。",
- "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "允许在共享对话框中的自动补全用户名。如果被禁用,需要输入用户全名。",
- "Tips & tricks" : "技巧提示",
- "How to do backups" : "如何做备份",
+ "These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享, 但无法向他人分享.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "允许在共享对话框中自动补全用户名. 如果被禁用, 需要输入完整的用户名.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "在公开链接上传页中显示免责声明. (仅当文件列表隐藏时显示)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "这些内容将在公开链接上传页中当文件列表隐藏时显示.",
+ "Tips & tricks" : "小提示",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite 当前被用作数据库. 对于较大数据量的安装和使用, 我们建议您切换到不同的数据库后端.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "当时用桌面客户端同步文件时特别推荐.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "合并其他数据库可以使用命令行工具: 'occ db:convert-type', 或查看 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">文档 ↗</a>.",
+ "How to do backups" : "如何备份",
"Advanced monitoring" : "高级监控",
"Performance tuning" : "性能优化",
- "Improving the config.php" : "正在优化 config.php",
+ "Improving the config.php" : "优化 config.php",
"Theming" : "主题",
"Hardening and security guidance" : "强化和安全指南",
"Developer documentation" : "开发者文档",
+ "by %s" : "由 %s",
"%s-licensed" : "%s-许可协议",
- "Documentation:" : "文档:",
+ "Documentation:" : "文档:",
"User documentation" : "用户文档",
"Admin documentation" : "管理员文档",
+ "Visit website" : "访问网站",
+ "Report a bug" : "报告问题",
"Show description …" : "显示描述...",
"Hide description …" : "隐藏描述...",
- "This app has an update available." : "此应用有可用的更新。",
- "This app cannot be installed because the following dependencies are not fulfilled:" : "此应用程序无法安装,因为以下依赖性不满足:",
- "Enable only for specific groups" : "仅对特定的组开放",
- "Uninstall App" : "卸载应用",
+ "This app has an update available." : "此应用有可用的更新.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "该应用没有指定支持的 Nextcloud 最低版本. 可能会在将来出现问题.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "该应用没有指定支持的 Nextcloud 最高版本. 可能会在将来出现问题.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "无法安装应用, 因为无法满足下列依赖: ",
+ "Enable only for specific groups" : "仅特定组启用",
+ "Uninstall app" : "卸载应用",
"SSL Root Certificates" : "SSL 根证书",
"Common Name" : "通用名称",
"Valid until" : "有效期至",
"Issued By" : "授权由",
"Valid until %s" : "有效期至 %s",
"Import root certificate" : "导入根证书",
- "Cheers!" : "干杯!",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "您好,<br><br>您刚刚创建了 %s 账户<br><br>您的用户名: <strong>%s</strong><br>现在访问: <strong><a href=\"%s\">%s</a></strong><br><br>",
+ "Cheers!" : "干杯!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "您好,\n\n您刚刚创建了 %s 账户.\n\n您的用户名: %s\n现在访问: %s\n",
"Administrator documentation" : "管理员文档",
"Online documentation" : "在线文档",
"Forum" : "论坛",
+ "Getting help" : "获取帮助",
"Commercial support" : "商业支持",
- "Profile picture" : "联系人图片",
- "Upload new" : "上传新的",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> of <strong>%s</strong>",
+ "Profile picture" : "账户头像",
+ "Upload new" : "上传",
"Select from Files" : "选择文件",
- "Remove image" : "移除图片",
- "png or jpg, max. 20 MB" : "png或jpg格式最大不超过20MB大小",
+ "Remove image" : "删除图片",
+ "png or jpg, max. 20 MB" : "png 或 jpg 格式, 不超过 20MB",
"Picture provided by original account" : "原始账户图片",
"Cancel" : "取消",
- "Choose as profile picture" : "选择图片",
+ "Choose as profile picture" : "选择个人头像",
"Full name" : "全名",
"No display name set" : "不显示名称设置",
"Email" : "电子邮件",
"Your email address" : "您的电子邮件",
"No email address set" : "尚未设置 Email 地址",
- "For password recovery and notifications" : "用户恢复密码通知",
- "You are member of the following groups:" : "您是以下组的成员:",
+ "For password recovery and notifications" : "用于密码恢复和通知",
+ "Phone number" : "电话号码",
+ "Your phone number" : "您的电话号码",
+ "Address" : "地址",
+ "Your postal address" : "您的邮寄地址",
+ "Website" : "网站",
+ "Your website" : "您的网站",
+ "Twitter" : "Twitter",
+ "Your Twitter handle" : "您的 Twitter 账号",
+ "You are member of the following groups:" : "您是以下组的成员:",
"Password" : "密码",
"Current password" : "当前密码",
"New password" : "新密码",
"Change password" : "修改密码",
"Language" : "语言",
"Help translate" : "帮助翻译",
- "Get the apps to sync your files" : "安装应用进行文件同步",
+ "Get the apps to sync your files" : "下载应用同步您的文件",
"Desktop client" : "桌面客户端",
"Android app" : "Android 应用",
"iOS app" : "iOS 应用",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "如果您想支持这个项目 {contributeopen}一起开发{linkclose} 或 {contributeopen}帮助传播{linkclose}!",
"Show First Run Wizard again" : "再次显示首次运行向导",
+ "Web, desktop and mobile clients currently logged in to your account." : "您账号当前登录的 Web 页面, 桌面和客户端客户端.",
+ "Device" : "设备",
+ "Last activity" : "最后活跃",
+ "Passcodes that give an app or device permissions to access your account." : "Passcodes 可以使应用或设备访问您的账号.",
"Name" : "名称",
+ "App name" : "应用名",
+ "Create new app password" : "创建新应用密码",
+ "Use the credentials below to configure your app or device." : "使用下述凭据配置您的应用或设备.",
+ "For security reasons this password will only be shown once." : "由于安全原因, 密码仅会显示一次.",
"Username" : "用户名",
+ "Done" : "完成",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "由 {communityopen}Nextcloud community{linkclose} 开发, {githubopen}源代码{linkclose} 基于 {licenseopen}AGPL{linkclose} 许可协议.",
+ "Follow us on Google Plus!" : "在 Google+ 上关注我们!",
+ "Like our facebook page!" : "点赞我们 facebook 页面!",
+ "Subscribe to our twitter channel!" : "关注我们的 twitter!",
+ "Subscribe to our news feed!" : "订阅我们 RSS 最新消息!",
+ "Subscribe to our newsletter!" : "订阅我们的最新消息!",
"Show storage location" : "显示存储位置",
"Show last log in" : "显示最后登录",
- "Show user backend" : "显示用户后端",
+ "Show user backend" : "显示用户来源",
"Send email to new user" : "发送电子邮件给新用户",
"Show email address" : "显示邮件地址",
"E-Mail" : "E-Mail",
"Create" : "创建",
"Admin Recovery Password" : "管理恢复密码",
"Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件",
+ "Group name" : "分组名",
"Everyone" : "所有人",
"Admins" : "管理员",
- "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "请输入存储限额 (ex: \"512 MB\" or \"12 GB\")",
+ "Default quota" : "默认配额",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "请输入存储配额 (例如: \"512 MB\" 或 \"12 GB\")",
"Other" : "其它",
+ "Group admin for" : "分组管理员",
"Quota" : "配额",
+ "Storage location" : "存储位置",
+ "User backend" : "用户来源",
+ "Last login" : "最后登录",
"change full name" : "更改全名",
"set new password" : "设置新密码",
"change email address" : "修改电子邮箱地址",
"Default" : "默认",
"log-level out of allowed range" : "日志级别超出允许的范围",
"Language changed" : "语言已修改",
- "Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?",
- "Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)",
- "Info, warnings, errors and fatal issues" : "信息,警告,错误和灾难性问题",
- "Warnings, errors and fatal issues" : "警告,错误和灾难性问题",
+ "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组",
+ "Unable to add user to group %s" : "无法将用户添加到分组 %s",
+ "Unable to remove user from group %s" : "无法从分组 %s 中移除用户",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "您确定将 \"{domain}\" 添加为信任的域名么?",
+ "Please wait...." : "请稍等....",
+ "iPhone" : "iPhone",
+ "add group" : "添加分组",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "全部 (灾难性问题, 错误, 警告, 信息, 调试)",
+ "Info, warnings, errors and fatal issues" : "信息, 警告, 错误和灾难性问题",
+ "Warnings, errors and fatal issues" : "警告, 错误和灾难性问题",
"Errors and fatal issues" : "错误和灾难性问题",
"Fatal issues only" : "仅灾难性问题",
"Log" : "日志",
@@ -252,21 +358,25 @@ OC.L10N.register(
"Download logfile" : "下载日志文件",
"More" : "更多",
"Less" : "更少",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过了 100 MB. 下载可能需要一些时间!",
"Allow users to send mail notification for shared files" : "允许用户发送共享文件的邮件通知",
"Allow users to send mail notification for shared files to other users" : "允许用户发送共享文件的邮件通知给其他用户",
- "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库。对于较大数据量的安装和使用,我们建议您切换到不同的数据库后端。",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。",
+ "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库. 对于较大数据量的安装和使用, 我们建议您切换到不同的数据库后端.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端同步文件时, 不建议使用 SQLite.",
"Experimental applications ahead" : "未来的实验应用",
- "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "实验应用程序没有在安全性的问题上作过多检查,新的或已知的不稳定 BUG 都在开发中。安装它们可能会导致数据丢失或安全漏洞。",
+ "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "实验性应用程序没有检查安全性问题, 它是新的或已知不稳定的. 安装它们可能会导致数据丢失或安全漏洞.",
+ "Uninstall App" : "卸载应用",
"Enable experimental apps" : "启用实验性应用程序",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "亲,<br><br>现在我们为你开通了 %s 私有云帐户。<br><br>你的用户名: %s<br>访问网址: <a href=\\\"%s\\\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "亲,\\n\\n 现在我们为你开通了 %s 私有去帐户。\\n\\n 你的用户名: %s\\n 访问网址: %s\\n 你的初始密码需要咨询系统管理员。或者你也可以在登录页面输入任意密码登录,\\n登录窗口将出现忘记密码链接,点击通过注册邮箱重设初始密码。\\n\\n",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "如果您想支持这个项目\n\t<a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">一起开发</a>\n\t<or></or>\n\t<a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">帮助传播</a>!",
+ "Add Group" : "添加分组",
"Group" : "分组",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "外部存储",
- "Updates" : "更新",
- "An error occurred: {message}" : "发生错误: {message}"
+ "Default Quota" : "默认配额",
+ "Full Name" : "全名",
+ "Group Admin for" : "分组管理员",
+ "Storage Location" : "存储位置",
+ "User Backend" : "用户来源",
+ "Last Login" : "最后登录"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index 17c5ba13b32..46079a83ceb 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -1,58 +1,63 @@
{ "translations": {
"Enabled" : "开启",
"Not enabled" : "未启用",
- "Wrong password" : "错误密码",
+ "Wrong password" : "密码错误",
"Saved" : "已保存",
"No user supplied" : "没有满足的用户",
- "Unable to change password" : "不能更改密码",
+ "Unable to change password" : "无法修改密码",
"Authentication error" : "认证错误",
- "Please provide an admin recovery password, otherwise all user data will be lost" : "请提供管理员恢复密码,否则所有用户的数据都将遗失。",
- "Wrong admin recovery password. Please check the password and try again." : "错误的管理员恢复密码。请检查密码并重试。",
- "Backend doesn't support password change, but the user's encryption key was successfully updated." : "后端不支持密码更改,但用户的加密密钥已成功更新。",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "请提供管理员恢复密码, 否则所有用户的数据都将丢失.",
+ "Wrong admin recovery password. Please check the password and try again." : "错误的管理员恢复密码. 请检查密码并重试.",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "后端不支持修改密码, 但用户的加密密钥已成功更新.",
"installing and updating apps via the app store or Federated Cloud Sharing" : "通过应用程序商店或联合云共享安装和更新应用程序",
"Federated Cloud Sharing" : "联合云共享",
- "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL使用了过时 %s 版本 (%s)。请更新你的操作系统或功能比如 %s 将无法可靠地工作。",
- "A problem occurred, please check your log files (Error: %s)" : "出现了故障,请检查你的日志文件 (错误: %s)",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL 当前使用的过时 %s 的版本 (%s). 请更新你的操作系统或组件, 例如 %s 将无法可靠地工作.",
+ "A problem occurred, please check your log files (Error: %s)" : "出现了问题, 请检查您的日志文件 (错误: %s)",
"Migration Completed" : "迁移完成",
- "Group already exists." : "组已经存在。",
- "Unable to add group." : "无法添加组。",
- "Unable to delete group." : "无法删除组",
+ "Group already exists." : "分组已经存在.",
+ "Unable to add group." : "无法添加分组.",
+ "Unable to delete group." : "无法删除分组.",
"test email settings" : "测试电子邮件设置",
- "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "在发送电子邮件时出现问题。请修改您的设置。 (错误: %s)",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "在发送电子邮件时出现问题. 请修正您的设置. (错误: %s)",
"Email sent" : "邮件已发送",
- "You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的用户电子邮件。",
+ "You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的电子邮件地址.",
"Invalid request" : "无效请求",
"Invalid mail address" : "无效的电子邮件地址",
- "A user with that name already exists." : "使用该名称的用户已存在。",
- "Unable to create user." : "无法创建用户。",
+ "No valid group selected" : "没有选择有效的分组",
+ "A user with that name already exists." : "使用该名称的用户已存在.",
+ "Unable to create user." : "无法创建用户.",
"Your %s account was created" : "你的帐户 %s 已创建",
- "Unable to delete user." : "不能删除用户",
+ "Unable to delete user." : "无法删除用户",
+ "Settings saved" : "设置已保存",
"Unable to change full name" : "无法修改全名",
- "Your full name has been changed." : "您的全名已修改。",
+ "Unable to change email address" : "无法修改电子邮箱地址",
+ "Your full name has been changed." : "您的全名已修改.",
"Forbidden" : "被禁止",
- "Invalid user" : "用户无效",
- "Unable to change mail address" : "无法更改邮箱地址",
+ "Invalid user" : "无效用户",
+ "Unable to change mail address" : "无法修改电子邮箱地址",
"Email saved" : "电子邮件已保存",
- "Couldn't remove app." : "无法删除应用。",
- "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组。",
- "Unable to add user to group %s" : "无法把用户增加到组 %s",
- "Unable to remove user from group %s" : "无法从组%s中移除用户",
- "Couldn't update app." : "无法更新应用。",
- "Add trusted domain" : "添加信任域",
- "Migration in progress. Please wait until the migration is finished" : "迁移正在进行中。请等待,直到完成迁移",
+ "Password confirmation is required" : "需要密码确认",
+ "Couldn't remove app." : "无法删除应用.",
+ "Couldn't update app." : "无法更新应用.",
+ "Are you really sure you want add {domain} as trusted domain?" : "您确定将 {domain} 添加为信任的域名么?",
+ "Add trusted domain" : "添加信任域名",
+ "Migration in progress. Please wait until the migration is finished" : "正在进行迁移. 请稍等, 直到迁移完成",
"Migration started …" : "迁移开始...",
+ "Not saved" : "未保存",
"Sending..." : "正在发送...",
"Official" : "官方",
"All" : "全部",
"Update to %s" : "更新为 %s",
"_You have %n app update pending_::_You have %n app updates pending_" : ["%n 个应用正在等待升级"],
"No apps found for your version" : "未找到适合当前版本的应用",
- "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." : "已认可的应用是由值得信赖的开发商开发,并已通过了一个粗略的安全检查。他们放在一个开放的代码库并且维护人员认为他们是稳定的差不多可以正常使用。",
- "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用未检查安全问题,它是新的或已知是不稳定的。安装风险自担。",
- "Please wait...." : "请稍等....",
+ "The app will be downloaded from the app store" : "该应用将从应用商店下载",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "官方应用由社区和内部开发. 其可以提供核心功能并保证生产用途.",
+ "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." : "认证应用由值得信赖的开发者开发, 并通过了一个粗略的安全检查. 其在开放的代码库中活跃地维护, 他们的维护者认为在普通用途足够稳定.",
+ "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用没有检查安全问题, 它是新的或已知不稳定的. 安装风险自担.",
+ "Enabling app …" : "正在启用应用程序...",
"Error while disabling app" : "禁用应用时出错",
"Disable" : "禁用",
- "Enable" : "开启",
+ "Enable" : "启用",
"Error while enabling app" : "启用应用时出错",
"Error: this app cannot be enabled because it makes the server unstable" : "错误: 无法启用应用因为它会导致服务器不稳定",
"Error: could not disable broken app" : "错误: 无法禁用损坏的应用",
@@ -60,31 +65,70 @@
"Updating...." : "正在更新....",
"Error while updating app" : "更新应用时出错",
"Updated" : "已更新",
- "Uninstalling ...." : "卸载中....",
+ "Uninstalling ...." : "正在卸载....",
"Error while uninstalling app" : "卸载应用时发生了一个错误",
"Uninstall" : "卸载",
- "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "该应用已启用,但是需要更新。5秒后将跳转到更新页面。",
- "App update" : "应用更新",
- "Approved" : "已认可",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "该应用已启用, 但是需要更新. 5秒后将跳转到更新页面.",
+ "App update" : "更新应用",
+ "Approved" : "已认证",
"Experimental" : "实验",
- "An error occurred. Please upload an ASCII-encoded PEM certificate." : "出现了一个错误。请上传 ASCII 编码的 PEM 证书。",
+ "No apps found for {query}" : "找不到符合 {query} 的应用",
+ "Allow filesystem access" : "允许访问文件系统",
+ "Disconnect" : "断开连接",
+ "Revoke" : "撤销",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome for Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "iOS 客户端",
+ "Android Client" : "Android 客户端",
+ "Sync client - {os}" : "同步客户端 - {os}",
+ "This session" : "当前会话",
+ "Copy" : "复制",
+ "Copied!" : "已复制!",
+ "Not supported!" : "不支持!",
+ "Press ⌘-C to copy." : "按 ⌘-C 键复制.",
+ "Press Ctrl-C to copy." : "按 Ctrl-C 复制.",
+ "Error while loading browser sessions and device tokens" : "加载浏览器会话和设备令牌时出错",
+ "Error while creating device token" : "创建设备令牌时出错",
+ "Error while deleting the token" : "删除令牌时出错",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "出现了一个错误. 请上传 ASCII 编码的 PEM 证书.",
"Valid until {date}" : "有效期至 {date}",
"Delete" : "删除",
+ "Local" : "本地",
+ "Private" : "私有",
+ "Only visible to local users" : "仅对本地用户可见",
+ "Only visible to you" : "仅您自己可见",
+ "Contacts" : "联系人",
+ "Visible to local users and to trusted servers" : "仅对本地用户和信任的服务器可见",
+ "Public" : "公开",
+ "Will be synced to a global and public address book" : "将同步到全局和公开地址簿中",
"Select a profile picture" : "选择头像",
"Very weak password" : "非常弱的密码",
"Weak password" : "弱密码",
"So-so password" : "一般强度的密码",
"Good password" : "较强的密码",
"Strong password" : "强密码",
- "Groups" : "组",
+ "Groups" : "分组",
"Unable to delete {objName}" : "无法删除 {objName}",
- "Error creating group: {message}" : "创建组时出错: {message}",
- "A valid group name must be provided" : "请提供一个有效的组名称",
+ "Error creating group: {message}" : "创建分组时出错: {message}",
+ "A valid group name must be provided" : "请提供一个有效的分组名称",
"deleted {groupName}" : "已删除 {groupName}",
"undo" : "撤销",
"never" : "从不",
"deleted {userName}" : "已删除 {userName}",
- "Changing the password will result in data loss, because data recovery is not available for this user" : "更改密码会导致数据丢失,因为数据恢复不适用于此用户",
+ "Unable to add user to group {group}" : "无法将用户添加到分组 {group}",
+ "Unable to remove user from group {group}" : "无法从分组 {group} 中移除用户",
+ "Add group" : "添加分组",
+ "Invalid quota value \"{val}\"" : "无效的配额值 \"{val}\"",
+ "no group" : "没有分组",
+ "Password successfully changed" : "密码修改成功",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "修改密码会导致数据丢失, 因为数据恢复不适用于此用户",
+ "Could not change the users email" : "无法修改用户电子邮箱地址",
"A valid username must be provided" : "必须提供合法的用户名",
"Error creating user: {message}" : "创建用户出错: {message}",
"A valid password must be provided" : "必须提供合法的密码",
@@ -92,14 +136,18 @@
"__language_name__" : "简体中文",
"Unlimited" : "无限",
"Personal info" : "个人信息",
- "Sync clients" : "客户端",
+ "Sessions" : "会话",
+ "App passwords" : "应用密码",
+ "Sync clients" : "同步客户端",
"None" : "无",
"Login" : "登录",
- "Plain" : "Plain",
+ "Plain" : "明文",
"NT LAN Manager" : "NT LAN 管理器",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
"Email server" : "电子邮件服务器",
"Open documentation" : "打开文档",
- "This is used for sending out notifications." : "这被用于发送通知。",
+ "This is used for sending out notifications." : "这被用于发送通知.",
"Send mode" : "发送模式",
"Encryption" : "加密",
"From address" : "来自地址",
@@ -116,39 +164,47 @@
"Send email" : "发送邮件",
"Server-side encryption" : "服务器端加密",
"Enable server-side encryption" : "启用服务器端加密",
- "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前,请仔细阅读:",
- "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密被启用,之后上传到服务器的所有文件都将服务器上加密。只有当启用状态的加密模块支持解密并且所有的先决条件(例如,设定恢复键)得到满足时才能解除加密。",
- "Be aware that encryption always increases the file size." : "请注意,加密会增加文件大小。",
- "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." : "定期备份数据有利于保证数据完整,并且确保备份您的加密数据和加密密钥。",
- "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告:你真的想启用加密?",
+ "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前, 请仔细阅读:",
+ "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密被启用, 之后上传到服务器的所有文件都将服务器上加密. 只有当启用状态的加密模块支持解密并且所有前提都满足时 (例如: 设定恢复密钥) 才能解除加密.",
+ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "单独的加密不能保证系统的安全性. 请参考加密应用工作原理和支持的用例的文档获取更多信息",
+ "Be aware that encryption always increases the file size." : "请注意, 加密会增加文件大小.",
+ "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." : "定期备份数据有助于保证数据完整, 并且确保备份您的加密数据和加密密钥.",
+ "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告: 你确定要启用加密?",
"Enable encryption" : "启用加密",
- "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块,请在 APP 应用菜单中启用加密模块。",
- "Select default encryption module:" : "选择默认的加密模块:",
- "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'" : "你需要升级你的加密密钥 (旧版 ownCloud <= 8.0) 。 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'",
- "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要将加密密钥从旧版(ownCloud<=8.0)迁移到新版。",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块, 请在 APP 应用菜单中启用加密模块.",
+ "Select default encryption module:" : "选择默认的加密模块:",
+ "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'" : "您需要从旧版本 (ownCloud <= 8.0) 迁移您的加密密钥. 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要从旧版本 (ownCloud<=8.0) 迁移您的加密密钥.",
"Start migration" : "开始迁移",
"Security & setup warnings" : "安全及设置警告",
- "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 似乎没有设置好查询的系统环境变量。 用 getenv(\\\"PATH\\\") 测试只返回一个空值。",
- "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." : "只读配置已启用。这样可防止通过 WEB 接口设置一些配置。此外,每次更新后该文件需要手动设置为可写。",
- "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除行内 <doc> 块,这将导致数个核心应用无法访问。",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "这可能是由缓存/加速器造成的,例如 Zend OPcache 或 eAccelerator。",
- "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP模块'文件信息'丢失. 我们强烈建议启用此模块以便mime类型检测取得最佳结果.",
- "System locale can not be set to a one which supports UTF-8." : "系统语系无法设置为支持 UTF-8 的语系。",
- "This means that there might be problems with certain characters in file names." : "这意味着一些文件名中的特定字符可能有问题。",
- "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议安装在系统上所需的软件包支持以下区域设置之一: %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\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")",
- "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:",
- "All checks passed." : "所有检查已通过。",
+ "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 的设置似乎有问题, 无法获取系统环境变量. 使用 getenv(\\\"PATH\\\") 测试时仅返回空结果.",
+ "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." : "请检查 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">安装文档 ↗</a> 中关于 PHP 配置的说明并在您的服务器中进行配置, 尤其是使用 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." : "已启用只读配置. 这将阻止在 Web 界面中进行设置. 此外, 每次更新后该文件需要手动设置为可写入.",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除内联块, 这将导致多个核心应用无法访问.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "这可能是由缓存/加速器造成的, 例如 Zend OPcache 或 eAccelerator.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "您的数据库不能在 \"READ COMMITTED\" 事务隔离级别运行. 这样可能导致在多个并行操作时出现问题.",
+ "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "已安装 %1$s 的低版本 %2$s. 出于稳定性和性能的原因, 我们建议您升级到更新的 %1$s 版本.",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 模块 'fileinfo' 缺失. 我们强烈建议启用此模块以便在 MIME 类型检测时获得最准确的结果.",
+ "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." : "事务文件锁被禁用, 这可能导致竞争条件的问题. 在 config.php 中启用 'filelocking.enabled' 选项来避免这些问题. 请参考 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">文档↗</a> 获取更多信息.",
+ "System locale can not be set to a one which supports UTF-8." : "系统区域无法设置为支持 UTF-8 的区域.",
+ "This means that there might be problems with certain characters in file names." : "这意味着当文件名中包含特定字符时可能出现问题.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议在您的系统中安装需要的包以支持下列区域: %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\")" : "如果您不是安装在域名的根目录, 并且使用系统 cron 服务时, 可能导致 URL 生成问题. 为了避免这些问题, 请在您的 config.php 文件中设置 \"overwrite.cli.url\" 选项为您的安装根目录路径 (建议: \"%s\")",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下列的技术错误, 无法通过 CLI 执行计划任务:",
+ "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>." : "请再次检查 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">安装指南 ↗</a>, 并检查 <a href=\"%s\">日志</a> 中的任何错误或警告.",
+ "All checks passed." : "所有检查已通过.",
"Cron" : "计划任务",
- "Last cron job execution: %s." : "上次定时任务执行于: %s.",
- "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 似乎有些问题。",
- "Cron was not executed yet!" : "定时任务还未被执行!",
+ "Last cron job execution: %s." : "上次定时任务执行于: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 但存在一些问题.",
+ "Cron was not executed yet!" : "定时任务还未被执行!",
"Execute one task with each page loaded" : "每个页面加载后执行一个任务",
- "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 已注册于一个 webcron 服务来通过 http 每 15 分钟执行 cron.php。",
- "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 CRON 服务每 15 分钟执行一次 cron.php 文件。",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 注册到 webcron 服务上, 通过 http 每 15 分钟执行 cron.php.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 cron 服务每 15 分钟执行一次 cron.php 文件.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "cron.php 需要被系统用户 \"%s\" 执行.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "为了运行该功能, 您需要 PHP posix 扩展. 请参考 {linkstart}PHP 文档{linkend} 获取更多信息.",
"Version" : "版本",
"Sharing" : "共享",
- "Allow apps to use the Share API" : "允许应用软件使用共享API",
+ "Allow apps to use the Share API" : "允许应用使用共享 API",
"Allow users to share via link" : "允许用户通过链接分享文件",
"Allow public uploads" : "允许公开上传",
"Enforce password protection" : "强制密码保护",
@@ -156,93 +212,143 @@
"Expire after " : "过期于",
"days" : "天",
"Enforce expiration date" : "强制过期日期",
- "Allow resharing" : "允许再次共享",
+ "Allow resharing" : "允许二次共享",
"Allow sharing with groups" : "允许群组共享",
"Restrict users to only share with users in their groups" : "限制仅与组内用户分享",
"Exclude groups from sharing" : "在分享中排除组",
- "These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享,但无法向他人分享。",
- "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "允许在共享对话框中的自动补全用户名。如果被禁用,需要输入用户全名。",
- "Tips & tricks" : "技巧提示",
- "How to do backups" : "如何做备份",
+ "These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享, 但无法向他人分享.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "允许在共享对话框中自动补全用户名. 如果被禁用, 需要输入完整的用户名.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "在公开链接上传页中显示免责声明. (仅当文件列表隐藏时显示)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "这些内容将在公开链接上传页中当文件列表隐藏时显示.",
+ "Tips & tricks" : "小提示",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite 当前被用作数据库. 对于较大数据量的安装和使用, 我们建议您切换到不同的数据库后端.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "当时用桌面客户端同步文件时特别推荐.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "合并其他数据库可以使用命令行工具: 'occ db:convert-type', 或查看 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">文档 ↗</a>.",
+ "How to do backups" : "如何备份",
"Advanced monitoring" : "高级监控",
"Performance tuning" : "性能优化",
- "Improving the config.php" : "正在优化 config.php",
+ "Improving the config.php" : "优化 config.php",
"Theming" : "主题",
"Hardening and security guidance" : "强化和安全指南",
"Developer documentation" : "开发者文档",
+ "by %s" : "由 %s",
"%s-licensed" : "%s-许可协议",
- "Documentation:" : "文档:",
+ "Documentation:" : "文档:",
"User documentation" : "用户文档",
"Admin documentation" : "管理员文档",
+ "Visit website" : "访问网站",
+ "Report a bug" : "报告问题",
"Show description …" : "显示描述...",
"Hide description …" : "隐藏描述...",
- "This app has an update available." : "此应用有可用的更新。",
- "This app cannot be installed because the following dependencies are not fulfilled:" : "此应用程序无法安装,因为以下依赖性不满足:",
- "Enable only for specific groups" : "仅对特定的组开放",
- "Uninstall App" : "卸载应用",
+ "This app has an update available." : "此应用有可用的更新.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "该应用没有指定支持的 Nextcloud 最低版本. 可能会在将来出现问题.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "该应用没有指定支持的 Nextcloud 最高版本. 可能会在将来出现问题.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "无法安装应用, 因为无法满足下列依赖: ",
+ "Enable only for specific groups" : "仅特定组启用",
+ "Uninstall app" : "卸载应用",
"SSL Root Certificates" : "SSL 根证书",
"Common Name" : "通用名称",
"Valid until" : "有效期至",
"Issued By" : "授权由",
"Valid until %s" : "有效期至 %s",
"Import root certificate" : "导入根证书",
- "Cheers!" : "干杯!",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "您好,<br><br>您刚刚创建了 %s 账户<br><br>您的用户名: <strong>%s</strong><br>现在访问: <strong><a href=\"%s\">%s</a></strong><br><br>",
+ "Cheers!" : "干杯!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "您好,\n\n您刚刚创建了 %s 账户.\n\n您的用户名: %s\n现在访问: %s\n",
"Administrator documentation" : "管理员文档",
"Online documentation" : "在线文档",
"Forum" : "论坛",
+ "Getting help" : "获取帮助",
"Commercial support" : "商业支持",
- "Profile picture" : "联系人图片",
- "Upload new" : "上传新的",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> of <strong>%s</strong>",
+ "Profile picture" : "账户头像",
+ "Upload new" : "上传",
"Select from Files" : "选择文件",
- "Remove image" : "移除图片",
- "png or jpg, max. 20 MB" : "png或jpg格式最大不超过20MB大小",
+ "Remove image" : "删除图片",
+ "png or jpg, max. 20 MB" : "png 或 jpg 格式, 不超过 20MB",
"Picture provided by original account" : "原始账户图片",
"Cancel" : "取消",
- "Choose as profile picture" : "选择图片",
+ "Choose as profile picture" : "选择个人头像",
"Full name" : "全名",
"No display name set" : "不显示名称设置",
"Email" : "电子邮件",
"Your email address" : "您的电子邮件",
"No email address set" : "尚未设置 Email 地址",
- "For password recovery and notifications" : "用户恢复密码通知",
- "You are member of the following groups:" : "您是以下组的成员:",
+ "For password recovery and notifications" : "用于密码恢复和通知",
+ "Phone number" : "电话号码",
+ "Your phone number" : "您的电话号码",
+ "Address" : "地址",
+ "Your postal address" : "您的邮寄地址",
+ "Website" : "网站",
+ "Your website" : "您的网站",
+ "Twitter" : "Twitter",
+ "Your Twitter handle" : "您的 Twitter 账号",
+ "You are member of the following groups:" : "您是以下组的成员:",
"Password" : "密码",
"Current password" : "当前密码",
"New password" : "新密码",
"Change password" : "修改密码",
"Language" : "语言",
"Help translate" : "帮助翻译",
- "Get the apps to sync your files" : "安装应用进行文件同步",
+ "Get the apps to sync your files" : "下载应用同步您的文件",
"Desktop client" : "桌面客户端",
"Android app" : "Android 应用",
"iOS app" : "iOS 应用",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "如果您想支持这个项目 {contributeopen}一起开发{linkclose} 或 {contributeopen}帮助传播{linkclose}!",
"Show First Run Wizard again" : "再次显示首次运行向导",
+ "Web, desktop and mobile clients currently logged in to your account." : "您账号当前登录的 Web 页面, 桌面和客户端客户端.",
+ "Device" : "设备",
+ "Last activity" : "最后活跃",
+ "Passcodes that give an app or device permissions to access your account." : "Passcodes 可以使应用或设备访问您的账号.",
"Name" : "名称",
+ "App name" : "应用名",
+ "Create new app password" : "创建新应用密码",
+ "Use the credentials below to configure your app or device." : "使用下述凭据配置您的应用或设备.",
+ "For security reasons this password will only be shown once." : "由于安全原因, 密码仅会显示一次.",
"Username" : "用户名",
+ "Done" : "完成",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "由 {communityopen}Nextcloud community{linkclose} 开发, {githubopen}源代码{linkclose} 基于 {licenseopen}AGPL{linkclose} 许可协议.",
+ "Follow us on Google Plus!" : "在 Google+ 上关注我们!",
+ "Like our facebook page!" : "点赞我们 facebook 页面!",
+ "Subscribe to our twitter channel!" : "关注我们的 twitter!",
+ "Subscribe to our news feed!" : "订阅我们 RSS 最新消息!",
+ "Subscribe to our newsletter!" : "订阅我们的最新消息!",
"Show storage location" : "显示存储位置",
"Show last log in" : "显示最后登录",
- "Show user backend" : "显示用户后端",
+ "Show user backend" : "显示用户来源",
"Send email to new user" : "发送电子邮件给新用户",
"Show email address" : "显示邮件地址",
"E-Mail" : "E-Mail",
"Create" : "创建",
"Admin Recovery Password" : "管理恢复密码",
"Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件",
+ "Group name" : "分组名",
"Everyone" : "所有人",
"Admins" : "管理员",
- "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "请输入存储限额 (ex: \"512 MB\" or \"12 GB\")",
+ "Default quota" : "默认配额",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "请输入存储配额 (例如: \"512 MB\" 或 \"12 GB\")",
"Other" : "其它",
+ "Group admin for" : "分组管理员",
"Quota" : "配额",
+ "Storage location" : "存储位置",
+ "User backend" : "用户来源",
+ "Last login" : "最后登录",
"change full name" : "更改全名",
"set new password" : "设置新密码",
"change email address" : "修改电子邮箱地址",
"Default" : "默认",
"log-level out of allowed range" : "日志级别超出允许的范围",
"Language changed" : "语言已修改",
- "Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?",
- "Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)",
- "Info, warnings, errors and fatal issues" : "信息,警告,错误和灾难性问题",
- "Warnings, errors and fatal issues" : "警告,错误和灾难性问题",
+ "Admins can't remove themself from the admin group" : "管理员不能将自己移出管理组",
+ "Unable to add user to group %s" : "无法将用户添加到分组 %s",
+ "Unable to remove user from group %s" : "无法从分组 %s 中移除用户",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "您确定将 \"{domain}\" 添加为信任的域名么?",
+ "Please wait...." : "请稍等....",
+ "iPhone" : "iPhone",
+ "add group" : "添加分组",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "全部 (灾难性问题, 错误, 警告, 信息, 调试)",
+ "Info, warnings, errors and fatal issues" : "信息, 警告, 错误和灾难性问题",
+ "Warnings, errors and fatal issues" : "警告, 错误和灾难性问题",
"Errors and fatal issues" : "错误和灾难性问题",
"Fatal issues only" : "仅灾难性问题",
"Log" : "日志",
@@ -250,21 +356,25 @@
"Download logfile" : "下载日志文件",
"More" : "更多",
"Less" : "更少",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过了 100 MB. 下载可能需要一些时间!",
"Allow users to send mail notification for shared files" : "允许用户发送共享文件的邮件通知",
"Allow users to send mail notification for shared files to other users" : "允许用户发送共享文件的邮件通知给其他用户",
- "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库。对于较大数据量的安装和使用,我们建议您切换到不同的数据库后端。",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。",
+ "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库. 对于较大数据量的安装和使用, 我们建议您切换到不同的数据库后端.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端同步文件时, 不建议使用 SQLite.",
"Experimental applications ahead" : "未来的实验应用",
- "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "实验应用程序没有在安全性的问题上作过多检查,新的或已知的不稳定 BUG 都在开发中。安装它们可能会导致数据丢失或安全漏洞。",
+ "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "实验性应用程序没有检查安全性问题, 它是新的或已知不稳定的. 安装它们可能会导致数据丢失或安全漏洞.",
+ "Uninstall App" : "卸载应用",
"Enable experimental apps" : "启用实验性应用程序",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "亲,<br><br>现在我们为你开通了 %s 私有云帐户。<br><br>你的用户名: %s<br>访问网址: <a href=\\\"%s\\\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "亲,\\n\\n 现在我们为你开通了 %s 私有去帐户。\\n\\n 你的用户名: %s\\n 访问网址: %s\\n 你的初始密码需要咨询系统管理员。或者你也可以在登录页面输入任意密码登录,\\n登录窗口将出现忘记密码链接,点击通过注册邮箱重设初始密码。\\n\\n",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "如果您想支持这个项目\n\t<a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">一起开发</a>\n\t<or></or>\n\t<a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">帮助传播</a>!",
+ "Add Group" : "添加分组",
"Group" : "分组",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "外部存储",
- "Updates" : "更新",
- "An error occurred: {message}" : "发生错误: {message}"
+ "Default Quota" : "默认配额",
+ "Full Name" : "全名",
+ "Group Admin for" : "分组管理员",
+ "Storage Location" : "存储位置",
+ "User Backend" : "用户来源",
+ "Last Login" : "最后登录"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/zh_HK.js b/settings/l10n/zh_HK.js
index afc266ce205..9fa7e6cb8a9 100644
--- a/settings/l10n/zh_HK.js
+++ b/settings/l10n/zh_HK.js
@@ -9,7 +9,6 @@ OC.L10N.register(
"Email sent" : "郵件已傳",
"Sending..." : "發送中...",
"All" : "所有",
- "Please wait...." : "請稍候....",
"Disable" : "停用",
"Enable" : "啟用",
"Updating...." : "更新中....",
@@ -49,9 +48,9 @@ OC.L10N.register(
"Everyone" : "所有人",
"Other" : "其他",
"Default" : "預設",
+ "Please wait...." : "請稍候....",
"Log" : "日誌",
"More" : "更多",
- "Group" : "群組",
- "Updates" : "更新"
+ "Group" : "群組"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/zh_HK.json b/settings/l10n/zh_HK.json
index 7cfee3ec8b2..27f4b570daa 100644
--- a/settings/l10n/zh_HK.json
+++ b/settings/l10n/zh_HK.json
@@ -7,7 +7,6 @@
"Email sent" : "郵件已傳",
"Sending..." : "發送中...",
"All" : "所有",
- "Please wait...." : "請稍候....",
"Disable" : "停用",
"Enable" : "啟用",
"Updating...." : "更新中....",
@@ -47,9 +46,9 @@
"Everyone" : "所有人",
"Other" : "其他",
"Default" : "預設",
+ "Please wait...." : "請稍候....",
"Log" : "日誌",
"More" : "更多",
- "Group" : "群組",
- "Updates" : "更新"
+ "Group" : "群組"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index 57079b74b77..942c29a2157 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -36,9 +36,6 @@ OC.L10N.register(
"Unable to change mail address" : "無法更改 email 地址",
"Email saved" : "Email 已儲存",
"Couldn't remove app." : "無法移除應用程式",
- "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
- "Unable to add user to group %s" : "無法將使用者加入群組 %s",
- "Unable to remove user from group %s" : "無法將使用者移出群組 %s",
"Couldn't update app." : "無法更新應用程式",
"Add trusted domain" : "新增信任的網域",
"Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束",
@@ -52,7 +49,6 @@ OC.L10N.register(
"The app will be downloaded from the app store" : "將會從應用程式商店下載這個應用程式",
"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." : "審查通過的應用程式經由可信任的開發人員所設計,並且經過一連串的安全測試,他們在開放的程式庫中維護這些應用程式,而且確保這些應用程式能穩定運作",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "這個新應用程式並沒有經過安全檢測,可能會是不穩定的,如果您要安裝的話,風險自行負責。",
- "Please wait...." : "請稍候…",
"Error while disabling app" : "停用應用程式錯誤",
"Disable" : "停用",
"Enable" : "啟用",
@@ -195,7 +191,6 @@ OC.L10N.register(
"This app has an update available." : "此應用程式有可用的更新",
"This app cannot be installed because the following dependencies are not fulfilled:" : "這個應用程式無法被安裝,因為欠缺下列相依套件:",
"Enable only for specific groups" : "僅對特定的群組啟用",
- "Uninstall App" : "解除安裝 App",
"Common Name" : "Common Name",
"Valid until" : "到期日",
"Issued By" : "發行者:",
@@ -255,7 +250,11 @@ OC.L10N.register(
"Default" : "預設",
"log-level out of allowed range" : "log-level 超過允許範圍",
"Language changed" : "語言已變更",
+ "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
+ "Unable to add user to group %s" : "無法將使用者加入群組 %s",
+ "Unable to remove user from group %s" : "無法將使用者移出群組 %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?",
+ "Please wait...." : "請稍候…",
"iPhone" : "iPhone",
"Everything (fatal issues, errors, warnings, info, debug)" : "全部(嚴重問題、錯誤、警告、資訊、除錯訊息)",
"Info, warnings, errors and fatal issues" : "嚴重問題、錯誤、警告、資訊",
@@ -274,14 +273,10 @@ OC.L10N.register(
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "若使用桌面版程式同步檔案,不建議使用 SQLite",
"Experimental applications ahead" : "以下是實驗性質的應用程式",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "實驗性質的應用程式並沒有經過安全檢測,可能會不穩定而且正在開發中,安裝他們可能會造成資料遺失或是安全問題",
+ "Uninstall App" : "解除安裝 App",
"Enable experimental apps" : "啟用實驗性質的應用程式",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "嗨,<br><br>通知您一聲,您現在有了 %s 的帳號。<br><br>您的帳號: %s<br>開通帳號: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "嗨,\n\n通知您一聲,您現在有了 %s 的帳號。\n\n您的帳號:%s\n開通帳號:%s\n\n",
- "Group" : "群組",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "外部儲存",
- "Updates" : "更新",
- "An error occurred: {message}" : "發生錯誤:{message}"
+ "Group" : "群組"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index 58d471b4b93..21af65d762b 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -34,9 +34,6 @@
"Unable to change mail address" : "無法更改 email 地址",
"Email saved" : "Email 已儲存",
"Couldn't remove app." : "無法移除應用程式",
- "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
- "Unable to add user to group %s" : "無法將使用者加入群組 %s",
- "Unable to remove user from group %s" : "無法將使用者移出群組 %s",
"Couldn't update app." : "無法更新應用程式",
"Add trusted domain" : "新增信任的網域",
"Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束",
@@ -50,7 +47,6 @@
"The app will be downloaded from the app store" : "將會從應用程式商店下載這個應用程式",
"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." : "審查通過的應用程式經由可信任的開發人員所設計,並且經過一連串的安全測試,他們在開放的程式庫中維護這些應用程式,而且確保這些應用程式能穩定運作",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "這個新應用程式並沒有經過安全檢測,可能會是不穩定的,如果您要安裝的話,風險自行負責。",
- "Please wait...." : "請稍候…",
"Error while disabling app" : "停用應用程式錯誤",
"Disable" : "停用",
"Enable" : "啟用",
@@ -193,7 +189,6 @@
"This app has an update available." : "此應用程式有可用的更新",
"This app cannot be installed because the following dependencies are not fulfilled:" : "這個應用程式無法被安裝,因為欠缺下列相依套件:",
"Enable only for specific groups" : "僅對特定的群組啟用",
- "Uninstall App" : "解除安裝 App",
"Common Name" : "Common Name",
"Valid until" : "到期日",
"Issued By" : "發行者:",
@@ -253,7 +248,11 @@
"Default" : "預設",
"log-level out of allowed range" : "log-level 超過允許範圍",
"Language changed" : "語言已變更",
+ "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除",
+ "Unable to add user to group %s" : "無法將使用者加入群組 %s",
+ "Unable to remove user from group %s" : "無法將使用者移出群組 %s",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?",
+ "Please wait...." : "請稍候…",
"iPhone" : "iPhone",
"Everything (fatal issues, errors, warnings, info, debug)" : "全部(嚴重問題、錯誤、警告、資訊、除錯訊息)",
"Info, warnings, errors and fatal issues" : "嚴重問題、錯誤、警告、資訊",
@@ -272,14 +271,10 @@
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "若使用桌面版程式同步檔案,不建議使用 SQLite",
"Experimental applications ahead" : "以下是實驗性質的應用程式",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "實驗性質的應用程式並沒有經過安全檢測,可能會不穩定而且正在開發中,安裝他們可能會造成資料遺失或是安全問題",
+ "Uninstall App" : "解除安裝 App",
"Enable experimental apps" : "啟用實驗性質的應用程式",
"Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "嗨,<br><br>通知您一聲,您現在有了 %s 的帳號。<br><br>您的帳號: %s<br>開通帳號: <a href=\"%s\">%s</a><br><br>",
"Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "嗨,\n\n通知您一聲,您現在有了 %s 的帳號。\n\n您的帳號:%s\n開通帳號:%s\n\n",
- "Group" : "群組",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "External Storage" : "外部儲存",
- "Updates" : "更新",
- "An error occurred: {message}" : "發生錯誤:{message}"
+ "Group" : "群組"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/settings/personal.php b/settings/personal.php
index 27c1a25653d..a79e9764a6b 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -88,7 +88,7 @@ foreach($languageCodes as $lang) {
if($l->getLanguageCode() === $lang && substr($potentialName, 0, 1) !== '_') {//first check if the language name is in the translation file
$ln = array('code' => $lang, 'name' => $potentialName);
} elseif ($lang === 'en') {
- $ln = ['code' => $lang, 'name' => 'English'];
+ $ln = ['code' => $lang, 'name' => 'English (US)'];
}else{//fallback to language code
$ln=array('code'=>$lang, 'name'=>$lang);
}
@@ -196,7 +196,7 @@ $tmpl->assign('groups', $groups2);
// add hardcoded forms from the template
$formsAndMore = [];
-$formsAndMore[]= ['anchor' => 'avatar', 'section-name' => $l->t('Personal info')];
+$formsAndMore[]= ['anchor' => 'personal-settings', 'section-name' => $l->t('Personal info')];
$formsAndMore[]= ['anchor' => 'sessions', 'section-name' => $l->t('Sessions')];
$formsAndMore[]= ['anchor' => 'apppasswords', 'section-name' => $l->t('App passwords')];
$formsAndMore[]= ['anchor' => 'clientsbox', 'section-name' => $l->t('Sync clients')];
diff --git a/settings/templates/admin/frame.php b/settings/templates/admin/frame.php
index 761d76c4434..2b234f4cd9b 100644
--- a/settings/templates/admin/frame.php
+++ b/settings/templates/admin/frame.php
@@ -30,14 +30,28 @@ script('files', 'jquery.fileupload');
<div id="app-navigation">
<ul>
- <?php foreach($_['forms'] as $form) {
+ <?php
+ foreach($_['forms'] as $form) {
if (isset($form['anchor'])) {
$anchor = \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => $form['anchor']]);
+ $class = 'nav-icon-' . $form['anchor'];
$sectionName = $form['section-name'];
$active = $form['active'] ? ' class="active"' : '';
- print_unescaped(sprintf("<li%s><a href='%s'>%s</a></li>", $active, \OCP\Util::sanitizeHTML($anchor), \OCP\Util::sanitizeHTML($sectionName)));
+ ?>
+ <li <?php print_unescaped($form['active'] ? ' class="active"' : ''); ?>>
+ <a href="<?php p($anchor); ?>">
+ <?php if (!empty($form['icon'])) { ?>
+ <img alt="" src="<?php print_unescaped($form['icon']); ?>">
+ <span><?php p($form['section-name']); ?></span>
+ <?php } else { ?>
+ <span class="no-icon"><?php p($form['section-name']); ?></span>
+ <?php } ?>
+ </a>
+ </li>
+ <?php
}
- }?>
+ }
+ ?>
</ul>
</div>
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index a5a98ea506f..80689237e60 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -3,7 +3,9 @@ style('settings', 'settings');
vendor_script(
'core',
[
- 'handlebars/handlebars'
+ 'handlebars/handlebars',
+ 'marked/marked.min',
+ 'DOMPurify/dist/purify.min',
]
);
script(
@@ -24,7 +26,7 @@ script(
<?php if($_['appstoreEnabled']): ?>
<li>
- <a class="app-external" target="_blank" rel="noreferrer" href="https://docs.nextcloud.org/server/11/developer_manual/"><?php p($l->t('Developer documentation'));?> ↗</a>
+ <a class="app-external" target="_blank" rel="noreferrer" href="https://docs.nextcloud.org/server/12/developer_manual/"><?php p($l->t('Developer documentation'));?> ↗</a>
</li>
<?php endif; ?>
</script>
@@ -59,7 +61,7 @@ script(
<div class="app-detailpage"></div>
<div class="app-description-container hidden">
- <div class="app-description"><pre>{{description}}</pre></div>
+ <div class="app-description">{{{description}}}</div>
<!--<div class="app-changed">{{changed}}</div>-->
{{#if documentation}}
<p class="documentation">
@@ -134,7 +136,7 @@ script(
<input class="enable{{#if needsDownload}} needs-download{{/if}}" type="submit" data-appid="{{id}}" data-active="false" {{#unless canInstall}}disabled="disabled"{{/unless}} value="<?php p($l->t("Enable"));?>"/>
{{/if}}
{{#if canUnInstall}}
- <input class="uninstall" type="submit" value="<?php p($l->t('Uninstall App')); ?>" data-appid="{{id}}" />
+ <input class="uninstall" type="submit" value="<?php p($l->t('Uninstall app')); ?>" data-appid="{{id}}" />
{{/if}}
<div class="warning hidden"></div>
@@ -148,7 +150,7 @@ script(
</ul>
</div>
<div id="app-content">
- <svg height="0">
+ <svg class="app-filter">
<defs><filter id="invertIcon"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter></defs>
</svg>
<div id="apps-list" class="icon-loading"></div>
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index a14982b9b74..65ce3751b98 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -9,12 +9,14 @@
?>
<div id="app-navigation">
- <ul>
+ <ul class="with-icon">
<?php foreach($_['forms'] as $form) {
if (isset($form['anchor'])) {
$anchor = '#' . $form['anchor'];
+ $class = 'nav-icon-' . $form['anchor'];
$sectionName = $form['section-name'];
- print_unescaped(sprintf("<li><a href='%s'>%s</a></li>", \OCP\Util::sanitizeHTML($anchor), \OCP\Util::sanitizeHTML($sectionName)));
+ print_unescaped(sprintf("<li><a href='%s' class='%s'>%s</a></li>", \OCP\Util::sanitizeHTML($anchor),
+ \OCP\Util::sanitizeHTML($class), \OCP\Util::sanitizeHTML($sectionName)));
}
}?>
</ul>
@@ -184,12 +186,14 @@ if($_['passwordChangeSupported']) {
<input type="password" id="pass1" name="oldpassword"
placeholder="<?php p($l->t('Current password'));?>"
autocomplete="off" autocapitalize="off" autocorrect="off" />
- <label for="pass2" class="hidden-visually"><?php p($l->t('New password'));?>: </label>
- <input type="password" id="pass2" name="newpassword"
- placeholder="<?php p($l->t('New password')); ?>"
- data-typetoggle="#personal-show"
- autocomplete="off" autocapitalize="off" autocorrect="off" />
- <input type="checkbox" id="personal-show" name="show" /><label for="personal-show" class="personal-show-label"></label>
+ <div class="personal-show-container">
+ <label for="pass2" class="hidden-visually"><?php p($l->t('New password'));?>: </label>
+ <input type="password" id="pass2" name="newpassword"
+ placeholder="<?php p($l->t('New password')); ?>"
+ data-typetoggle="#personal-show"
+ autocomplete="off" autocapitalize="off" autocorrect="off" />
+ <input type="checkbox" id="personal-show" name="show" /><label for="personal-show" class="personal-show-label"></label>
+ </div>
<input id="passwordbutton" type="submit" value="<?php p($l->t('Change password')); ?>" />
<br/>
</form>
diff --git a/settings/tests/js/appsSpec.js b/settings/tests/js/appsSpec.js
index aa785a6768e..4b917b425c1 100644
--- a/settings/tests/js/appsSpec.js
+++ b/settings/tests/js/appsSpec.js
@@ -185,23 +185,27 @@ describe('OC.Settings.Apps tests', function() {
{
id: 'foo',
name: 'Foo app',
+ description: 'Hello',
level: 0,
author: 'foo'
},
{
id: 'alpha',
name: 'Alpha app',
+ description: 'Hello',
level: 300,
author: ['alpha', 'beta']
},
{
id: 'nolevel',
name: 'No level',
+ description: 'Hello',
author: 'bar'
},
{
id: 'zork',
name: 'Some famous adventure game',
+ description: 'Hello',
level: 200,
author: 'baz'
@@ -209,6 +213,7 @@ describe('OC.Settings.Apps tests', function() {
{
id: 'delta',
name: 'Mathematical symbol',
+ description: 'Hello',
level: 200,
author: 'foobar'
}
@@ -223,29 +228,34 @@ describe('OC.Settings.Apps tests', function() {
'foo': {
id: 'foo',
name: 'Foo app',
+ description: 'Hello',
level: 0,
author: 'foo'
},
'alpha': {
id: 'alpha',
name: 'Alpha app',
+ description: 'Hello',
level: 300,
author: ['alpha', 'beta']
},
'nolevel': {
id: 'nolevel',
name: 'No level',
+ description: 'Hello',
author: 'bar'
},
'zork': {
id: 'zork',
name: 'Some famous adventure game',
+ description: 'Hello',
level: 200,
author: 'baz',
},
'delta': {
id: 'delta',
name: 'Mathematical symbol',
+ description: 'Hello',
level: 200,
author: 'foobar'
}
diff --git a/tests/Core/Command/Config/ListConfigsTest.php b/tests/Core/Command/Config/ListConfigsTest.php
index 0f170cee840..861c1f59d5e 100644
--- a/tests/Core/Command/Config/ListConfigsTest.php
+++ b/tests/Core/Command/Config/ListConfigsTest.php
@@ -285,10 +285,16 @@ class ListConfigsTest extends TestCase {
$this->systemConfig->expects($this->any())
->method('getValue')
->willReturnMap($systemConfigMap);
+ $this->appConfig->expects($this->any())
+ ->method('getValues')
+ ->willReturnMap($appConfig);
} else {
$this->systemConfig->expects($this->any())
->method('getFilteredValue')
->willReturnMap($systemConfigMap);
+ $this->appConfig->expects($this->any())
+ ->method('getFilteredValues')
+ ->willReturnMap($appConfig);
}
$this->appConfig->expects($this->any())
diff --git a/tests/Core/Command/Group/AddUserTest.php b/tests/Core/Command/Group/AddUserTest.php
new file mode 100644
index 00000000000..af860e244d6
--- /dev/null
+++ b/tests/Core/Command/Group/AddUserTest.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Core\Command\Group;
+
+use OC\Core\Command\Group\AddUser;
+use OCP\IGroup;
+use OCP\IGroupManager;
+use OCP\IUser;
+use OCP\IUserManager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Test\TestCase;
+
+class AddUserTest extends TestCase {
+
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $groupManager;
+
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+
+ /** @var AddUser */
+ private $command;
+
+ /** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ private $input;
+
+ /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ private $output;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->groupManager = $this->createMock(IGroupManager::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->command = new AddUser($this->userManager, $this->groupManager);
+
+ $this->input = $this->createMock(InputInterface::class);
+ $this->input->method('getArgument')
+ ->willReturnCallback(function($arg) {
+ if ($arg === 'group') {
+ return 'myGroup';
+ } else if ($arg === 'user') {
+ return 'myUser';
+ }
+ throw new \Exception();
+ });
+ $this->output = $this->createMock(OutputInterface::class);
+ }
+
+ public function testNoGroup() {
+ $this->groupManager->method('get')
+ ->with('myGroup')
+ ->willReturn(null);
+
+ $this->output->expects($this->once())
+ ->method('writeln')
+ ->with('<error>group not found</error>');
+
+ $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
+ }
+
+ public function testNoUser() {
+ $group = $this->createMock(IGroup::class);
+ $this->groupManager->method('get')
+ ->with('myGroup')
+ ->willReturn($group);
+
+ $this->userManager->method('get')
+ ->with('myUser')
+ ->willReturn(null);
+
+ $this->output->expects($this->once())
+ ->method('writeln')
+ ->with('<error>user not found</error>');
+
+ $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
+ }
+
+ public function testAdd() {
+ $group = $this->createMock(IGroup::class);
+ $this->groupManager->method('get')
+ ->with('myGroup')
+ ->willReturn($group);
+
+ $user = $this->createMock(IUser::class);
+ $this->userManager->method('get')
+ ->with('myUser')
+ ->willReturn($user);
+
+ $group->expects($this->once())
+ ->method('addUser')
+ ->with($user);
+
+ $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
+ }
+
+
+}
diff --git a/tests/Core/Command/Group/ListCommandTest.php b/tests/Core/Command/Group/ListCommandTest.php
new file mode 100644
index 00000000000..ac872e74ac8
--- /dev/null
+++ b/tests/Core/Command/Group/ListCommandTest.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Core\Command\Group;
+
+use OC\Core\Command\Group\ListCommand;
+use OCP\IGroup;
+use OCP\IGroupManager;
+use OCP\IUser;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Test\TestCase;
+
+class ListCommandTest extends TestCase {
+
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $groupManager;
+
+ /** @var ListCommand|\PHPUnit_Framework_MockObject_MockObject */
+ private $command;
+
+ /** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ private $input;
+
+ /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ private $output;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->groupManager = $this->createMock(IGroupManager::class);
+ $this->command = $this->getMockBuilder(ListCommand::class)
+ ->setConstructorArgs([$this->groupManager])
+ ->setMethods(['writeArrayInOutputFormat'])
+ ->getMock();
+
+ $this->input = $this->createMock(InputInterface::class);
+ $this->input->method('getOption')
+ ->willReturnCallback(function($arg) {
+ if ($arg === 'limit') {
+ return '100';
+ } else if ($arg === 'offset') {
+ return '42';
+ }
+ throw new \Exception();
+ });
+
+
+ $this->output = $this->createMock(OutputInterface::class);
+ }
+
+ public function testExecute() {
+ $group1 = $this->createMock(IGroup::class);
+ $group1->method('getGID')->willReturn('group1');
+ $group2 = $this->createMock(IGroup::class);
+ $group2->method('getGID')->willReturn('group2');
+ $group3 = $this->createMock(IGroup::class);
+ $group3->method('getGID')->willReturn('group3');
+
+ $user = $this->createMock(IUser::class);
+
+ $this->groupManager->method('search')
+ ->with(
+ '',
+ 100,
+ 42
+ )->willReturn([$group1, $group2, $group3]);
+
+ $group1->method('getUsers')
+ ->willReturn([
+ 'user1' => $user,
+ 'user2' => $user,
+ ]);
+
+ $group2->method('getUsers')
+ ->willReturn([
+ ]);
+
+ $group3->method('getUsers')
+ ->willReturn([
+ 'user1' => $user,
+ 'user3' => $user,
+ ]);
+
+ $this->command->expects($this->once())
+ ->method('writeArrayInOutputFormat')
+ ->with(
+ $this->equalTo($this->input),
+ $this->equalTo($this->output),
+ [
+ 'group1' => [
+ 'user1',
+ 'user2',
+ ],
+ 'group2' => [
+ ],
+ 'group3' => [
+ 'user1',
+ 'user3',
+ ]
+ ]
+ );
+
+ $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
+ }
+
+
+}
diff --git a/tests/Core/Command/Group/RemoveUserTest.php b/tests/Core/Command/Group/RemoveUserTest.php
new file mode 100644
index 00000000000..ec7b0f2d714
--- /dev/null
+++ b/tests/Core/Command/Group/RemoveUserTest.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Core\Command\Group;
+
+use OC\Core\Command\Group\RemoveUser;
+use OCP\IGroup;
+use OCP\IGroupManager;
+use OCP\IUser;
+use OCP\IUserManager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Test\TestCase;
+
+class RemoveUserTest extends TestCase {
+
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $groupManager;
+
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+
+ /** @var RemoveUser */
+ private $command;
+
+ /** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ private $input;
+
+ /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ private $output;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->groupManager = $this->createMock(IGroupManager::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->command = new RemoveUser($this->userManager, $this->groupManager);
+
+ $this->input = $this->createMock(InputInterface::class);
+ $this->input->method('getArgument')
+ ->willReturnCallback(function($arg) {
+ if ($arg === 'group') {
+ return 'myGroup';
+ } else if ($arg === 'user') {
+ return 'myUser';
+ }
+ throw new \Exception();
+ });
+ $this->output = $this->createMock(OutputInterface::class);
+ }
+
+ public function testNoGroup() {
+ $this->groupManager->method('get')
+ ->with('myGroup')
+ ->willReturn(null);
+
+ $this->output->expects($this->once())
+ ->method('writeln')
+ ->with('<error>group not found</error>');
+
+ $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
+ }
+
+ public function testNoUser() {
+ $group = $this->createMock(IGroup::class);
+ $this->groupManager->method('get')
+ ->with('myGroup')
+ ->willReturn($group);
+
+ $this->userManager->method('get')
+ ->with('myUser')
+ ->willReturn(null);
+
+ $this->output->expects($this->once())
+ ->method('writeln')
+ ->with('<error>user not found</error>');
+
+ $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
+ }
+
+ public function testAdd() {
+ $group = $this->createMock(IGroup::class);
+ $this->groupManager->method('get')
+ ->with('myGroup')
+ ->willReturn($group);
+
+ $user = $this->createMock(IUser::class);
+ $this->userManager->method('get')
+ ->with('myUser')
+ ->willReturn($user);
+
+ $group->expects($this->once())
+ ->method('removeUser')
+ ->with($user);
+
+ $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
+ }
+
+
+}
diff --git a/tests/Core/Command/TwoFactorAuth/DisableTest.php b/tests/Core/Command/TwoFactorAuth/DisableTest.php
new file mode 100644
index 00000000000..1a0bbc6c3d3
--- /dev/null
+++ b/tests/Core/Command/TwoFactorAuth/DisableTest.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Core\Command\TwoFactorAuth;
+
+use OC\Authentication\TwoFactorAuth\Manager;
+use OC\Core\Command\TwoFactorAuth\Disable;
+use OCP\IUser;
+use OCP\IUserManager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Test\TestCase;
+
+class DisableTest extends TestCase {
+
+ /** @var Manager|\PHPUnit_Framework_MockObject_MockObject */
+ private $manager;
+
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+
+ /** @var Disable */
+ private $command;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->manager = $this->createMock(Manager::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+
+ $this->command = new Disable($this->manager, $this->userManager);
+ }
+
+ public function testDisableSuccess() {
+ $user = $this->createMock(IUser::class);
+
+ $input = $this->createMock(InputInterface::class);
+ $output = $this->createMock(OutputInterface::class);
+
+ $input->method('getArgument')
+ ->with($this->equalTo('uid'))
+ ->willReturn('user');
+
+ $this->userManager->method('get')
+ ->with('user')
+ ->willReturn($user);
+
+ $this->manager->expects($this->once())
+ ->method('disableTwoFactorAuthentication')
+ ->with($this->equalTo($user));
+
+ $output->expects($this->once())
+ ->method('writeln')
+ ->with('Two-factor authentication disabled for user user');
+
+ $this->invokePrivate($this->command, 'execute', [$input, $output]);
+ }
+
+ public function testEnableFail() {
+ $input = $this->createMock(InputInterface::class);
+ $output = $this->createMock(OutputInterface::class);
+
+ $input->method('getArgument')
+ ->with($this->equalTo('uid'))
+ ->willReturn('user');
+
+ $this->userManager->method('get')
+ ->with('user')
+ ->willReturn(null);
+
+ $this->manager->expects($this->never())
+ ->method($this->anything());
+
+ $output->expects($this->once())
+ ->method('writeln')
+ ->with('<error>Invalid UID</error>');
+
+ $this->invokePrivate($this->command, 'execute', [$input, $output]);
+ }
+}
diff --git a/tests/Core/Command/TwoFactorAuth/EnableTest.php b/tests/Core/Command/TwoFactorAuth/EnableTest.php
new file mode 100644
index 00000000000..ebca40df9a5
--- /dev/null
+++ b/tests/Core/Command/TwoFactorAuth/EnableTest.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Core\Command\TwoFactorAuth;
+
+use OC\Authentication\TwoFactorAuth\Manager;
+use OC\Core\Command\TwoFactorAuth\Enable;
+use OCP\IUser;
+use OCP\IUserManager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Test\TestCase;
+
+class EnableTest extends TestCase {
+
+ /** @var Manager|\PHPUnit_Framework_MockObject_MockObject */
+ private $manager;
+
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+
+ /** @var Enable */
+ private $command;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->manager = $this->createMock(Manager::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+
+ $this->command = new Enable($this->manager, $this->userManager);
+ }
+
+ public function testEnableSuccess() {
+ $user = $this->createMock(IUser::class);
+
+ $input = $this->createMock(InputInterface::class);
+ $output = $this->createMock(OutputInterface::class);
+
+ $input->method('getArgument')
+ ->with($this->equalTo('uid'))
+ ->willReturn('user');
+
+ $this->userManager->method('get')
+ ->with('user')
+ ->willReturn($user);
+
+ $this->manager->expects($this->once())
+ ->method('enableTwoFactorAuthentication')
+ ->with($this->equalTo($user));
+
+ $output->expects($this->once())
+ ->method('writeln')
+ ->with('Two-factor authentication enabled for user user');
+
+ $this->invokePrivate($this->command, 'execute', [$input, $output]);
+ }
+
+ public function testEnableFail() {
+ $input = $this->createMock(InputInterface::class);
+ $output = $this->createMock(OutputInterface::class);
+
+ $input->method('getArgument')
+ ->with($this->equalTo('uid'))
+ ->willReturn('user');
+
+ $this->userManager->method('get')
+ ->with('user')
+ ->willReturn(null);
+
+ $this->manager->expects($this->never())
+ ->method($this->anything());
+
+ $output->expects($this->once())
+ ->method('writeln')
+ ->with('<error>Invalid UID</error>');
+
+ $this->invokePrivate($this->command, 'execute', [$input, $output]);
+ }
+}
diff --git a/tests/Core/Command/User/DisableTest.php b/tests/Core/Command/User/DisableTest.php
new file mode 100644
index 00000000000..758020acc71
--- /dev/null
+++ b/tests/Core/Command/User/DisableTest.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 Tests\Core\Command\User;
+
+
+use OC\Core\Command\User\Disable;
+use OCP\IUser;
+use OCP\IUserManager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Test\TestCase;
+
+class DisableTest extends TestCase {
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $userManager;
+ /** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ protected $consoleInput;
+ /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ protected $consoleOutput;
+
+ /** @var Disable */
+ protected $command;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->consoleInput = $this->createMock(InputInterface::class);
+ $this->consoleOutput = $this->createMock(OutputInterface::class);
+
+ $this->command = new Disable($this->userManager);
+ }
+
+ public function testValidUser() {
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->once())
+ ->method('setEnabled')
+ ->with(false);
+
+ $this->userManager
+ ->method('get')
+ ->with('user')
+ ->willReturn($user);
+
+ $this->consoleInput
+ ->method('getArgument')
+ ->with('uid')
+ ->willReturn('user');
+
+ $this->consoleOutput->expects($this->once())
+ ->method('writeln')
+ ->with($this->stringContains('The specified user is disabled'));
+
+ self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
+ }
+
+ public function testInvalidUser() {
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('user')
+ ->willReturn(null);
+
+ $this->consoleInput
+ ->method('getArgument')
+ ->with('uid')
+ ->willReturn('user');
+
+ $this->consoleOutput->expects($this->once())
+ ->method('writeln')
+ ->with($this->stringContains('User does not exist'));
+
+ self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
+ }
+}
diff --git a/tests/Core/Command/User/EnableTest.php b/tests/Core/Command/User/EnableTest.php
new file mode 100644
index 00000000000..60b415ae79d
--- /dev/null
+++ b/tests/Core/Command/User/EnableTest.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 Tests\Core\Command\User;
+
+
+use OC\Core\Command\User\Enable;
+use OCP\IUser;
+use OCP\IUserManager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Test\TestCase;
+
+class EnableTest extends TestCase {
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $userManager;
+ /** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ protected $consoleInput;
+ /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */
+ protected $consoleOutput;
+
+ /** @var Disable */
+ protected $command;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->consoleInput = $this->createMock(InputInterface::class);
+ $this->consoleOutput = $this->createMock(OutputInterface::class);
+
+ $this->command = new Enable($this->userManager);
+ }
+
+ public function testValidUser() {
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->once())
+ ->method('setEnabled')
+ ->with(true);
+
+ $this->userManager
+ ->method('get')
+ ->with('user')
+ ->willReturn($user);
+
+ $this->consoleInput
+ ->method('getArgument')
+ ->with('uid')
+ ->willReturn('user');
+
+ $this->consoleOutput->expects($this->once())
+ ->method('writeln')
+ ->with($this->stringContains('The specified user is enabled'));
+
+ self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
+ }
+
+ public function testInvalidUser() {
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('user')
+ ->willReturn(null);
+
+ $this->consoleInput
+ ->method('getArgument')
+ ->with('uid')
+ ->willReturn('user');
+
+ $this->consoleOutput->expects($this->once())
+ ->method('writeln')
+ ->with($this->stringContains('User does not exist'));
+
+ self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
+ }
+}
diff --git a/tests/Core/Controller/CssControllerTest.php b/tests/Core/Controller/CssControllerTest.php
new file mode 100644
index 00000000000..60fef9dddad
--- /dev/null
+++ b/tests/Core/Controller/CssControllerTest.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * @copyright 2017, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 Tests\Core\Controller;
+
+use OC\Core\Controller\CssController;
+use OC\HintException;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\FileDisplayResponse;
+use OCP\AppFramework\Http\NotFoundResponse;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\Files\IAppData;
+use OCP\Files\NotFoundException;
+use OCP\Files\SimpleFS\ISimpleFile;
+use OCP\Files\SimpleFS\ISimpleFolder;
+use OCP\IRequest;
+use Test\TestCase;
+
+class CssControllerTest extends TestCase {
+
+ /** @var IAppData|\PHPUnit_Framework_MockObject_MockObject */
+ private $appData;
+
+ /** @var CssController */
+ private $controller;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->appData = $this->createMock(IAppData::class);
+
+ $timeFactory = $this->createMock(ITimeFactory::class);
+ $timeFactory->method('getTime')
+ ->willReturn(1337);
+
+ $this->controller = new CssController(
+ 'core',
+ $this->createMock(IRequest::class),
+ $this->appData,
+ $timeFactory
+ );
+ }
+
+ public function testNoCssFolderForApp() {
+ $this->appData->method('getFolder')
+ ->with('myapp')
+ ->willThrowException(new NotFoundException());
+
+ $result = $this->controller->getCss('file.css', 'myapp');
+
+ $this->assertInstanceOf(NotFoundResponse::class, $result);
+ }
+
+
+ public function testNoCssFile() {
+ $folder = $this->createMock(ISimpleFolder::class);
+ $this->appData->method('getFolder')
+ ->with('myapp')
+ ->willReturn($folder);
+
+ $folder->method('getFile')
+ ->willThrowException(new NotFoundException());
+
+ $result = $this->controller->getCss('file.css', 'myapp');
+
+ $this->assertInstanceOf(NotFoundResponse::class, $result);
+ }
+
+ public function testGetFile() {
+ $folder = $this->createMock(ISimpleFolder::class);
+ $file = $this->createMock(ISimpleFile::class);
+ $this->appData->method('getFolder')
+ ->with('myapp')
+ ->willReturn($folder);
+
+ $folder->method('getFile')
+ ->with('file.css')
+ ->willReturn($file);
+
+ $expected = new FileDisplayResponse($file, Http::STATUS_OK, ['Content-Type' => 'text/css']);
+ $expected->cacheFor(86400);
+ $expires = new \DateTime();
+ $expires->setTimestamp(1337);
+ $expires->add(new \DateInterval('PT24H'));
+ $expected->addHeader('Expires', $expires->format(\DateTime::RFC1123));
+ $expected->addHeader('Pragma', 'cache');
+
+ $result = $this->controller->getCss('file.css', 'myapp');
+ $this->assertEquals($expected, $result);
+ }
+
+}
diff --git a/tests/Core/Controller/LoginControllerTest.php b/tests/Core/Controller/LoginControllerTest.php
index 600179a1dc5..a1a4452abf8 100644
--- a/tests/Core/Controller/LoginControllerTest.php
+++ b/tests/Core/Controller/LoginControllerTest.php
@@ -179,7 +179,6 @@ class LoginControllerTest extends TestCase {
'user_autofocus' => true,
'canResetPassword' => true,
'alt_login' => [],
- 'rememberLoginAllowed' => \OC_Util::rememberLoginAllowed(),
'rememberLoginState' => 0,
'resetPasswordLink' => null,
],
@@ -238,7 +237,6 @@ class LoginControllerTest extends TestCase {
'user_autofocus' => false,
'canResetPassword' => $expectedResult,
'alt_login' => [],
- 'rememberLoginAllowed' => \OC_Util::rememberLoginAllowed(),
'rememberLoginState' => 0,
'resetPasswordLink' => false,
],
@@ -277,7 +275,6 @@ class LoginControllerTest extends TestCase {
'user_autofocus' => false,
'canResetPassword' => false,
'alt_login' => [],
- 'rememberLoginAllowed' => \OC_Util::rememberLoginAllowed(),
'rememberLoginState' => 0,
'resetPasswordLink' => false,
],
diff --git a/tests/Core/Controller/LostControllerTest.php b/tests/Core/Controller/LostControllerTest.php
index 605298b66cf..0f9dcaead35 100644
--- a/tests/Core/Controller/LostControllerTest.php
+++ b/tests/Core/Controller/LostControllerTest.php
@@ -23,6 +23,7 @@ namespace Tests\Core\Controller;
use OC\Core\Controller\LostController;
use OC\Mail\Message;
+use OCA\Encryption\Exceptions\PrivateKeyMissingException;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Encryption\IManager;
diff --git a/tests/Core/Controller/OCSControllerTest.php b/tests/Core/Controller/OCSControllerTest.php
index 6c47521786f..7241df9317c 100644
--- a/tests/Core/Controller/OCSControllerTest.php
+++ b/tests/Core/Controller/OCSControllerTest.php
@@ -116,24 +116,6 @@ class OCSControllerTest extends TestCase {
$this->assertEquals($expected, $this->controller->getCapabilities());
}
- public function testGetCurrentUser() {
- $user = $this->createMock(IUser::class);
- $user->method('getUID')->willReturn('uid');
- $user->method('getDisplayName')->willReturn('displayName');
- $user->method('getEMailAddress')->willReturn('e@mail.com');
-
-
- $this->userSession->method('getUser')
- ->willReturn($user);
-
- $expected = new DataResponse([
- 'id' => 'uid',
- 'display-name' => 'displayName',
- 'email' => 'e@mail.com',
- ]);
- $this->assertEquals($expected, $this->controller->getCurrentUser());
- }
-
public function testPersonCheckValid() {
$this->request->method('getRemoteAddress')
->willReturn('1.2.3.4');
diff --git a/tests/Core/Controller/TwoFactorChallengeControllerTest.php b/tests/Core/Controller/TwoFactorChallengeControllerTest.php
index 8a1cfb9edf1..bef343f9043 100644
--- a/tests/Core/Controller/TwoFactorChallengeControllerTest.php
+++ b/tests/Core/Controller/TwoFactorChallengeControllerTest.php
@@ -22,32 +22,52 @@
namespace Test\Core\Controller;
+use OC\Authentication\TwoFactorAuth\Manager;
use OC\Core\Controller\TwoFactorChallengeController;
+use OC_Util;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\Authentication\TwoFactorAuth\IProvider;
+use OCP\Authentication\TwoFactorAuth\TwoFactorException;
+use OCP\IRequest;
+use OCP\ISession;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserSession;
+use OCP\Template;
+use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase;
class TwoFactorChallengeControllerTest extends TestCase {
+ /** @var IRequest|PHPUnit_Framework_MockObject_MockObject */
private $request;
+
+ /** @var Manager|PHPUnit_Framework_MockObject_MockObject */
private $twoFactorManager;
+
+ /** @var IUserSession|PHPUnit_Framework_MockObject_MockObject */
private $userSession;
+
+ /** @var ISession|PHPUnit_Framework_MockObject_MockObject */
private $session;
+
+ /** @var IURLGenerator|PHPUnit_Framework_MockObject_MockObject */
private $urlGenerator;
- /** @var TwoFactorChallengeController|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var TwoFactorChallengeController|PHPUnit_Framework_MockObject_MockObject */
private $controller;
protected function setUp() {
parent::setUp();
- $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock();
- $this->twoFactorManager = $this->getMockBuilder('\OC\Authentication\TwoFactorAuth\Manager')
- ->disableOriginalConstructor()
- ->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')->getMock();
- $this->session = $this->getMockBuilder('\OCP\ISession')->getMock();
- $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->getMock();
+ $this->request = $this->createMock(IRequest::class);
+ $this->twoFactorManager = $this->createMock(Manager::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->session = $this->createMock(ISession::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
- $this->controller = $this->getMockBuilder('OC\Core\Controller\TwoFactorChallengeController')
+ $this->controller = $this->getMockBuilder(TwoFactorChallengeController::class)
->setConstructorArgs([
'core',
$this->request,
@@ -64,7 +84,7 @@ class TwoFactorChallengeControllerTest extends TestCase {
}
public function testSelectChallenge() {
- $user = $this->getMockBuilder('\OCP\IUser')->getMock();
+ $user = $this->getMockBuilder(IUser::class)->getMock();
$providers = [
'prov1',
'prov2',
@@ -82,27 +102,21 @@ class TwoFactorChallengeControllerTest extends TestCase {
->with($user)
->will($this->returnValue('backup'));
- $expected = new \OCP\AppFramework\Http\TemplateResponse('core', 'twofactorselectchallenge', [
+ $expected = new TemplateResponse('core', 'twofactorselectchallenge', [
'providers' => $providers,
'backupProvider' => 'backup',
'redirect_url' => '/some/url',
'logout_attribute' => 'logoutAttribute',
- ], 'guest');
+ ], 'guest');
$this->assertEquals($expected, $this->controller->selectChallenge('/some/url'));
}
public function testShowChallenge() {
- $user = $this->getMockBuilder('\OCP\IUser')->getMock();
- $provider = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')
- ->disableOriginalConstructor()
- ->getMock();
- $backupProvider = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')
- ->disableOriginalConstructor()
- ->getMock();
- $tmpl = $this->getMockBuilder('\OCP\Template')
- ->disableOriginalConstructor()
- ->getMock();
+ $user = $this->createMock(IUser::class);
+ $provider = $this->createMock(IProvider::class);
+ $backupProvider = $this->createMock(IProvider::class);
+ $tmpl = $this->createMock(Template::class);
$this->userSession->expects($this->once())
->method('getUser')
@@ -126,9 +140,9 @@ class TwoFactorChallengeControllerTest extends TestCase {
->method('exists')
->with('two_factor_auth_error')
->will($this->returnValue(true));
- $this->session->expects($this->once())
+ $this->session->expects($this->exactly(2))
->method('remove')
- ->with('two_factor_auth_error');
+ ->with($this->logicalOr($this->equalTo('two_factor_auth_error'), $this->equalTo('two_factor_auth_error_message')));
$provider->expects($this->once())
->method('getTemplate')
->with($user)
@@ -137,19 +151,21 @@ class TwoFactorChallengeControllerTest extends TestCase {
->method('fetchPage')
->will($this->returnValue('<html/>'));
- $expected = new \OCP\AppFramework\Http\TemplateResponse('core', 'twofactorshowchallenge', [
+ $expected = new TemplateResponse('core', 'twofactorshowchallenge', [
'error' => true,
'provider' => $provider,
'backupProvider' => $backupProvider,
'logout_attribute' => 'logoutAttribute',
'template' => '<html/>',
+ 'redirect_url' => '/re/dir/ect/url',
+ 'error_message' => null,
], 'guest');
$this->assertEquals($expected, $this->controller->showChallenge('myprovider', '/re/dir/ect/url'));
}
public function testShowInvalidChallenge() {
- $user = $this->getMockBuilder('\OCP\IUser')->getMock();
+ $user = $this->createMock(IUser::class);
$this->userSession->expects($this->once())
->method('getUser')
@@ -163,16 +179,14 @@ class TwoFactorChallengeControllerTest extends TestCase {
->with('core.TwoFactorChallenge.selectChallenge')
->will($this->returnValue('select/challenge/url'));
- $expected = new \OCP\AppFramework\Http\RedirectResponse('select/challenge/url');
+ $expected = new RedirectResponse('select/challenge/url');
$this->assertEquals($expected, $this->controller->showChallenge('myprovider', 'redirect/url'));
}
public function testSolveChallenge() {
- $user = $this->getMockBuilder('\OCP\IUser')->getMock();
- $provider = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')
- ->disableOriginalConstructor()
- ->getMock();
+ $user = $this->createMock(IUser::class);
+ $provider = $this->createMock(IProvider::class);
$this->userSession->expects($this->once())
->method('getUser')
@@ -187,12 +201,37 @@ class TwoFactorChallengeControllerTest extends TestCase {
->with('myprovider', $user, 'token')
->will($this->returnValue(true));
- $expected = new \OCP\AppFramework\Http\RedirectResponse(\OC_Util::getDefaultPageUrl());
+ $expected = new RedirectResponse(OC_Util::getDefaultPageUrl());
$this->assertEquals($expected, $this->controller->solveChallenge('myprovider', 'token'));
}
+ public function testSolveValidChallengeAndRedirect() {
+ $user = $this->createMock(IUser::class);
+ $provider = $this->createMock(IProvider::class);
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $this->twoFactorManager->expects($this->once())
+ ->method('getProvider')
+ ->with($user, 'myprovider')
+ ->will($this->returnValue($provider));
+
+ $this->twoFactorManager->expects($this->once())
+ ->method('verifyChallenge')
+ ->with('myprovider', $user, 'token')
+ ->willReturn(true);
+ $this->urlGenerator->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('redirect url')
+ ->willReturn('redirect/url');
+
+ $expected = new RedirectResponse('redirect/url');
+ $this->assertEquals($expected, $this->controller->solveChallenge('myprovider', 'token', 'redirect%20url'));
+ }
+
public function testSolveChallengeInvalidProvider() {
- $user = $this->getMockBuilder('\OCP\IUser')->getMock();
+ $user = $this->getMockBuilder(IUser::class)->getMock();
$this->userSession->expects($this->once())
->method('getUser')
@@ -206,16 +245,14 @@ class TwoFactorChallengeControllerTest extends TestCase {
->with('core.TwoFactorChallenge.selectChallenge')
->will($this->returnValue('select/challenge/url'));
- $expected = new \OCP\AppFramework\Http\RedirectResponse('select/challenge/url');
+ $expected = new RedirectResponse('select/challenge/url');
$this->assertEquals($expected, $this->controller->solveChallenge('myprovider', 'token'));
}
public function testSolveInvalidChallenge() {
- $user = $this->getMockBuilder('\OCP\IUser')->getMock();
- $provider = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')
- ->disableOriginalConstructor()
- ->getMock();
+ $user = $this->createMock(IUser::class);
+ $provider = $this->createMock(IProvider::class);
$this->userSession->expects($this->once())
->method('getUser')
@@ -243,7 +280,45 @@ class TwoFactorChallengeControllerTest extends TestCase {
->method('getId')
->will($this->returnValue('myprovider'));
- $expected = new \OCP\AppFramework\Http\RedirectResponse('files/index/url');
+ $expected = new RedirectResponse('files/index/url');
+ $this->assertEquals($expected, $this->controller->solveChallenge('myprovider', 'token', '/url'));
+ }
+
+ public function testSolveChallengeTwoFactorException() {
+ $user = $this->createMock(IUser::class);
+ $provider = $this->createMock(IProvider::class);
+ $exception = new TwoFactorException("2FA failed");
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $this->twoFactorManager->expects($this->once())
+ ->method('getProvider')
+ ->with($user, 'myprovider')
+ ->will($this->returnValue($provider));
+
+ $this->twoFactorManager->expects($this->once())
+ ->method('verifyChallenge')
+ ->with('myprovider', $user, 'token')
+ ->will($this->throwException($exception));
+ $this->session->expects($this->at(0))
+ ->method('set')
+ ->with('two_factor_auth_error_message', "2FA failed");
+ $this->session->expects($this->at(1))
+ ->method('set')
+ ->with('two_factor_auth_error', true);
+ $this->urlGenerator->expects($this->once())
+ ->method('linkToRoute')
+ ->with('core.TwoFactorChallenge.showChallenge', [
+ 'challengeProviderId' => 'myprovider',
+ 'redirect_url' => '/url',
+ ])
+ ->will($this->returnValue('files/index/url'));
+ $provider->expects($this->once())
+ ->method('getId')
+ ->will($this->returnValue('myprovider'));
+
+ $expected = new RedirectResponse('files/index/url');
$this->assertEquals($expected, $this->controller->solveChallenge('myprovider', 'token', '/url'));
}
diff --git a/tests/Core/Controller/UserControllerTest.php b/tests/Core/Controller/UserControllerTest.php
new file mode 100644
index 00000000000..d15bbf7f871
--- /dev/null
+++ b/tests/Core/Controller/UserControllerTest.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Core\Controller;
+
+use OC\Core\Controller\UserController;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\IRequest;
+use OCP\IUser;
+use OCP\IUserManager;
+use Test\TestCase;
+
+class UserControllerTest extends TestCase {
+
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+
+ /** @var UserController */
+ private $controller;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->controller = new UserController(
+ 'core',
+ $this->createMock(IRequest::class),
+ $this->userManager
+ );
+ }
+
+ public function testGetDisplayNames() {
+ $user = $this->createMock(IUser::class);
+ $user->method('getDisplayName')
+ ->willReturn('FooDisplay Name');
+
+ $this->userManager
+ ->method('get')
+ ->will($this->returnCallback(function ($uid) use ($user) {
+ if ($uid === 'foo') {
+ return $user;
+ }
+ return null;
+ }));
+
+ $expected = new JSONResponse([
+ 'users' => [
+ 'foo' => 'FooDisplay Name',
+ 'bar' => 'bar',
+ ],
+ 'status' => 'success'
+ ]);
+
+ $result = $this->controller->getDisplayNames(['foo', 'bar']);
+ $this->assertEquals($expected, $result);
+ }
+}
diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php
index b85667740f7..36ca0917524 100644
--- a/tests/Settings/Controller/UsersControllerTest.php
+++ b/tests/Settings/Controller/UsersControllerTest.php
@@ -19,6 +19,7 @@ use OCP\AppFramework\Http\DataResponse;
use OCP\IAvatar;
use OCP\IAvatarManager;
use OCP\IConfig;
+use OCP\IGroup;
use OCP\IGroupManager;
use OCP\IL10N;
use OCP\ILogger;
@@ -852,95 +853,6 @@ class UsersControllerTest extends \Test\TestCase {
$this->assertEquals($expectedResponse, $response);
}
- public function testCreateSuccessfulWithoutGroupSubAdmin() {
- $controller = $this->getController(false);
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $this->userSession
- ->expects($this->once())
- ->method('getUser')
- ->will($this->returnValue($user));
-
- $newUser = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $newUser
- ->method('getUID')
- ->will($this->returnValue('foo'));
- $newUser
- ->method('getHome')
- ->will($this->returnValue('/home/user'));
- $newUser
- ->method('getHome')
- ->will($this->returnValue('/home/user'));
- $newUser
- ->expects($this->once())
- ->method('getBackendClassName')
- ->will($this->returnValue('bar'));
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $subGroup1 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()->getMock();
- $subGroup1
- ->expects($this->once())
- ->method('addUser')
- ->with($newUser);
- $subGroup2 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()->getMock();
- $subGroup2
- ->expects($this->once())
- ->method('addUser')
- ->with($newUser);
-
- $this->userManager
- ->expects($this->once())
- ->method('createUser')
- ->will($this->returnValue($newUser));
- $this->groupManager
- ->expects($this->exactly(2))
- ->method('get')
- ->will($this->onConsecutiveCalls($subGroup1, $subGroup2));
- $this->groupManager
- ->expects($this->once())
- ->method('getUserGroupIds')
- ->with($user)
- ->will($this->onConsecutiveCalls(['SubGroup1', 'SubGroup2']));
-
- $subadmin = $this->getMockBuilder('\OC\SubAdmin')
- ->disableOriginalConstructor()
- ->getMock();
- $subadmin
- ->expects($this->at(0))
- ->method('getSubAdminsGroups')
- ->will($this->returnValue([$subGroup1, $subGroup2]));
- $subadmin
- ->expects($this->at(1))
- ->method('getSubAdminsGroups')
- ->will($this->returnValue([]));
- $this->groupManager
- ->expects($this->any())
- ->method('getSubAdmin')
- ->will($this->returnValue($subadmin));
-
- $expectedResponse = new DataResponse(
- array(
- 'name' => 'foo',
- 'groups' => ['SubGroup1', 'SubGroup2'],
- 'storageLocation' => '/home/user',
- 'backend' => 'bar',
- 'lastLogin' => 0,
- 'displayname' => null,
- 'quota' => null,
- 'subadmin' => [],
- 'email' => null,
- 'isRestoreDisabled' => false,
- 'isAvatarAvailable' => true,
- ),
- Http::STATUS_CREATED
- );
- $response = $controller->create('foo', 'password');
- $this->assertEquals($expectedResponse, $response);
- }
-
public function testCreateSuccessfulWithGroupAdmin() {
$controller = $this->getController(true);
@@ -1026,16 +938,12 @@ class UsersControllerTest extends \Test\TestCase {
public function testCreateSuccessfulWithGroupSubAdmin() {
$controller = $this->getController(false);
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
+ $user = $this->createMock(IUser::class);
$this->userSession
->expects($this->once())
->method('getUser')
->will($this->returnValue($user));
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $newUser = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
+ $newUser = $this->createMock(IUser::class);
$newUser
->method('getHome')
->will($this->returnValue('/home/user'));
@@ -1049,8 +957,7 @@ class UsersControllerTest extends \Test\TestCase {
->expects($this->once())
->method('getBackendClassName')
->will($this->returnValue('bar'));
- $subGroup1 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()->getMock();
+ $subGroup1 = $this->createMock(IGroup::class);
$subGroup1
->expects($this->any())
->method('getGID')
@@ -1064,16 +971,6 @@ class UsersControllerTest extends \Test\TestCase {
->method('createUser')
->will($this->returnValue($newUser));
$this->groupManager
- ->expects($this->at(0))
- ->method('get')
- ->with('SubGroup1')
- ->will($this->returnValue($subGroup1));
- $this->groupManager
- ->expects($this->at(4))
- ->method('get')
- ->with('SubGroup1')
- ->will($this->returnValue($subGroup1));
- $this->groupManager
->expects($this->once())
->method('getUserGroupIds')
->with($user)
@@ -1084,21 +981,28 @@ class UsersControllerTest extends \Test\TestCase {
->with($newUser)
->will($this->onConsecutiveCalls(['SubGroup1']));
- $subadmin = $this->getMockBuilder('\OC\SubAdmin')
- ->disableOriginalConstructor()
- ->getMock();
- $subadmin->expects($this->at(1))
+ $subadmin = $this->createMock(\OC\SubAdmin::class);
+ $subadmin->expects($this->atLeastOnce())
->method('getSubAdminsGroups')
->with($user)
- ->will($this->returnValue([$subGroup1]));
- $subadmin->expects($this->at(2))
- ->method('getSubAdminsGroups')
- ->with($newUser)
- ->will($this->returnValue([]));
+ ->willReturnMap([
+ [$user, [$subGroup1]],
+ [$newUser, []],
+ ]);
+ $subadmin->expects($this->atLeastOnce())
+ ->method('isSubAdminofGroup')
+ ->willReturnMap([
+ [$user, $subGroup1, true],
+ ]);
$this->groupManager
->expects($this->any())
->method('getSubAdmin')
->will($this->returnValue($subadmin));
+ $this->groupManager->expects($this->atLeastOnce())
+ ->method('get')
+ ->willReturnMap([
+ ['SubGroup1', $subGroup1],
+ ]);
$expectedResponse = new DataResponse(
array(
@@ -1137,16 +1041,36 @@ class UsersControllerTest extends \Test\TestCase {
$this->assertEquals($expectedResponse, $response);
}
+ public function testCreateUnsuccessfulSubAdminNoGroup() {
+ $controller = $this->getController(false);
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
+ ->method('getUID')
+ ->will($this->returnValue('username'));
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+
+ $this->userManager->expects($this->never())
+ ->method('createUser');
+
+ $expectedResponse = new DataResponse(
+ [
+ 'message' => 'No valid group selected'
+ ],
+ Http::STATUS_FORBIDDEN
+ );
+ $response = $controller->create('foo', 'password', []);
+ $this->assertEquals($expectedResponse, $response);
+ }
+
public function testCreateUnsuccessfulSubAdmin() {
$controller = $this->getController(false);
- $user = $this->getMockBuilder('\OC\User\User')
- ->disableOriginalConstructor()->getMock();
- $user
- ->expects($this->any())
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
->method('getUID')
->will($this->returnValue('username'));
- $this->userSession
- ->expects($this->once())
+ $this->userSession->expects($this->once())
->method('getUser')
->will($this->returnValue($user));
@@ -1154,29 +1078,24 @@ class UsersControllerTest extends \Test\TestCase {
->method('createUser')
->will($this->throwException(new \Exception()));
- $subgroup1 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()
- ->getMock();
- $subgroup1->expects($this->once())
- ->method('getGID')
- ->will($this->returnValue('SubGroup1'));
- $subgroup2 = $this->getMockBuilder('\OCP\IGroup')
- ->disableOriginalConstructor()
- ->getMock();
- $subgroup2->expects($this->once())
- ->method('getGID')
- ->will($this->returnValue('SubGroup2'));
- $subadmin = $this->getMockBuilder('\OC\SubAdmin')
- ->disableOriginalConstructor()
- ->getMock();
- $subadmin->expects($this->once())
- ->method('getSubAdminsGroups')
- ->with($user)
- ->will($this->returnValue([$subgroup1, $subgroup2]));
- $this->groupManager
- ->expects($this->any())
+ $subgroup1 = $this->createMock(IGroup::class);
+ $subgroup2 = $this->createMock(IGroup::class);
+ $subadmin = $this->createMock(\OC\SubAdmin::class);
+ $subadmin->expects($this->atLeastOnce())
+ ->method('isSubAdminofGroup')
+ ->willReturnMap([
+ [$user, $subgroup1, true],
+ [$user, $subgroup2, true],
+ ]);
+ $this->groupManager->expects($this->any())
->method('getSubAdmin')
- ->will($this->returnValue($subadmin));
+ ->willReturn($subadmin);
+ $this->groupManager->expects($this->atLeastOnce())
+ ->method('get')
+ ->willReturnMap([
+ ['SubGroup1', $subgroup1],
+ ['SubGroup2', $subgroup2],
+ ]);
$expectedResponse = new DataResponse(
[
@@ -1184,7 +1103,7 @@ class UsersControllerTest extends \Test\TestCase {
],
Http::STATUS_FORBIDDEN
);
- $response = $controller->create('foo', 'password', array());
+ $response = $controller->create('foo', 'password', array('SubGroup1', 'SubGroup2'));
$this->assertEquals($expectedResponse, $response);
}
diff --git a/tests/data/app/expected-info.json b/tests/data/app/expected-info.json
index 646f22bea85..0666b902f2c 100644
--- a/tests/data/app/expected-info.json
+++ b/tests/data/app/expected-info.json
@@ -13,7 +13,6 @@
"user": "user-encryption",
"admin": "admin-encryption"
},
- "rememberlogin": "false",
"types": ["filesystem"],
"ocsid": "166047",
"dependencies": {
diff --git a/tests/data/app/invalid-info.xml b/tests/data/app/invalid-info.xml
index 3947f5420c2..0ddb13b89c0 100644
--- a/tests/data/app/invalid-info.xml
+++ b/tests/data/app/invalid-info.xml
@@ -14,7 +14,6 @@
<user>user-encryption</user>
<admin>admin-encryption</admin>
</documentation>
- <rememberlogin>false</rememberlogin>
<types>
<filesystem/>
</types>
diff --git a/tests/data/app/valid-info.xml b/tests/data/app/valid-info.xml
index 4b22d55d7bc..4788d046c13 100644
--- a/tests/data/app/valid-info.xml
+++ b/tests/data/app/valid-info.xml
@@ -14,7 +14,6 @@
<user>user-encryption</user>
<admin>admin-encryption</admin>
</documentation>
- <rememberlogin>false</rememberlogin>
<types>
<filesystem/>
</types>
diff --git a/tests/karma.config.js b/tests/karma.config.js
index f20672f4a55..e9aa38dd66f 100644
--- a/tests/karma.config.js
+++ b/tests/karma.config.js
@@ -110,7 +110,9 @@ module.exports = function(config) {
name: 'settings',
srcFiles: [
'settings/js/apps.js',
- 'settings/js/users/deleteHandler.js'
+ 'settings/js/users/deleteHandler.js',
+ 'core/vendor/marked/marked.min.js',
+ 'core/vendor/DOMPurify/dist/purify.min.js'
],
testFiles: [
'settings/tests/js/appsSpec.js',
@@ -220,9 +222,14 @@ module.exports = function(config) {
// serve images to avoid warnings
files.push({pattern: 'core/img/**/*', watched: false, included: false, served: true});
+ files.push({pattern: 'core/css/images/*', watched: false, included: false, served: true});
// include core CSS
files.push({pattern: 'core/css/*.css', watched: true, included: true, served: true});
+ files.push({pattern: 'tests/css/*.css', watched: true, included: true, served: true});
+
+ // Allow fonts
+ files.push({pattern: 'core/fonts/*', watched: false, included: false, served: true});
config.set({
@@ -242,9 +249,11 @@ module.exports = function(config) {
proxies: {
// prevent warnings for images
- '/context.html//core/img/': 'http://localhost:9876/base/core/img/',
- '/context.html//core/css/': 'http://localhost:9876/base/core/css/',
- '/context.html//core/fonts/': 'http://localhost:9876/base/core/fonts/'
+ '/base/tests/img/': 'http://localhost:9876/base/core/img/',
+ '/base/tests/css/': 'http://localhost:9876/base/core/css/',
+ '/base/core/css/images/': 'http://localhost:9876/base/core/css/images/',
+ '/actions/': 'http://localhost:9876/base/core/img/actions/',
+ '/base/core/fonts/': 'http://localhost:9876/base/core/fonts/'
},
// test results reporter to use
@@ -265,7 +274,7 @@ module.exports = function(config) {
reporters: [
{ type: 'html' },
{ type: 'cobertura' },
- { type: 'lcovonly' },
+ { type: 'lcovonly' }
]
},
diff --git a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
index aa0d50cac97..9d09898bb95 100644
--- a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
+++ b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
@@ -58,6 +58,12 @@ EOD;
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->config = $this->createMock(IConfig::class);
+ $this->config
+ ->expects($this->atLeastOnce())
+ ->method('getSystemValue')
+ ->with('version')
+ ->willReturn('11.0.0.2');
+
$this->fetcher = new AppFetcher(
$this->appData,
$this->clientService,
@@ -99,15 +105,13 @@ EOD;
->expects($this->once())
->method('getBody')
->willReturn(self::$responseJson);
+ $response->method('getHeader')
+ ->with($this->equalTo('ETag'))
+ ->willReturn('"myETag"');
$this->timeFactory
->expects($this->once())
->method('getTime')
->willReturn(1234);
- $this->config
- ->expects($this->once())
- ->method('getSystemValue')
- ->with('version')
- ->willReturn('11.0.0.2');
$expected = array (
'data' =>
@@ -1882,6 +1886,8 @@ EJL3BaQAQaASSsvFrcozYxrQG4VzEg==
),
),
'timestamp' => 1234,
+ 'ncversion' => '11.0.0.2',
+ 'ETag' => '"myETag"',
);
$dataToPut = $expected;
diff --git a/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php b/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php
index db4354119a0..9955715bca4 100644
--- a/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php
+++ b/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php
@@ -32,7 +32,8 @@ class CategoryFetcherTest extends FetcherBase {
$this->fetcher = new CategoryFetcher(
$this->appData,
$this->clientService,
- $this->timeFactory
+ $this->timeFactory,
+ $this->config
);
}
}
diff --git a/tests/lib/App/AppStore/Fetcher/FetcherBase.php b/tests/lib/App/AppStore/Fetcher/FetcherBase.php
index 840655d78d5..73fcbbaab6f 100644
--- a/tests/lib/App/AppStore/Fetcher/FetcherBase.php
+++ b/tests/lib/App/AppStore/Fetcher/FetcherBase.php
@@ -55,9 +55,16 @@ abstract class FetcherBase extends TestCase {
$this->clientService = $this->createMock(IClientService::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->config = $this->createMock(IConfig::class);
+
+ $this->config
+ ->method('getSystemValue')
+ ->with(
+ $this->equalTo('version'),
+ $this->anything()
+ )->willReturn('11.0.0.2');
}
- public function testGetWithAlreadyExistingFileAndUpToDateTimestamp() {
+ public function testGetWithAlreadyExistingFileAndUpToDateTimestampAndVersion() {
$folder = $this->createMock(ISimpleFolder::class);
$file = $this->createMock(ISimpleFile::class);
$this->appData
@@ -73,7 +80,7 @@ abstract class FetcherBase extends TestCase {
$file
->expects($this->once())
->method('getContent')
- ->willReturn('{"timestamp":1200,"data":[{"id":"MyApp"}]}');
+ ->willReturn('{"timestamp":1200,"data":[{"id":"MyApp"}],"ncversion":"11.0.0.2"}');
$this->timeFactory
->expects($this->once())
->method('getTime')
@@ -87,7 +94,7 @@ abstract class FetcherBase extends TestCase {
$this->assertSame($expected, $this->fetcher->get());
}
- public function testGetWithNotExistingFileAndUpToDateTimestamp() {
+ public function testGetWithNotExistingFileAndUpToDateTimestampAndVersion() {
$folder = $this->createMock(ISimpleFolder::class);
$file = $this->createMock(ISimpleFile::class);
$this->appData
@@ -120,7 +127,10 @@ abstract class FetcherBase extends TestCase {
->expects($this->once())
->method('getBody')
->willReturn('[{"id":"MyNewApp", "foo": "foo"}, {"id":"bar"}]');
- $fileData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1502}';
+ $response->method('getHeader')
+ ->with($this->equalTo('ETag'))
+ ->willReturn('"myETag"');
+ $fileData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1502,"ncversion":"11.0.0.2","ETag":"\"myETag\""}';
$file
->expects($this->at(0))
->method('putContent')
@@ -162,7 +172,7 @@ abstract class FetcherBase extends TestCase {
$file
->expects($this->at(0))
->method('getContent')
- ->willReturn('{"timestamp":1200,"data":{"MyApp":{"id":"MyApp"}}}');
+ ->willReturn('{"timestamp":1200,"data":{"MyApp":{"id":"MyApp"}},"ncversion":"11.0.0.2"}');
$this->timeFactory
->expects($this->at(0))
->method('getTime')
@@ -182,7 +192,10 @@ abstract class FetcherBase extends TestCase {
->expects($this->once())
->method('getBody')
->willReturn('[{"id":"MyNewApp", "foo": "foo"}, {"id":"bar"}]');
- $fileData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1502}';
+ $response->method('getHeader')
+ ->with($this->equalTo('ETag'))
+ ->willReturn('"myETag"');
+ $fileData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1502,"ncversion":"11.0.0.2","ETag":"\"myETag\""}';
$file
->expects($this->at(1))
->method('putContent')
@@ -208,6 +221,127 @@ abstract class FetcherBase extends TestCase {
$this->assertSame($expected, $this->fetcher->get());
}
+ public function testGetWithAlreadyExistingFileAndNoVersion() {
+ $folder = $this->createMock(ISimpleFolder::class);
+ $file = $this->createMock(ISimpleFile::class);
+ $this->appData
+ ->expects($this->once())
+ ->method('getFolder')
+ ->with('/')
+ ->willReturn($folder);
+ $folder
+ ->expects($this->once())
+ ->method('getFile')
+ ->with($this->fileName)
+ ->willReturn($file);
+ $file
+ ->expects($this->at(0))
+ ->method('getContent')
+ ->willReturn('{"timestamp":1200,"data":{"MyApp":{"id":"MyApp"}}');
+ $this->timeFactory
+ ->expects($this->at(0))
+ ->method('getTime')
+ ->willReturn(1201);
+ $client = $this->createMock(IClient::class);
+ $this->clientService
+ ->expects($this->once())
+ ->method('newClient')
+ ->willReturn($client);
+ $response = $this->createMock(IResponse::class);
+ $client
+ ->expects($this->once())
+ ->method('get')
+ ->with($this->endpoint)
+ ->willReturn($response);
+ $response
+ ->expects($this->once())
+ ->method('getBody')
+ ->willReturn('[{"id":"MyNewApp", "foo": "foo"}, {"id":"bar"}]');
+ $response->method('getHeader')
+ ->with($this->equalTo('ETag'))
+ ->willReturn('"myETag"');
+ $fileData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1201,"ncversion":"11.0.0.2","ETag":"\"myETag\""}';
+ $file
+ ->expects($this->at(1))
+ ->method('putContent')
+ ->with($fileData);
+ $file
+ ->expects($this->at(2))
+ ->method('getContent')
+ ->willReturn($fileData);
+
+ $expected = [
+ [
+ 'id' => 'MyNewApp',
+ 'foo' => 'foo',
+ ],
+ [
+ 'id' => 'bar',
+ ],
+ ];
+ $this->assertSame($expected, $this->fetcher->get());
+ }
+
+ public function testGetWithAlreadyExistingFileAndOutdatedVersion() {
+ $folder = $this->createMock(ISimpleFolder::class);
+ $file = $this->createMock(ISimpleFile::class);
+ $this->appData
+ ->expects($this->once())
+ ->method('getFolder')
+ ->with('/')
+ ->willReturn($folder);
+ $folder
+ ->expects($this->once())
+ ->method('getFile')
+ ->with($this->fileName)
+ ->willReturn($file);
+ $file
+ ->expects($this->at(0))
+ ->method('getContent')
+ ->willReturn('{"timestamp":1200,"data":{"MyApp":{"id":"MyApp"}},"ncversion":"11.0.0.1"');
+ $this->timeFactory
+ ->method('getTime')
+ ->willReturn(1201);
+ $client = $this->createMock(IClient::class);
+ $this->clientService
+ ->expects($this->once())
+ ->method('newClient')
+ ->willReturn($client);
+ $response = $this->createMock(IResponse::class);
+ $client
+ ->expects($this->once())
+ ->method('get')
+ ->with($this->endpoint)
+ ->willReturn($response);
+ $response
+ ->expects($this->once())
+ ->method('getBody')
+ ->willReturn('[{"id":"MyNewApp", "foo": "foo"}, {"id":"bar"}]');
+ $response->method('getHeader')
+ ->with($this->equalTo('ETag'))
+ ->willReturn('"myETag"');
+ $fileData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1201,"ncversion":"11.0.0.2","ETag":"\"myETag\""}';
+ $file
+ ->expects($this->at(1))
+ ->method('putContent')
+ ->with($fileData);
+ $file
+ ->expects($this->at(2))
+ ->method('getContent')
+ ->willReturn($fileData);
+
+ $expected = [
+ [
+ 'id' => 'MyNewApp',
+ 'foo' => 'foo',
+ ],
+ [
+ 'id' => 'bar',
+ ],
+ ];
+ $this->assertSame($expected, $this->fetcher->get());
+ }
+
public function testGetWithExceptionInClient() {
$folder = $this->createMock(ISimpleFolder::class);
$file = $this->createMock(ISimpleFile::class);
@@ -242,4 +376,147 @@ abstract class FetcherBase extends TestCase {
$this->assertSame([], $this->fetcher->get());
}
+
+ public function testGetMatchingETag() {
+ $folder = $this->createMock(ISimpleFolder::class);
+ $file = $this->createMock(ISimpleFile::class);
+ $this->appData
+ ->expects($this->once())
+ ->method('getFolder')
+ ->with('/')
+ ->willReturn($folder);
+ $folder
+ ->expects($this->once())
+ ->method('getFile')
+ ->with($this->fileName)
+ ->willReturn($file);
+ $origData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1200,"ncversion":"11.0.0.2","ETag":"\"myETag\""}';
+ $file
+ ->expects($this->at(0))
+ ->method('getContent')
+ ->willReturn($origData);
+ $this->timeFactory
+ ->expects($this->at(0))
+ ->method('getTime')
+ ->willReturn(1501);
+ $this->timeFactory
+ ->expects($this->at(1))
+ ->method('getTime')
+ ->willReturn(1502);
+ $client = $this->createMock(IClient::class);
+ $this->clientService
+ ->expects($this->once())
+ ->method('newClient')
+ ->willReturn($client);
+ $response = $this->createMock(IResponse::class);
+ $client
+ ->expects($this->once())
+ ->method('get')
+ ->with(
+ $this->equalTo($this->endpoint),
+ $this->equalTo([
+ 'headers' => [
+ 'If-None-Match' => '"myETag"'
+ ]
+ ])
+ )->willReturn($response);
+ $response->method('getStatusCode')
+ ->willReturn(304);
+
+ $newData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1502,"ncversion":"11.0.0.2","ETag":"\"myETag\""}';
+ $file
+ ->expects($this->at(1))
+ ->method('putContent')
+ ->with($newData);
+ $file
+ ->expects($this->at(2))
+ ->method('getContent')
+ ->willReturn($newData);
+
+ $expected = [
+ [
+ 'id' => 'MyNewApp',
+ 'foo' => 'foo',
+ ],
+ [
+ 'id' => 'bar',
+ ],
+ ];
+
+ $this->assertSame($expected, $this->fetcher->get());
+ }
+
+ public function testGetNoMatchingETag() {
+ $folder = $this->createMock(ISimpleFolder::class);
+ $file = $this->createMock(ISimpleFile::class);
+ $this->appData
+ ->expects($this->once())
+ ->method('getFolder')
+ ->with('/')
+ ->willReturn($folder);
+ $folder
+ ->expects($this->at(0))
+ ->method('getFile')
+ ->with($this->fileName)
+ ->willReturn($file);
+ $file
+ ->expects($this->at(0))
+ ->method('getContent')
+ ->willReturn('{"data":[{"id":"MyOldApp","abc":"def"}],"timestamp":1200,"ncversion":"11.0.0.2","ETag":"\"myETag\""}');
+ $client = $this->createMock(IClient::class);
+ $this->clientService
+ ->expects($this->once())
+ ->method('newClient')
+ ->willReturn($client);
+ $response = $this->createMock(IResponse::class);
+ $client
+ ->expects($this->once())
+ ->method('get')
+ ->with(
+ $this->equalTo($this->endpoint),
+ $this->equalTo([
+ 'headers' => [
+ 'If-None-Match' => '"myETag"',
+ ]
+ ])
+ )
+ ->willReturn($response);
+ $response->method('getStatusCode')
+ ->willReturn(200);
+ $response
+ ->expects($this->once())
+ ->method('getBody')
+ ->willReturn('[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}]');
+ $response->method('getHeader')
+ ->with($this->equalTo('ETag'))
+ ->willReturn('"newETag"');
+ $fileData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1502,"ncversion":"11.0.0.2","ETag":"\"newETag\""}';
+ $file
+ ->expects($this->at(1))
+ ->method('putContent')
+ ->with($fileData);
+ $file
+ ->expects($this->at(2))
+ ->method('getContent')
+ ->willReturn($fileData);
+ $this->timeFactory
+ ->expects($this->at(0))
+ ->method('getTime')
+ ->willReturn(1501);
+ $this->timeFactory
+ ->expects($this->at(1))
+ ->method('getTime')
+ ->willReturn(1502);
+
+ $expected = [
+ [
+ 'id' => 'MyNewApp',
+ 'foo' => 'foo',
+ ],
+ [
+ 'id' => 'bar',
+ ],
+ ];
+ $this->assertSame($expected, $this->fetcher->get());
+ }
}
diff --git a/tests/lib/AppConfigTest.php b/tests/lib/AppConfigTest.php
index c4da7507752..fed929352d3 100644
--- a/tests/lib/AppConfigTest.php
+++ b/tests/lib/AppConfigTest.php
@@ -8,6 +8,7 @@
*/
namespace Test;
+use OCP\IConfig;
/**
* Class AppConfigTest
@@ -305,6 +306,28 @@ class AppConfigTest extends TestCase {
$this->assertEquals($expected, $values);
}
+ public function testGetFilteredValues() {
+ /** @var \OC\AppConfig|\PHPUnit_Framework_MockObject_MockObject $config */
+ $config = $this->getMockBuilder(\OC\AppConfig::class)
+ ->setConstructorArgs([\OC::$server->getDatabaseConnection()])
+ ->setMethods(['getValues'])
+ ->getMock();
+
+ $config->expects($this->once())
+ ->method('getValues')
+ ->with('user_ldap', false)
+ ->willReturn([
+ 'ldap_agent_password' => 'secret',
+ 'ldap_dn' => 'dn',
+ ]);
+
+ $values = $config->getFilteredValues('user_ldap');
+ $this->assertEquals([
+ 'ldap_agent_password' => IConfig::SENSITIVE_VALUE,
+ 'ldap_dn' => 'dn',
+ ], $values);
+ }
+
public function testSettingConfigParallel() {
$appConfig1 = new \OC\AppConfig(\OC::$server->getDatabaseConnection());
$appConfig2 = new \OC\AppConfig(\OC::$server->getDatabaseConnection());
diff --git a/tests/lib/AppFramework/Controller/ControllerTest.php b/tests/lib/AppFramework/Controller/ControllerTest.php
index 63cc2873575..640853ccda9 100644
--- a/tests/lib/AppFramework/Controller/ControllerTest.php
+++ b/tests/lib/AppFramework/Controller/ControllerTest.php
@@ -182,7 +182,7 @@ class ControllerTest extends \Test\TestCase {
public function testFormatDataResponseJSON() {
$expectedHeaders = [
'test' => 'something',
- 'Cache-Control' => 'no-cache, must-revalidate',
+ 'Cache-Control' => 'no-cache, no-store, must-revalidate',
'Content-Type' => 'application/json; charset=utf-8',
'Content-Security-Policy' => "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'",
];
diff --git a/tests/lib/AppFramework/Http/DataResponseTest.php b/tests/lib/AppFramework/Http/DataResponseTest.php
index cde553cdf5f..159efded97a 100644
--- a/tests/lib/AppFramework/Http/DataResponseTest.php
+++ b/tests/lib/AppFramework/Http/DataResponseTest.php
@@ -67,7 +67,7 @@ class DataResponseTest extends \Test\TestCase {
$response = new DataResponse($data, $code, $headers);
$expectedHeaders = [
- 'Cache-Control' => 'no-cache, must-revalidate',
+ 'Cache-Control' => 'no-cache, no-store, must-revalidate',
'Content-Security-Policy' => "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'",
];
$expectedHeaders = array_merge($expectedHeaders, $headers);
diff --git a/tests/lib/AppFramework/Http/ResponseTest.php b/tests/lib/AppFramework/Http/ResponseTest.php
index 0c582f8f6ea..3ed946dc6ca 100644
--- a/tests/lib/AppFramework/Http/ResponseTest.php
+++ b/tests/lib/AppFramework/Http/ResponseTest.php
@@ -97,7 +97,7 @@ class ResponseTest extends \Test\TestCase {
public function testCacheHeadersAreDisabledByDefault(){
$headers = $this->childResponse->getHeaders();
- $this->assertEquals('no-cache, must-revalidate', $headers['Cache-Control']);
+ $this->assertEquals('no-cache, no-store, must-revalidate', $headers['Cache-Control']);
}
diff --git a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
index 5a988751070..164ea48de70 100644
--- a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
+++ b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
@@ -34,6 +34,7 @@ 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;
@@ -82,6 +83,8 @@ 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();
@@ -96,6 +99,7 @@ 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);
@@ -119,7 +123,8 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$isAdminUser,
$this->contentSecurityPolicyManager,
$this->csrfTokenManager,
- $this->cspNonceManager
+ $this->cspNonceManager,
+ $this->bruteForceThrottler
);
}
@@ -652,4 +657,70 @@ 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 92d767e9987..644245e1967 100644
--- a/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php
+++ b/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php
@@ -77,6 +77,19 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
/**
+ * @Annotation parameter
+ */
+ public function testGetAnnotationParameter(){
+ $reader = new ControllerMethodReflector();
+ $reader->reflect(
+ '\Test\AppFramework\Utility\ControllerMethodReflectorTest',
+ 'testGetAnnotationParameter'
+ );
+
+ $this->assertSame('parameter', $reader->getAnnotationParameter('Annotation'));
+ }
+
+ /**
* @Annotation
* @param test
*/
diff --git a/tests/lib/AppTest.php b/tests/lib/AppTest.php
index 575e32dd60c..a60a03a07f5 100644
--- a/tests/lib/AppTest.php
+++ b/tests/lib/AppTest.php
@@ -8,6 +8,7 @@
*/
namespace Test;
+
use OC\AppConfig;
use OCP\IAppConfig;
@@ -24,7 +25,7 @@ class AppTest extends \Test\TestCase {
const TEST_GROUP1 = 'group1';
const TEST_GROUP2 = 'group2';
- function appVersionsProvider() {
+ public function appVersionsProvider() {
return array(
// exact match
array(
@@ -338,7 +339,7 @@ class AppTest extends \Test\TestCase {
/**
* Providers for the app config values
*/
- function appConfigValuesProvider() {
+ public function appConfigValuesProvider() {
return array(
// logged in user1
array(
@@ -561,27 +562,30 @@ class AppTest extends \Test\TestCase {
/**
* Providers for the app data values
*/
- function appDataProvider() {
+ public function appDataProvider() {
return [
[
['description' => " \t This is a multiline \n test with \n \t \n \n some new lines "],
- ['description' => "This is a multiline test with\n\nsome new lines"]
+ ['description' => "This is a multiline \n test with \n \t \n \n some new lines"],
],
[
['description' => " \t This is a multiline \n test with \n \t some new lines "],
- ['description' => "This is a multiline test with some new lines"]
+ ['description' => "This is a multiline \n test with \n \t some new lines"],
],
[
['description' => hex2bin('5065726d657420646520732761757468656e7469666965722064616e732070697769676f20646972656374656d656e74206176656320736573206964656e74696669616e7473206f776e636c6f75642073616e73206c65732072657461706572206574206d657420c3a0206a6f757273206365757820636920656e20636173206465206368616e67656d656e74206465206d6f742064652070617373652e0d0a0d')],
- ['description' => "Permet de s'authentifier dans piwigo directement avec ses identifiants owncloud sans les retaper et met à jours ceux ci en cas de changement de mot de passe."]
+ ['description' => "Permet de s'authentifier dans piwigo directement avec ses identifiants owncloud sans les retaper et met à jours ceux ci en cas de changement de mot de passe."],
],
[
['not-a-description' => " \t This is a multiline \n test with \n \t some new lines "],
- ['not-a-description' => " \t This is a multiline \n test with \n \t some new lines "]
+ [
+ 'not-a-description' => " \t This is a multiline \n test with \n \t some new lines ",
+ 'description' => '',
+ ],
],
[
['description' => [100, 'bla']],
- ['description' => ""]
+ ['description' => ''],
],
];
}
diff --git a/tests/lib/Authentication/LoginCredentials/CredentialsTest.php b/tests/lib/Authentication/LoginCredentials/CredentialsTest.php
new file mode 100644
index 00000000000..308ccafb151
--- /dev/null
+++ b/tests/lib/Authentication/LoginCredentials/CredentialsTest.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Authentication\LoginCredentials;
+
+use OC\Authentication\LoginCredentials\Credentials;
+use Test\TestCase;
+
+class CredentialsTest extends TestCase {
+
+ /** @var string */
+ private $uid;
+
+ /** @var string */
+ private $user;
+
+ /** @var string */
+ private $password;
+
+ /** @var Credentials */
+ private $credentials;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->uid = 'user123';
+ $this->user = 'User123';
+ $this->password = '123456';
+
+ $this->credentials = new Credentials($this->uid, $this->user, $this->password);
+ }
+
+ public function testGetUID() {
+ $this->assertEquals($this->uid, $this->credentials->getUID());
+ }
+
+ public function testGetUserName() {
+ $this->assertEquals($this->user, $this->credentials->getLoginName());
+ }
+
+ public function testGetPassword() {
+ $this->assertEquals($this->password, $this->credentials->getPassword());
+ }
+
+}
diff --git a/tests/lib/Authentication/LoginCredentials/StoreTest.php b/tests/lib/Authentication/LoginCredentials/StoreTest.php
new file mode 100644
index 00000000000..9a719339b43
--- /dev/null
+++ b/tests/lib/Authentication/LoginCredentials/StoreTest.php
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Authentication\LoginCredentials;
+
+use OC\Authentication\Exceptions\InvalidTokenException;
+use OC\Authentication\Exceptions\PasswordlessTokenException;
+use OC\Authentication\LoginCredentials\Credentials;
+use OC\Authentication\LoginCredentials\Store;
+use OC\Authentication\Token\IProvider;
+use OC\Authentication\Token\IToken;
+use OCP\Authentication\Exceptions\CredentialsUnavailableException;
+use OCP\ILogger;
+use OCP\ISession;
+use OCP\Session\Exceptions\SessionNotAvailableException;
+use PHPUnit_Framework_MockObject_MockObject;
+use Test\TestCase;
+
+class StoreTest extends TestCase {
+
+ /** @var ISession|PHPUnit_Framework_MockObject_MockObject */
+ private $session;
+
+ /** @var IProvider|PHPUnit_Framework_MockObject_MockObject */
+ private $tokenProvider;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ /** @var Store */
+ private $store;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->session = $this->createMock(ISession::class);
+ $this->tokenProvider = $this->createMock(IProvider::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->store = new Store($this->session, $this->logger, $this->tokenProvider);
+ }
+
+ public function testAuthenticate() {
+ $params = [
+ 'run' => true,
+ 'uid' => 'user123',
+ 'password' => 123456,
+ ];
+
+ $this->session->expects($this->once())
+ ->method('set')
+ ->with($this->equalTo('login_credentials'), $this->equalTo(json_encode($params)));
+
+ $this->store->authenticate($params);
+ }
+
+ public function testSetSession() {
+ $session = $this->createMock(ISession::class);
+
+ $this->store->setSession($session);
+ }
+
+ public function testGetLoginCredentialsNoTokenProvider() {
+ $this->store = new Store($this->session, $this->logger, null);
+
+ $this->expectException(CredentialsUnavailableException::class);
+
+ $this->store->getLoginCredentials();
+ }
+
+ public function testGetLoginCredentials() {
+ $uid = 'uid';
+ $user = 'user123';
+ $password = 'passme';
+ $token = $this->createMock(IToken::class);
+ $this->session->expects($this->once())
+ ->method('getId')
+ ->willReturn('sess2233');
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('sess2233')
+ ->willReturn($token);
+ $token->expects($this->once())
+ ->method('getUID')
+ ->willReturn($uid);
+ $token->expects($this->once())
+ ->method('getLoginName')
+ ->willReturn($user);
+ $this->tokenProvider->expects($this->once())
+ ->method('getPassword')
+ ->with($token, 'sess2233')
+ ->willReturn($password);
+ $expected = new Credentials($uid, $user, $password);
+
+ $creds = $this->store->getLoginCredentials();
+
+ $this->assertEquals($expected, $creds);
+ }
+
+ public function testGetLoginCredentialsSessionNotAvailable() {
+ $this->session->expects($this->once())
+ ->method('getId')
+ ->will($this->throwException(new SessionNotAvailableException()));
+ $this->expectException(CredentialsUnavailableException::class);
+
+ $this->store->getLoginCredentials();
+ }
+
+ public function testGetLoginCredentialsInvalidToken() {
+ $this->session->expects($this->once())
+ ->method('getId')
+ ->willReturn('sess2233');
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('sess2233')
+ ->will($this->throwException(new InvalidTokenException()));
+ $this->expectException(CredentialsUnavailableException::class);
+
+ $this->store->getLoginCredentials();
+ }
+
+ public function testGetLoginCredentialsInvalidTokenLoginCredentials() {
+ $uid = 'user987';
+ $password = '7389374';
+
+ $this->session->expects($this->once())
+ ->method('getId')
+ ->willReturn('sess2233');
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('sess2233')
+ ->will($this->throwException(new InvalidTokenException()));
+ $this->session->expects($this->once())
+ ->method('exists')
+ ->with($this->equalTo('login_credentials'))
+ ->willReturn(true);
+ $this->session->expects($this->once())
+ ->method('get')
+ ->with($this->equalTo('login_credentials'))
+ ->willReturn('{"run":true,"uid":"user987","password":"7389374"}');
+ $expected = new Credentials('user987', 'user987', '7389374');
+
+ $actual = $this->store->getLoginCredentials();
+
+ $this->assertEquals($expected, $actual);
+ }
+
+ public function testGetLoginCredentialsPasswordlessToken() {
+ $this->session->expects($this->once())
+ ->method('getId')
+ ->willReturn('sess2233');
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('sess2233')
+ ->will($this->throwException(new PasswordlessTokenException()));
+ $this->expectException(CredentialsUnavailableException::class);
+
+ $this->store->getLoginCredentials();
+ }
+
+}
diff --git a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
index 52f3ca28500..1ea17f5d307 100644
--- a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
+++ b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
@@ -26,8 +26,11 @@ use Exception;
use OC;
use OC\App\AppManager;
use OC\Authentication\TwoFactorAuth\Manager;
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
use OCP\Authentication\TwoFactorAuth\IProvider;
use OCP\IConfig;
+use OCP\ILogger;
use OCP\ISession;
use OCP\IUser;
use Test\TestCase;
@@ -49,6 +52,12 @@ class ManagerTest extends TestCase {
/** @var IConfig|PHPUnit_Framework_MockObject_MockObject */
private $config;
+ /** @var IManager|PHPUnit_Framework_MockObject_MockObject */
+ private $activityManager;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
/** @var IProvider|PHPUnit_Framework_MockObject_MockObject */
private $fakeProvider;
@@ -59,14 +68,14 @@ class ManagerTest extends TestCase {
parent::setUp();
$this->user = $this->createMock(IUser::class);
- $this->appManager = $this->getMockBuilder('\OC\App\AppManager')
- ->disableOriginalConstructor()
- ->getMock();
+ $this->appManager = $this->createMock('\OC\App\AppManager');
$this->session = $this->createMock(ISession::class);
$this->config = $this->createMock(IConfig::class);
+ $this->activityManager = $this->createMock(IManager::class);
+ $this->logger = $this->createMock(ILogger::class);
$this->manager = $this->getMockBuilder('\OC\Authentication\TwoFactorAuth\Manager')
- ->setConstructorArgs([$this->appManager, $this->session, $this->config])
+ ->setConstructorArgs([$this->appManager, $this->session, $this->config, $this->activityManager, $this->logger])
->setMethods(['loadTwoFactorApp']) // Do not actually load the apps
->getMock();
@@ -228,6 +237,7 @@ class ManagerTest extends TestCase {
$this->prepareProviders();
$challenge = 'passme';
+ $event = $this->createMock(IEvent::class);
$this->fakeProvider->expects($this->once())
->method('verifyChallenge')
->with($this->user, $challenge)
@@ -242,6 +252,37 @@ class ManagerTest extends TestCase {
$this->session->expects($this->at(2))
->method('remove')
->with('two_factor_remember_login');
+ $this->activityManager->expects($this->once())
+ ->method('generateEvent')
+ ->willReturn($event);
+ $this->user->expects($this->any())
+ ->method('getUID')
+ ->willReturn('jos');
+ $event->expects($this->once())
+ ->method('setApp')
+ ->with($this->equalTo('twofactor_generic'))
+ ->willReturnSelf();
+ $event->expects($this->once())
+ ->method('setType')
+ ->with($this->equalTo('twofactor'))
+ ->willReturnSelf();
+ $event->expects($this->once())
+ ->method('setAuthor')
+ ->with($this->equalTo('jos'))
+ ->willReturnSelf();
+ $event->expects($this->once())
+ ->method('setAffectedUser')
+ ->with($this->equalTo('jos'))
+ ->willReturnSelf();
+ $this->fakeProvider->expects($this->once())
+ ->method('getDisplayName')
+ ->willReturn('Fake 2FA');
+ $event->expects($this->once())
+ ->method('setSubject')
+ ->with($this->equalTo('twofactor_success'), $this->equalTo([
+ 'provider' => 'Fake 2FA',
+ ]))
+ ->willReturnSelf();
$this->assertTrue($this->manager->verifyChallenge('email', $this->user, $challenge));
}
@@ -263,12 +304,44 @@ class ManagerTest extends TestCase {
$this->prepareProviders();
$challenge = 'dontpassme';
+ $event = $this->createMock(IEvent::class);
$this->fakeProvider->expects($this->once())
->method('verifyChallenge')
->with($this->user, $challenge)
->will($this->returnValue(false));
$this->session->expects($this->never())
->method('remove');
+ $this->activityManager->expects($this->once())
+ ->method('generateEvent')
+ ->willReturn($event);
+ $this->user->expects($this->any())
+ ->method('getUID')
+ ->willReturn('jos');
+ $event->expects($this->once())
+ ->method('setApp')
+ ->with($this->equalTo('twofactor_generic'))
+ ->willReturnSelf();
+ $event->expects($this->once())
+ ->method('setType')
+ ->with($this->equalTo('twofactor'))
+ ->willReturnSelf();
+ $event->expects($this->once())
+ ->method('setAuthor')
+ ->with($this->equalTo('jos'))
+ ->willReturnSelf();
+ $event->expects($this->once())
+ ->method('setAffectedUser')
+ ->with($this->equalTo('jos'))
+ ->willReturnSelf();
+ $this->fakeProvider->expects($this->once())
+ ->method('getDisplayName')
+ ->willReturn('Fake 2FA');
+ $event->expects($this->once())
+ ->method('setSubject')
+ ->with($this->equalTo('twofactor_failed'), $this->equalTo([
+ 'provider' => 'Fake 2FA',
+ ]))
+ ->willReturnSelf();
$this->assertFalse($this->manager->verifyChallenge('email', $this->user, $challenge));
}
diff --git a/tests/lib/Command/Integrity/SignAppTest.php b/tests/lib/Command/Integrity/SignAppTest.php
index 71d9946ee88..013290b56e9 100644
--- a/tests/lib/Command/Integrity/SignAppTest.php
+++ b/tests/lib/Command/Integrity/SignAppTest.php
@@ -29,13 +29,13 @@ use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
class SignAppTest extends TestCase {
- /** @var Checker */
+ /** @var Checker|\PHPUnit_Framework_MockObject_MockObject */
private $checker;
/** @var SignApp */
private $signApp;
- /** @var FileAccessHelper */
+ /** @var FileAccessHelper|\PHPUnit_Framework_MockObject_MockObject */
private $fileAccessHelper;
- /** @var IURLGenerator */
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
private $urlGenerator;
public function setUp() {
@@ -75,7 +75,7 @@ class SignAppTest extends TestCase {
->method('writeln')
->with('This command requires the --path, --privateKey and --certificate.');
- $this->invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecuteWithMissingPrivateKey() {
@@ -103,7 +103,7 @@ class SignAppTest extends TestCase {
->method('writeln')
->with('This command requires the --path, --privateKey and --certificate.');
- $this->invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecuteWithMissingCertificate() {
@@ -131,7 +131,7 @@ class SignAppTest extends TestCase {
->method('writeln')
->with('This command requires the --path, --privateKey and --certificate.');
- $this->invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecuteWithNotExistingPrivateKey() {
@@ -165,7 +165,7 @@ class SignAppTest extends TestCase {
->method('writeln')
->with('Private key "privateKey" does not exists.');
- $this->invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecuteWithNotExistingCertificate() {
@@ -204,7 +204,51 @@ class SignAppTest extends TestCase {
->method('writeln')
->with('Certificate "certificate" does not exists.');
- $this->invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]));
+ }
+
+ public function testExecuteWithException() {
+ $inputInterface = $this->createMock(InputInterface::class);
+ $outputInterface = $this->createMock(OutputInterface::class);
+
+ $inputInterface
+ ->expects($this->at(0))
+ ->method('getOption')
+ ->with('path')
+ ->will($this->returnValue('AppId'));
+ $inputInterface
+ ->expects($this->at(1))
+ ->method('getOption')
+ ->with('privateKey')
+ ->will($this->returnValue('privateKey'));
+ $inputInterface
+ ->expects($this->at(2))
+ ->method('getOption')
+ ->with('certificate')
+ ->will($this->returnValue('certificate'));
+
+ $this->fileAccessHelper
+ ->expects($this->at(0))
+ ->method('file_get_contents')
+ ->with('privateKey')
+ ->will($this->returnValue(\OC::$SERVERROOT . '/tests/data/integritycheck/core.key'));
+ $this->fileAccessHelper
+ ->expects($this->at(1))
+ ->method('file_get_contents')
+ ->with('certificate')
+ ->will($this->returnValue(\OC::$SERVERROOT . '/tests/data/integritycheck/core.crt'));
+
+ $this->checker
+ ->expects($this->once())
+ ->method('writeAppSignature')
+ ->willThrowException(new \Exception('My error message'));
+
+ $outputInterface
+ ->expects($this->at(0))
+ ->method('writeln')
+ ->with('Error: My error message');
+
+ $this->assertSame(1, self::invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecute() {
@@ -247,6 +291,6 @@ class SignAppTest extends TestCase {
->method('writeln')
->with('Successfully signed "AppId"');
- $this->invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertSame(0, self::invokePrivate($this->signApp, 'execute', [$inputInterface, $outputInterface]));
}
}
diff --git a/tests/lib/Command/Integrity/SignCoreTest.php b/tests/lib/Command/Integrity/SignCoreTest.php
index f3c242ae9fb..35e52b951da 100644
--- a/tests/lib/Command/Integrity/SignCoreTest.php
+++ b/tests/lib/Command/Integrity/SignCoreTest.php
@@ -28,12 +28,12 @@ use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
class SignCoreTest extends TestCase {
- /** @var Checker */
+ /** @var Checker|\PHPUnit_Framework_MockObject_MockObject */
private $checker;
+ /** @var FileAccessHelper|\PHPUnit_Framework_MockObject_MockObject */
+ private $fileAccessHelper;
/** @var SignCore */
private $signCore;
- /** @var FileAccessHelper */
- private $fileAccessHelper;
public function setUp() {
parent::setUp();
@@ -65,7 +65,7 @@ class SignCoreTest extends TestCase {
->method('writeln')
->with('--privateKey, --certificate and --path are required.');
- $this->invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecuteWithMissingCertificate() {
@@ -88,7 +88,7 @@ class SignCoreTest extends TestCase {
->method('writeln')
->with('--privateKey, --certificate and --path are required.');
- $this->invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecuteWithNotExistingPrivateKey() {
@@ -122,7 +122,7 @@ class SignCoreTest extends TestCase {
->method('writeln')
->with('Private key "privateKey" does not exists.');
- $this->invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecuteWithNotExistingCertificate() {
@@ -161,7 +161,51 @@ class SignCoreTest extends TestCase {
->method('writeln')
->with('Certificate "certificate" does not exists.');
- $this->invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertNull(self::invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]));
+ }
+
+ public function testExecuteWithException() {
+ $inputInterface = $this->createMock(InputInterface::class);
+ $outputInterface = $this->createMock(OutputInterface::class);
+
+ $inputInterface
+ ->expects($this->at(0))
+ ->method('getOption')
+ ->with('privateKey')
+ ->will($this->returnValue('privateKey'));
+ $inputInterface
+ ->expects($this->at(1))
+ ->method('getOption')
+ ->with('certificate')
+ ->will($this->returnValue('certificate'));
+ $inputInterface
+ ->expects($this->at(2))
+ ->method('getOption')
+ ->with('path')
+ ->will($this->returnValue('certificate'));
+
+ $this->fileAccessHelper
+ ->expects($this->at(0))
+ ->method('file_get_contents')
+ ->with('privateKey')
+ ->will($this->returnValue(\OC::$SERVERROOT . '/tests/data/integritycheck/core.key'));
+ $this->fileAccessHelper
+ ->expects($this->at(1))
+ ->method('file_get_contents')
+ ->with('certificate')
+ ->will($this->returnValue(\OC::$SERVERROOT . '/tests/data/integritycheck/core.crt'));
+
+ $this->checker
+ ->expects($this->once())
+ ->method('writeCoreSignature')
+ ->willThrowException(new \Exception('My exception message'));
+
+ $outputInterface
+ ->expects($this->at(0))
+ ->method('writeln')
+ ->with('Error: My exception message');
+
+ $this->assertEquals(1, self::invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]));
}
public function testExecute() {
@@ -204,6 +248,6 @@ class SignCoreTest extends TestCase {
->method('writeln')
->with('Successfully signed "core"');
- $this->invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]);
+ $this->assertEquals(0, self::invokePrivate($this->signCore, 'execute', [$inputInterface, $outputInterface]));
}
}
diff --git a/tests/lib/DB/DBSchemaTest.php b/tests/lib/DB/DBSchemaTest.php
index ba17546a34a..8eb7fcf81b4 100644
--- a/tests/lib/DB/DBSchemaTest.php
+++ b/tests/lib/DB/DBSchemaTest.php
@@ -10,6 +10,7 @@ namespace Test\DB;
use Doctrine\DBAL\Platforms\SqlitePlatform;
use OC_DB;
+use OCP\ITempManager;
use OCP\Security\ISecureRandom;
use Test\TestCase;
@@ -19,14 +20,20 @@ use Test\TestCase;
* @group DB
*/
class DBSchemaTest extends TestCase {
- protected $schema_file = 'static://test_db_scheme';
- protected $schema_file2 = 'static://test_db_scheme2';
+ protected $schema_file;
+ protected $schema_file2;
protected $table1;
protected $table2;
+ /** @var ITempManager */
+ protected $tempManager;
protected function setUp() {
parent::setUp();
+ $this->tempManager = \OC::$server->getTempManager();
+ $this->schema_file = $this->tempManager->getTemporaryFile();
+ $this->schema_file2 = $this->tempManager->getTemporaryFile();
+
$dbfile = \OC::$SERVERROOT.'/tests/data/db_structure.xml';
$dbfile2 = \OC::$SERVERROOT.'/tests/data/db_structure2.xml';
@@ -73,7 +80,7 @@ class DBSchemaTest extends TestCase {
}
public function doTestSchemaDumping() {
- $outfile = 'static://db_out.xml';
+ $outfile = $this->tempManager->getTemporaryFile();
OC_DB::getDbStructure($outfile);
$content = file_get_contents($outfile);
$this->assertContains($this->table1, $content);
diff --git a/tests/lib/DB/LegacyDBTest.php b/tests/lib/DB/LegacyDBTest.php
index f3de570c52d..3cf40228225 100644
--- a/tests/lib/DB/LegacyDBTest.php
+++ b/tests/lib/DB/LegacyDBTest.php
@@ -18,9 +18,14 @@ use OC_DB;
class LegacyDBTest extends \Test\TestCase {
protected $backupGlobals = FALSE;
- protected static $schema_file = 'static://test_db_scheme';
+ protected static $schema_file;
protected $test_prefix;
+ public static function setUpBeforeClass() {
+ self::$schema_file = \OC::$server->getTempManager()->getTemporaryFile();
+ }
+
+
/**
* @var string
*/
diff --git a/tests/lib/DB/SchemaDiffTest.php b/tests/lib/DB/SchemaDiffTest.php
index b7bb3c2a9cb..88c9abeb431 100644
--- a/tests/lib/DB/SchemaDiffTest.php
+++ b/tests/lib/DB/SchemaDiffTest.php
@@ -47,9 +47,13 @@ class SchemaDiffTest extends TestCase {
/** @var string */
private $testPrefix;
+ private $schemaFile;
+
protected function setUp() {
parent::setUp();
+ $this->schemaFile = \OC::$server->getTempManager()->getTemporaryFile();
+
$this->config = \OC::$server->getConfig();
$this->connection = \OC::$server->getDatabaseConnection();
$this->manager = new MDB2SchemaManager($this->connection);
@@ -57,7 +61,7 @@ class SchemaDiffTest extends TestCase {
}
protected function tearDown() {
- $this->manager->removeDBStructure('static://test_db_scheme');
+ $this->manager->removeDBStructure($this->schemaFile);
parent::tearDown();
}
@@ -68,7 +72,7 @@ class SchemaDiffTest extends TestCase {
public function testZeroChangeOnSchemaMigrations($xml) {
$xml = str_replace( '*dbprefix*', $this->testPrefix, $xml );
- $schemaFile = 'static://test_db_scheme';
+ $schemaFile = $this->schemaFile;
file_put_contents($schemaFile, $xml);
// apply schema
diff --git a/tests/lib/Encryption/Keys/StorageTest.php b/tests/lib/Encryption/Keys/StorageTest.php
index b5b91f886a3..4e9719351f3 100644
--- a/tests/lib/Encryption/Keys/StorageTest.php
+++ b/tests/lib/Encryption/Keys/StorageTest.php
@@ -510,4 +510,47 @@ class StorageTest extends TestCase {
];
}
+
+ /**
+ * @dataProvider dataTestBackupUserKeys
+ * @param bool $createBackupDir
+ */
+ public function testBackupUserKeys($createBackupDir) {
+
+ $storage = $this->getMockBuilder('OC\Encryption\Keys\Storage')
+ ->setConstructorArgs([$this->view, $this->util])
+ ->setMethods(['getTimestamp'])
+ ->getMock();
+
+ $storage->expects($this->any())->method('getTimestamp')->willReturn('1234567');
+
+ $this->view->expects($this->once())->method('file_exists')
+ ->with('user1/files_encryption/backup')->willReturn(!$createBackupDir);
+
+ if ($createBackupDir) {
+ $this->view->expects($this->at(1))->method('mkdir')
+ ->with('user1/files_encryption/backup');
+ $this->view->expects($this->at(2))->method('mkdir')
+ ->with('user1/files_encryption/backup/test.encryptionModule.1234567');
+ } else {
+ $this->view->expects($this->once())->method('mkdir')
+ ->with('user1/files_encryption/backup/test.encryptionModule.1234567');
+ }
+
+ $this->view->expects($this->once())->method('copy')
+ ->with(
+ 'user1/files_encryption/encryptionModule',
+ 'user1/files_encryption/backup/test.encryptionModule.1234567'
+ )->willReturn(true);
+
+ $this->assertTrue($storage->backupUserKeys('encryptionModule', 'test', 'user1'));
+
+ }
+
+ public function dataTestBackupUserKeys() {
+ return [
+ [true], [false]
+ ];
+ }
+
}
diff --git a/tests/lib/Files/FilesystemTest.php b/tests/lib/Files/FilesystemTest.php
index dd4785ecf09..1eb6c4fc54b 100644
--- a/tests/lib/Files/FilesystemTest.php
+++ b/tests/lib/Files/FilesystemTest.php
@@ -414,11 +414,9 @@ class FilesystemTest extends \Test\TestCase {
$homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
$this->assertTrue($homeMount->instanceOfStorage('\OCP\Files\IHomeStorage'));
- if (getenv('RUN_OBJECTSTORE_TESTS')) {
- $this->assertTrue($homeMount->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage'));
+ if ($homeMount->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage')) {
$this->assertEquals('object::user:' . $userId, $homeMount->getId());
- } else {
- $this->assertTrue($homeMount->instanceOfStorage('\OC\Files\Storage\Home'));
+ } else if ($homeMount->instanceOfStorage('\OC\Files\Storage\Home')) {
$this->assertEquals('home::' . $userId, $homeMount->getId());
}
@@ -426,37 +424,6 @@ class FilesystemTest extends \Test\TestCase {
if ($user !== null) { $user->delete(); }
}
- /**
- * Tests that the home storage is used in legacy mode
- * for the user's mount point
- */
- public function testLegacyHomeMount() {
- if (getenv('RUN_OBJECTSTORE_TESTS')) {
- $this->markTestSkipped('legacy storage unrelated to objectstore environments');
- }
- $datadir = \OC::$server->getConfig()->getSystemValue("datadirectory", \OC::$SERVERROOT . "/data");
- $userId = $this->getUniqueID('user_');
-
- // insert storage into DB by constructing it
- // to make initMountsPoint find its existence
- $localStorage = new \OC\Files\Storage\Local(array('datadir' => $datadir . '/' . $userId . '/'));
- // this will trigger the insert
- $cache = $localStorage->getCache();
-
- \OC::$server->getUserManager()->createUser($userId, $userId);
- \OC\Files\Filesystem::initMountPoints($userId);
-
- $homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
-
- $this->assertTrue($homeMount->instanceOfStorage('\OC\Files\Storage\Home'));
- $this->assertEquals('local::' . $datadir . '/' . $userId . '/', $homeMount->getId());
-
- $user = \OC::$server->getUserManager()->get($userId);
- if ($user !== null) { $user->delete(); }
- // delete storage entry
- $cache->clear();
- }
-
public function dummyHook($arguments) {
$path = $arguments['path'];
$this->assertEquals($path, \OC\Files\Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized
diff --git a/tests/lib/Files/Node/FileTest.php b/tests/lib/Files/Node/FileTest.php
index 823e3b50249..a17cc1d1a3a 100644
--- a/tests/lib/Files/Node/FileTest.php
+++ b/tests/lib/Files/Node/FileTest.php
@@ -8,161 +8,28 @@
namespace Test\Files\Node;
-use OC\Files\FileInfo;
-use OCP\Files\NotFoundException;
-use OCP\ILogger;
-use OCP\IUserManager;
-
-class FileTest extends \Test\TestCase {
- /** @var \OC\User\User */
- private $user;
- /** @var \OC\Files\Mount\Manager */
- private $manager;
- /** @var \OC\Files\View|\PHPUnit_Framework_MockObject_MockObject */
- private $view;
- /** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */
- private $userMountCache;
- /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
- private $logger;
- /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
- private $userManager;
-
- protected function setUp() {
- parent::setUp();
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
- $this->user = new \OC\User\User('', new \Test\Util\User\Dummy, null, $config);
- $this->manager = $this->getMockBuilder('\OC\Files\Mount\Manager')
- ->disableOriginalConstructor()
- ->getMock();
- $this->view = $this->getMockBuilder('\OC\Files\View')
- ->disableOriginalConstructor()
- ->getMock();
- $this->userMountCache = $this->getMockBuilder('\OCP\Files\Config\IUserMountCache')
- ->disableOriginalConstructor()
- ->getMock();
- $this->logger = $this->createMock(ILogger::class);
- $this->userManager = $this->createMock(IUserManager::class);
- }
-
- protected function getMockStorage() {
- $storage = $this->getMockBuilder('\OCP\Files\Storage')
- ->getMock();
- $storage->expects($this->any())
- ->method('getId')
- ->will($this->returnValue('home::someuser'));
- return $storage;
+/**
+ * Class FileTest
+ *
+ * @group DB
+ *
+ * @package Test\Files\Node
+ */
+class FileTest extends NodeTest {
+ protected function createTestNode($root, $view, $path) {
+ return new \OC\Files\Node\File($root, $view, $path);
}
- protected function getFileInfo($data) {
- return new FileInfo('', $this->getMockStorage(), '', $data, null);
+ protected function getNodeClass() {
+ return '\OC\Files\Node\File';
}
- public function testDelete() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $root->expects($this->exactly(2))
- ->method('emit')
- ->will($this->returnValue(true));
- $root->expects($this->any())
- ->method('getUser')
- ->will($this->returnValue($this->user));
-
- $this->view->expects($this->once())
- ->method('getFileInfo')
- ->with('/bar/foo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
-
- $this->view->expects($this->once())
- ->method('unlink')
- ->with('/bar/foo')
- ->will($this->returnValue(true));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $node->delete();
- }
-
- public function testDeleteHooks() {
- $test = $this;
- $hooksRun = 0;
- /**
- * @param \OC\Files\Node\File $node
- */
- $preListener = function ($node) use (&$test, &$hooksRun) {
- $test->assertInstanceOf('\OC\Files\Node\File', $node);
- $test->assertEquals('foo', $node->getInternalPath());
- $test->assertEquals('/bar/foo', $node->getPath());
- $test->assertEquals(1, $node->getId());
- $hooksRun++;
- };
-
- /**
- * @param \OC\Files\Node\File $node
- */
- $postListener = function ($node) use (&$test, &$hooksRun) {
- $test->assertInstanceOf('\OC\Files\Node\NonExistingFile', $node);
- $test->assertEquals('foo', $node->getInternalPath());
- $test->assertEquals('/bar/foo', $node->getPath());
- $test->assertEquals(1, $node->getId());
- $test->assertEquals('text/plain', $node->getMimeType());
- $hooksRun++;
- };
-
- $root = new \OC\Files\Node\Root(
- $this->manager,
- $this->view,
- $this->user,
- $this->userMountCache,
- $this->logger,
- $this->userManager
- );
- $root->listen('\OC\Files', 'preDelete', $preListener);
- $root->listen('\OC\Files', 'postDelete', $postListener);
-
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->with('/bar/foo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1, 'mimetype' => 'text/plain'))));
-
- $this->view->expects($this->once())
- ->method('unlink')
- ->with('/bar/foo')
- ->will($this->returnValue(true));
-
- $this->view->expects($this->any())
- ->method('resolvePath')
- ->with('/bar/foo')
- ->will($this->returnValue(array(null, 'foo')));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $node->delete();
- $this->assertEquals(2, $hooksRun);
+ protected function getNonExistingNodeClass() {
+ return '\OC\Files\Node\NonExistingFile';
}
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testDeleteNotPermitted() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $root->expects($this->any())
- ->method('getUser')
- ->will($this->returnValue($this->user));
-
- $this->view->expects($this->once())
- ->method('getFileInfo')
- ->with('/bar/foo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $node->delete();
+ protected function getViewDeleteMethod() {
+ return 'unlink';
}
public function testGetContent() {
@@ -421,224 +288,5 @@ class FileTest extends \Test\TestCase {
$node->fopen('w');
}
- public function testCopySameStorage() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->any())
- ->method('copy')
- ->with('/bar/foo', '/bar/asd');
-
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3))));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
- $newNode = new \OC\Files\Node\File($root, $this->view, '/bar/asd');
-
- $root->expects($this->exactly(2))
- ->method('get')
- ->will($this->returnValueMap(array(
- array('/bar/asd', $newNode),
- array('/bar', $parentNode)
- )));
-
- $target = $node->copy('/bar/asd');
- $this->assertInstanceOf('\OC\Files\Node\File', $target);
- $this->assertEquals(3, $target->getId());
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testCopyNotPermitted() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- /**
- * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
- */
- $storage = $this->getMockBuilder('\OC\Files\Storage\Storage')
- ->disableOriginalConstructor()
- ->getMock();
-
- $root->expects($this->never())
- ->method('getMount');
-
- $storage->expects($this->never())
- ->method('copy');
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3))));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->will($this->returnValueMap(array(
- array('/bar', $parentNode)
- )));
-
- $node->copy('/bar/asd');
- }
-
- /**
- * @expectedException \OCP\Files\NotFoundException
- */
- public function testCopyNoParent() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->never())
- ->method('copy');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
-
- $root->expects($this->once())
- ->method('get')
- ->with('/bar/asd')
- ->will($this->throwException(new NotFoundException()));
-
- $node->copy('/bar/asd/foo');
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testCopyParentIsFile() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->never())
- ->method('copy');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\File($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->will($this->returnValueMap(array(
- array('/bar', $parentNode)
- )));
-
- $node->copy('/bar/asd');
- }
-
- public function testMoveSameStorage() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->any())
- ->method('rename')
- ->with('/bar/foo', '/bar/asd');
-
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
-
- $root->expects($this->any())
- ->method('get')
- ->will($this->returnValueMap(array(array('/bar', $parentNode), array('/bar/asd', $node))));
-
- $target = $node->move('/bar/asd');
- $this->assertInstanceOf('\OC\Files\Node\File', $target);
- $this->assertEquals(1, $target->getId());
- $this->assertEquals('/bar/asd', $node->getPath());
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testMoveNotPermitted() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
-
- $this->view->expects($this->never())
- ->method('rename');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->with('/bar')
- ->will($this->returnValue($parentNode));
-
- $node->move('/bar/asd');
- }
-
- /**
- * @expectedException \OCP\Files\NotFoundException
- */
- public function testMoveNoParent() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- /**
- * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
- */
- $storage = $this->getMockBuilder('\OC\Files\Storage\Storage')
- ->disableOriginalConstructor()
- ->getMock();
-
- $storage->expects($this->never())
- ->method('rename');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->with('/bar')
- ->will($this->throwException(new NotFoundException()));
-
- $node->move('/bar/asd');
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testMoveParentIsFile() {
- /** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject $root */
- $root = $this->getMockBuilder('\OC\Files\Node\Root')
- ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
-
- $this->view->expects($this->never())
- ->method('rename');
-
- $node = new \OC\Files\Node\File($root, $this->view, '/bar/foo');
- $parentNode = new \OC\Files\Node\File($root, $this->view, '/bar');
-
- $root->expects($this->once())
- ->method('get')
- ->with('/bar')
- ->will($this->returnValue($parentNode));
-
- $node->move('/bar/asd');
- }
}
diff --git a/tests/lib/Files/Node/FolderTest.php b/tests/lib/Files/Node/FolderTest.php
index dcfe6a1768c..ec043c7b81e 100644
--- a/tests/lib/Files/Node/FolderTest.php
+++ b/tests/lib/Files/Node/FolderTest.php
@@ -18,13 +18,11 @@ use OC\Files\Node\Node;
use OC\Files\Node\Root;
use OC\Files\Storage\Temporary;
use OC\Files\Storage\Wrapper\Jail;
+use OC\Files\View;
use OC\User\User;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
-use OC\Files\View;
use OCP\Files\Storage;
-use OCP\ILogger;
-use OCP\IUserManager;
/**
* Class FolderTest
@@ -33,152 +31,21 @@ use OCP\IUserManager;
*
* @package Test\Files\Node
*/
-class FolderTest extends \Test\TestCase {
- /** @var User */
- private $user;
- /** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */
- private $userMountCache;
- /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
- private $logger;
- /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
- private $userManager;
-
- protected function setUp() {
- parent::setUp();
- $this->user = new \OC\User\User('', new \Test\Util\User\Dummy);
- $this->userMountCache = $this->getMockBuilder('\OCP\Files\Config\IUserMountCache')
- ->disableOriginalConstructor()
- ->getMock();
- $this->logger = $this->createMock(ILogger::class);
- $this->userManager = $this->createMock(IUserManager::class);
+class FolderTest extends NodeTest {
+ protected function createTestNode($root, $view, $path) {
+ return new \OC\Files\Node\Folder($root, $view, $path);
}
- protected function getMockStorage() {
- $storage = $this->createMock(Storage::class);
- $storage->expects($this->any())
- ->method('getId')
- ->will($this->returnValue('home::someuser'));
- return $storage;
+ protected function getNodeClass() {
+ return '\OC\Files\Node\Folder';
}
- protected function getFileInfo($data) {
- return new FileInfo('', $this->getMockStorage(), '', $data, null);
+ protected function getNonExistingNodeClass() {
+ return '\OC\Files\Node\NonExistingFolder';
}
- public function testDelete() {
- $manager = $this->createMock(Manager::class);
- /**
- * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
- */
- $view = $this->createMock(View::class);
- $root = $this->getMockBuilder(Root::class)
- ->setConstructorArgs([$manager, $view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
- $root->expects($this->any())
- ->method('getUser')
- ->will($this->returnValue($this->user));
- $root->expects($this->exactly(2))
- ->method('emit')
- ->will($this->returnValue(true));
-
- $view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
-
- $view->expects($this->once())
- ->method('rmdir')
- ->with('/bar/foo')
- ->will($this->returnValue(true));
-
- $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
- $node->delete();
- }
-
- public function testDeleteHooks() {
- $test = $this;
- $hooksRun = 0;
- /**
- * @param \OC\Files\Node\File $node
- */
- $preListener = function ($node) use (&$test, &$hooksRun) {
- $test->assertInstanceOf('\OC\Files\Node\Folder', $node);
- $test->assertEquals('foo', $node->getInternalPath());
- $test->assertEquals('/bar/foo', $node->getPath());
- $hooksRun++;
- };
-
- /**
- * @param \OC\Files\Node\File $node
- */
- $postListener = function ($node) use (&$test, &$hooksRun) {
- $test->assertInstanceOf('\OC\Files\Node\NonExistingFolder', $node);
- $test->assertEquals('foo', $node->getInternalPath());
- $test->assertEquals('/bar/foo', $node->getPath());
- $test->assertEquals(1, $node->getId());
- $hooksRun++;
- };
-
- /**
- * @var \OC\Files\Mount\Manager $manager
- */
- $manager = $this->createMock(Manager::class);
- /**
- * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
- */
- $view = $this->createMock(View::class);
- $root = new \OC\Files\Node\Root(
- $manager,
- $view,
- $this->user,
- $this->userMountCache,
- $this->logger,
- $this->userManager
- );
- $root->listen('\OC\Files', 'preDelete', $preListener);
- $root->listen('\OC\Files', 'postDelete', $postListener);
-
- $view->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
-
- $view->expects($this->once())
- ->method('rmdir')
- ->with('/bar/foo')
- ->will($this->returnValue(true));
-
- $view->expects($this->any())
- ->method('resolvePath')
- ->with('/bar/foo')
- ->will($this->returnValue(array(null, 'foo')));
-
- $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
- $node->delete();
- $this->assertEquals(2, $hooksRun);
- }
-
- /**
- * @expectedException \OCP\Files\NotPermittedException
- */
- public function testDeleteNotPermitted() {
- $manager = $this->createMock(Manager::class);
- /**
- * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
- */
- $view = $this->createMock(View::class);
- $root = $this->getMockBuilder(Root::class)
- ->setConstructorArgs([$manager, $view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
- ->getMock();
- $root->expects($this->any())
- ->method('getUser')
- ->will($this->returnValue($this->user));
-
- $view->expects($this->once())
- ->method('getFileInfo')
- ->with('/bar/foo')
- ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
-
- $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
- $node->delete();
+ protected function getViewDeleteMethod() {
+ return 'rmdir';
}
public function testGetDirectoryContent() {
diff --git a/tests/lib/Files/Node/NodeTest.php b/tests/lib/Files/Node/NodeTest.php
index 1a3a0472e97..5e18caa2014 100644
--- a/tests/lib/Files/Node/NodeTest.php
+++ b/tests/lib/Files/Node/NodeTest.php
@@ -9,24 +9,34 @@
namespace Test\Files\Node;
use OC\Files\FileInfo;
+use OC\Files\View;
+use OCP\Files\Config\IUserMountCache;
+use OCP\Files\IRootFolder;
+use OCP\Files\Node;
use OCP\ILogger;
use OCP\IUserManager;
+use OCP\Files\NotFoundException;
-class NodeTest extends \Test\TestCase {
+/**
+ * Class NodeTest
+ *
+ * @package Test\Files\Node
+ */
+abstract class NodeTest extends \Test\TestCase {
/** @var \OC\User\User */
- private $user;
+ protected $user;
/** @var \OC\Files\Mount\Manager */
- private $manager;
+ protected $manager;
/** @var \OC\Files\View|\PHPUnit_Framework_MockObject_MockObject */
- private $view;
+ protected $view;
/** @var \OC\Files\Node\Root|\PHPUnit_Framework_MockObject_MockObject */
- private $root;
+ protected $root;
/** @var \OCP\Files\Config\IUserMountCache|\PHPUnit_Framework_MockObject_MockObject */
- private $userMountCache;
+ protected $userMountCache;
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
- private $logger;
+ protected $logger;
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
- private $userManager;
+ protected $userManager;
protected function setUp() {
parent::setUp();
@@ -54,6 +64,29 @@ class NodeTest extends \Test\TestCase {
->getMock();
}
+ /**
+ * @param IRootFolder $root
+ * @param View $view
+ * @param string $path
+ * @return Node
+ */
+ protected abstract function createTestNode($root, $view, $path);
+
+ /**
+ * @return string
+ */
+ protected abstract function getNodeClass();
+
+ /**
+ * @return string
+ */
+ protected abstract function getNonExistingNodeClass();
+
+ /**
+ * @return string
+ */
+ protected abstract function getViewDeleteMethod();
+
protected function getMockStorage() {
$storage = $this->getMockBuilder('\OCP\Files\Storage')
->disableOriginalConstructor()
@@ -68,6 +101,104 @@ class NodeTest extends \Test\TestCase {
return new FileInfo('', $this->getMockStorage(), '', $data, null);
}
+ public function testDelete() {
+ $this->root->expects($this->exactly(2))
+ ->method('emit')
+ ->will($this->returnValue(true));
+ $this->root->expects($this->any())
+ ->method('getUser')
+ ->will($this->returnValue($this->user));
+
+ $this->view->expects($this->once())
+ ->method('getFileInfo')
+ ->with('/bar/foo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL])));
+
+ $this->view->expects($this->once())
+ ->method($this->getViewDeleteMethod())
+ ->with('/bar/foo')
+ ->will($this->returnValue(true));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $node->delete();
+ }
+
+ public function testDeleteHooks() {
+ $test = $this;
+ $hooksRun = 0;
+ /**
+ * @param \OC\Files\Node\File $node
+ */
+ $preListener = function ($node) use (&$test, &$hooksRun) {
+ $test->assertInstanceOf($this->getNodeClass(), $node);
+ $test->assertEquals('foo', $node->getInternalPath());
+ $test->assertEquals('/bar/foo', $node->getPath());
+ $test->assertEquals(1, $node->getId());
+ $hooksRun++;
+ };
+
+ /**
+ * @param \OC\Files\Node\File $node
+ */
+ $postListener = function ($node) use (&$test, &$hooksRun) {
+ $test->assertInstanceOf($this->getNonExistingNodeClass(), $node);
+ $test->assertEquals('foo', $node->getInternalPath());
+ $test->assertEquals('/bar/foo', $node->getPath());
+ $test->assertEquals(1, $node->getId());
+ $test->assertEquals('text/plain', $node->getMimeType());
+ $hooksRun++;
+ };
+
+ $root = new \OC\Files\Node\Root(
+ $this->manager,
+ $this->view,
+ $this->user,
+ $this->userMountCache,
+ $this->logger,
+ $this->userManager
+ );
+
+ $root->listen('\OC\Files', 'preDelete', $preListener);
+ $root->listen('\OC\Files', 'postDelete', $postListener);
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->with('/bar/foo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1, 'mimetype' => 'text/plain'])));
+
+ $this->view->expects($this->once())
+ ->method($this->getViewDeleteMethod())
+ ->with('/bar/foo')
+ ->will($this->returnValue(true));
+
+ $this->view->expects($this->any())
+ ->method('resolvePath')
+ ->with('/bar/foo')
+ ->will($this->returnValue([null, 'foo']));
+
+ $node = $this->createTestNode($root, $this->view, '/bar/foo');
+ $node->delete();
+ $this->assertEquals(2, $hooksRun);
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testDeleteNotPermitted() {
+ $this->root->expects($this->any())
+ ->method('getUser')
+ ->will($this->returnValue($this->user));
+
+ $this->view->expects($this->once())
+ ->method('getFileInfo')
+ ->with('/bar/foo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $node->delete();
+ }
+
+
public function testStat() {
$this->root->expects($this->any())
->method('getUser')
@@ -86,7 +217,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals($stat, $node->stat());
}
@@ -107,7 +238,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals(1, $node->getId());
}
@@ -129,7 +260,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals(100, $node->getSize());
}
@@ -150,7 +281,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals('qwerty', $node->getEtag());
}
@@ -171,7 +302,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($stat));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals(50, $node->getMTime());
}
@@ -192,7 +323,7 @@ class NodeTest extends \Test\TestCase {
->will($this->returnValue(array($storage, 'foo')));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals($storage, $node->getStorage());
}
@@ -201,7 +332,7 @@ class NodeTest extends \Test\TestCase {
->method('getUser')
->will($this->returnValue($this->user));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals('/bar/foo', $node->getPath());
}
@@ -222,7 +353,7 @@ class NodeTest extends \Test\TestCase {
->will($this->returnValue(array($storage, 'foo')));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals('foo', $node->getInternalPath());
}
@@ -231,7 +362,7 @@ class NodeTest extends \Test\TestCase {
->method('getUser')
->will($this->returnValue($this->user));
- $node = new \OC\Files\Node\File($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$this->assertEquals('foo', $node->getName());
}
@@ -250,7 +381,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
- $node = new \OC\Files\Node\Node($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$node->touch(100);
$this->assertEquals(100, $node->getMTime());
}
@@ -302,7 +433,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
- $node = new \OC\Files\Node\Node($root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($root, $this->view, '/bar/foo');
$node->touch(100);
$this->assertEquals(2, $hooksRun);
}
@@ -320,7 +451,7 @@ class NodeTest extends \Test\TestCase {
->with('/bar/foo')
->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
- $node = new \OC\Files\Node\Node($this->root, $this->view, '/bar/foo');
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
$node->touch(100);
}
@@ -328,7 +459,312 @@ class NodeTest extends \Test\TestCase {
* @expectedException \OCP\Files\InvalidPathException
*/
public function testInvalidPath() {
- $node = new \OC\Files\Node\Node($this->root, $this->view, '/../foo');
+ $node = $this->createTestNode($this->root, $this->view, '/../foo');
$node->getFileInfo();
}
+
+ public function testCopySameStorage() {
+ $this->view->expects($this->any())
+ ->method('copy')
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(true));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+ $newNode = $this->createTestNode($this->root, $this->view, '/bar/asd');
+
+ $this->root->expects($this->exactly(2))
+ ->method('get')
+ ->will($this->returnValueMap([
+ ['/bar/asd', $newNode],
+ ['/bar', $parentNode]
+ ]));
+
+ $target = $node->copy('/bar/asd');
+ $this->assertInstanceOf($this->getNodeClass(), $target);
+ $this->assertEquals(3, $target->getId());
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testCopyNotPermitted() {
+ /**
+ * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
+ */
+ $storage = $this->createMock('\OC\Files\Storage\Storage');
+
+ $this->root->expects($this->never())
+ ->method('getMount');
+
+ $storage->expects($this->never())
+ ->method('copy');
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->will($this->returnValueMap([
+ ['/bar', $parentNode]
+ ]));
+
+ $node->copy('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotFoundException
+ */
+ public function testCopyNoParent() {
+ $this->view->expects($this->never())
+ ->method('copy');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->with('/bar/asd')
+ ->will($this->throwException(new NotFoundException()));
+
+ $node->copy('/bar/asd/foo');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testCopyParentIsFile() {
+ $this->view->expects($this->never())
+ ->method('copy');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\File($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->will($this->returnValueMap([
+ ['/bar', $parentNode]
+ ]));
+
+ $node->copy('/bar/asd');
+ }
+
+ public function testMoveSameStorage() {
+ $this->view->expects($this->any())
+ ->method('rename')
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(true));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->any())
+ ->method('get')
+ ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]]));
+
+ $target = $node->move('/bar/asd');
+ $this->assertInstanceOf($this->getNodeClass(), $target);
+ $this->assertEquals(1, $target->getId());
+ $this->assertEquals('/bar/asd', $node->getPath());
+ }
+
+ public function moveOrCopyProvider() {
+ return [
+ ['move', 'rename', 'preRename', 'postRename'],
+ ['copy', 'copy', 'preCopy', 'postCopy'],
+ ];
+ }
+
+ /**
+ * @dataProvider moveOrCopyProvider
+ * @param string $operationMethod
+ * @param string $viewMethod
+ * @param string $preHookName
+ * @param string $postHookName
+ */
+ public function testMoveCopyHooks($operationMethod, $viewMethod, $preHookName, $postHookName) {
+ /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject $root */
+ $root = $this->getMockBuilder('\OC\Files\Node\Root')
+ ->setConstructorArgs([$this->manager, $this->view, $this->user, $this->userMountCache, $this->logger, $this->userManager])
+ ->setMethods(['get'])
+ ->getMock();
+
+ $this->view->expects($this->any())
+ ->method($viewMethod)
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(true));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1])));
+
+ /**
+ * @var \OC\Files\Node\File|\PHPUnit_Framework_MockObject_MockObject $node
+ */
+ $node = $this->createTestNode($root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($root, $this->view, '/bar');
+ $targetTestNode = $this->createTestNode($root, $this->view, '/bar/asd');
+
+ $root->expects($this->any())
+ ->method('get')
+ ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $targetTestNode]]));
+
+ $hooksRun = 0;
+
+ $preListener = function (Node $sourceNode, Node $targetNode) use (&$hooksRun, $node) {
+ $this->assertSame($node, $sourceNode);
+ $this->assertInstanceOf($this->getNodeClass(), $sourceNode);
+ $this->assertInstanceOf($this->getNonExistingNodeClass(), $targetNode);
+ $this->assertEquals('/bar/asd', $targetNode->getPath());
+ $hooksRun++;
+ };
+
+ $postListener = function (Node $sourceNode, Node $targetNode) use (&$hooksRun, $node, $targetTestNode) {
+ $this->assertSame($node, $sourceNode);
+ $this->assertNotSame($node, $targetNode);
+ $this->assertSame($targetTestNode, $targetNode);
+ $this->assertInstanceOf($this->getNodeClass(), $sourceNode);
+ $this->assertInstanceOf($this->getNodeClass(), $targetNode);
+ $hooksRun++;
+ };
+
+ $preWriteListener = function (Node $targetNode) use (&$hooksRun) {
+ $this->assertInstanceOf($this->getNonExistingNodeClass(), $targetNode);
+ $this->assertEquals('/bar/asd', $targetNode->getPath());
+ $hooksRun++;
+ };
+
+ $postWriteListener = function (Node $targetNode) use (&$hooksRun, $targetTestNode) {
+ $this->assertSame($targetTestNode, $targetNode);
+ $hooksRun++;
+ };
+
+ $root->listen('\OC\Files', $preHookName, $preListener);
+ $root->listen('\OC\Files', 'preWrite', $preWriteListener);
+ $root->listen('\OC\Files', $postHookName, $postListener);
+ $root->listen('\OC\Files', 'postWrite', $postWriteListener);
+
+ $node->$operationMethod('/bar/asd');
+
+ $this->assertEquals(4, $hooksRun);
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testMoveNotPermitted() {
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_READ])));
+
+ $this->view->expects($this->never())
+ ->method('rename');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->with('/bar')
+ ->will($this->returnValue($parentNode));
+
+ $node->move('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotFoundException
+ */
+ public function testMoveNoParent() {
+ /**
+ * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
+ */
+ $storage = $this->createMock('\OC\Files\Storage\Storage');
+
+ $storage->expects($this->never())
+ ->method('rename');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->with('/bar')
+ ->will($this->throwException(new NotFoundException()));
+
+ $node->move('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testMoveParentIsFile() {
+ $this->view->expects($this->never())
+ ->method('rename');
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\File($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->once())
+ ->method('get')
+ ->with('/bar')
+ ->will($this->returnValue($parentNode));
+
+ $node->move('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testMoveFailed() {
+ $this->view->expects($this->any())
+ ->method('rename')
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(false));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->any())
+ ->method('get')
+ ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]]));
+
+ $node->move('/bar/asd');
+ }
+
+ /**
+ * @expectedException \OCP\Files\NotPermittedException
+ */
+ public function testCopyFailed() {
+ $this->view->expects($this->any())
+ ->method('copy')
+ ->with('/bar/foo', '/bar/asd')
+ ->will($this->returnValue(false));
+
+ $this->view->expects($this->any())
+ ->method('getFileInfo')
+ ->will($this->returnValue($this->getFileInfo(['permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1])));
+
+ $node = $this->createTestNode($this->root, $this->view, '/bar/foo');
+ $parentNode = new \OC\Files\Node\Folder($this->root, $this->view, '/bar');
+
+ $this->root->expects($this->any())
+ ->method('get')
+ ->will($this->returnValueMap([['/bar', $parentNode], ['/bar/asd', $node]]));
+
+ $node->copy('/bar/asd');
+ }
}
diff --git a/tests/lib/Files/ObjectStore/S3Test.php b/tests/lib/Files/ObjectStore/S3Test.php
index 10afb9a7aa8..b93e9beebdc 100644
--- a/tests/lib/Files/ObjectStore/S3Test.php
+++ b/tests/lib/Files/ObjectStore/S3Test.php
@@ -23,6 +23,9 @@ namespace Test\Files\ObjectStore;
use OC\Files\ObjectStore\S3;
+/**
+ * @group PRIMARY-s3
+ */
class S3Test extends ObjectStoreTest {
/**
* @return \OCP\Files\ObjectStore\IObjectStore
diff --git a/tests/lib/Files/Storage/HomeTest.php b/tests/lib/Files/Storage/HomeTest.php
index d9a1b11849e..e6899ff7d38 100644
--- a/tests/lib/Files/Storage/HomeTest.php
+++ b/tests/lib/Files/Storage/HomeTest.php
@@ -89,14 +89,6 @@ class HomeTest extends Storage {
}
/**
- * Tests that the legacy home id is in the format local::/path/to/datadir/user1/
- */
- public function testLegacyId() {
- $this->instance = new \OC\Files\Storage\Home(array('user' => $this->user, 'legacy' => true));
- $this->assertEquals('local::' . $this->tmpDir . '/', $this->instance->getId());
- }
-
- /**
* Tests that getCache() returns an instance of HomeCache
*/
public function testGetCacheReturnsHomeCache() {
diff --git a/tests/lib/Files/Stream/QuotaTest.php b/tests/lib/Files/Stream/QuotaTest.php
index d084f0c769c..24b0e7f9474 100644
--- a/tests/lib/Files/Stream/QuotaTest.php
+++ b/tests/lib/Files/Stream/QuotaTest.php
@@ -9,14 +9,11 @@
namespace Test\Files\Stream;
class QuotaTest extends \Test\TestCase {
- protected function tearDown() {
- \OC\Files\Stream\Quota::clear();
- parent::tearDown();
- }
/**
* @param string $mode
* @param integer $limit
+ * @return resource
*/
protected function getStream($mode, $limit) {
$source = fopen('php://temp', $mode);
diff --git a/tests/lib/Files/Stream/StaticStreamTest.php b/tests/lib/Files/Stream/StaticStreamTest.php
deleted file mode 100644
index 309291a3a5b..00000000000
--- a/tests/lib/Files/Stream/StaticStreamTest.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace Test\Files\Stream;
-
-class StaticStreamTest extends \Test\TestCase {
-
- private $sourceFile;
- private $sourceText;
-
- protected function setUp() {
- parent::setUp();
- $this->sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
- $this->sourceText = file_get_contents($this->sourceFile);
- }
-
- protected function tearDown() {
- \OC\Files\Stream\StaticStream::clear();
- parent::tearDown();
- }
-
- public function testContent() {
- file_put_contents('static://foo', $this->sourceText);
- $this->assertEquals($this->sourceText, file_get_contents('static://foo'));
- }
-
- public function testMultipleFiles() {
- file_put_contents('static://foo', $this->sourceText);
- file_put_contents('static://bar', strrev($this->sourceText));
- $this->assertEquals($this->sourceText, file_get_contents('static://foo'));
- $this->assertEquals(strrev($this->sourceText), file_get_contents('static://bar'));
- }
-
- public function testOverwrite() {
- file_put_contents('static://foo', $this->sourceText);
- file_put_contents('static://foo', 'qwerty');
- $this->assertEquals('qwerty', file_get_contents('static://foo'));
- }
-
- public function testIsFile() {
- $this->assertFalse(is_file('static://foo'));
- file_put_contents('static://foo', $this->sourceText);
- $this->assertTrue(is_file('static://foo'));
- }
-
- public function testIsDir() {
- $this->assertFalse(is_dir('static://foo'));
- file_put_contents('static://foo', $this->sourceText);
- $this->assertFalse(is_dir('static://foo'));
- }
-
- public function testFileType() {
- file_put_contents('static://foo', $this->sourceText);
- $this->assertEquals('file', filetype('static://foo'));
- }
-
- public function testUnlink() {
- $this->assertFalse(file_exists('static://foo'));
- file_put_contents('static://foo', $this->sourceText);
- $this->assertTrue(file_exists('static://foo'));
- unlink('static://foo');
- clearstatcache();
- $this->assertFalse(file_exists('static://foo'));
- }
-}
diff --git a/tests/lib/Files/Type/DetectionTest.php b/tests/lib/Files/Type/DetectionTest.php
index 87e0f94e3e2..5c1f48a806e 100644
--- a/tests/lib/Files/Type/DetectionTest.php
+++ b/tests/lib/Files/Type/DetectionTest.php
@@ -74,9 +74,13 @@ class DetectionTest extends \Test\TestCase {
$this->assertEquals('text/plain', $this->detection->detectPath('foo.txt'));
$this->assertEquals('image/png', $this->detection->detectPath('foo.png'));
$this->assertEquals('image/png', $this->detection->detectPath('foo.bar.png'));
+ $this->assertEquals('image/png', $this->detection->detectPath('.hidden.png'));
+ $this->assertEquals('image/png', $this->detection->detectPath('.hidden.foo.png'));
$this->assertEquals('image/png', $this->detection->detectPath('.hidden/foo.png'));
+ $this->assertEquals('image/png', $this->detection->detectPath('.hidden/.hidden.png'));
$this->assertEquals('image/png', $this->detection->detectPath('test.jpg/foo.png'));
$this->assertEquals('application/octet-stream', $this->detection->detectPath('.png'));
+ $this->assertEquals('application/octet-stream', $this->detection->detectPath('..hidden'));
$this->assertEquals('application/octet-stream', $this->detection->detectPath('foo'));
$this->assertEquals('application/octet-stream', $this->detection->detectPath(''));
}
diff --git a/tests/lib/Files/Utils/ScannerTest.php b/tests/lib/Files/Utils/ScannerTest.php
index 7895331d615..1379bc2e906 100644
--- a/tests/lib/Files/Utils/ScannerTest.php
+++ b/tests/lib/Files/Utils/ScannerTest.php
@@ -11,6 +11,7 @@ namespace Test\Files\Utils;
use OC\Files\Filesystem;
use OC\Files\Mount\MountPoint;
use OC\Files\Storage\Temporary;
+use OCA\Files_Sharing\SharedStorage;
use OCP\Files\Config\IMountProvider;
use OCP\Files\Storage\IStorageFactory;
use OCP\IUser;
@@ -188,4 +189,24 @@ class ScannerTest extends \Test\TestCase {
$this->assertNotEquals($oldRoot->getEtag(), $newRoot->getEtag());
}
+
+ public function testSkipLocalShares() {
+ $sharedStorage = $this->createMock(SharedStorage::class);
+ $sharedMount = new MountPoint($sharedStorage, '/share');
+ Filesystem::getMountManager()->addMount($sharedMount);
+
+ $sharedStorage->expects($this->any())
+ ->method('instanceOfStorage')
+ ->will($this->returnValueMap([
+ [SharedStorage::class, true],
+ ]));
+ $sharedStorage->expects($this->never())
+ ->method('getScanner');
+
+ $scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
+ $scanner->addMount($sharedMount);
+ $scanner->scan('');
+
+ $scanner->backgroundScan('');
+ }
}
diff --git a/tests/lib/Group/ManagerTest.php b/tests/lib/Group/ManagerTest.php
index ece99eb569d..1a7ced5f1ba 100644
--- a/tests/lib/Group/ManagerTest.php
+++ b/tests/lib/Group/ManagerTest.php
@@ -1,52 +1,91 @@
<?php
/**
- * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
+ * @author Robin Appelman <icewind@owncloud.com>
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ * @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/>
+ *
*/
-
namespace Test\Group;
use OC\User\Manager;
-use OC\User\User;
+use OCP\IUser;
+use OCP\GroupInterface;
class ManagerTest extends \Test\TestCase {
- /** @var Manager */
- private $userManager;
+ /** @var Manager|\PHPUnit_Framework_MockObject_MockObject $userManager */
+ protected $userManager;
- public function setUp() {
+ protected function setUp() {
parent::setUp();
- $this->userManager = $this->getMockBuilder('\OC\User\Manager')
- ->disableOriginalConstructor()
- ->getMock();
+ $this->userManager = $this->createMock(Manager::class);
}
- /**
- * @param string $uid
- * @param \OC\User\Backend $backend
- * @return User
- */
- private function newUser($uid, $backend) {
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
- $urlgenerator = $this->getMockBuilder('\OCP\IURLGenerator')
- ->disableOriginalConstructor()
- ->getMock();
+ private function getTestUser($userId) {
+ $mockUser = $this->createMock(IUser::class);
+ $mockUser->expects($this->any())
+ ->method('getUID')
+ ->will($this->returnValue($userId));
+ $mockUser->expects($this->any())
+ ->method('getDisplayName')
+ ->will($this->returnValue($userId));
+ return $mockUser;
+ }
- return new User($uid, $backend, null, $config, $urlgenerator);
+ private function getTestBackend($implementedActions = null) {
+ if (is_null($implementedActions)) {
+ $implementedActions =
+ GroupInterface::ADD_TO_GROUP |
+ GroupInterface::REMOVE_FROM_GOUP |
+ GroupInterface::COUNT_USERS |
+ GroupInterface::CREATE_GROUP |
+ GroupInterface::DELETE_GROUP;
+ }
+ // need to declare it this way due to optional methods
+ // thanks to the implementsActions logic
+ $backend = $this->getMockBuilder(\OCP\GroupInterface::class)
+ ->disableOriginalConstructor()
+ ->setMethods([
+ 'getGroupDetails',
+ 'implementsActions',
+ 'getUserGroups',
+ 'inGroup',
+ 'getGroups',
+ 'groupExists',
+ 'usersInGroup',
+ 'createGroup',
+ 'addToGroup',
+ 'removeFromGroup',
+ ])
+ ->getMock();
+ $backend->expects($this->any())
+ ->method('implementsActions')
+ ->will($this->returnCallback(function($actions) use ($implementedActions) {
+ return (bool)($actions & $implementedActions);
+ }));
+ return $backend;
}
-
+
public function testGet() {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->any())
->method('groupExists')
->with('group1')
@@ -70,9 +109,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->once())
->method('groupExists')
->with('group1')
@@ -100,9 +137,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
*/
- $backend1 = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend1 = $this->getTestBackend();
$backend1->expects($this->any())
->method('groupExists')
->with('group1')
@@ -111,9 +146,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend2
*/
- $backend2 = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend2 = $this->getTestBackend();
$backend2->expects($this->any())
->method('groupExists')
->with('group1')
@@ -133,9 +166,7 @@ class ManagerTest extends \Test\TestCase {
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
$backendGroupCreated = false;
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->any())
->method('groupExists')
->with('group1')
@@ -143,9 +174,6 @@ class ManagerTest extends \Test\TestCase {
return $backendGroupCreated;
}));
$backend->expects($this->once())
- ->method('implementsActions')
- ->will($this->returnValue(true));
- $backend->expects($this->once())
->method('createGroup')
->will($this->returnCallback(function () use (&$backendGroupCreated) {
$backendGroupCreated = true;
@@ -162,9 +190,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->any())
->method('groupExists')
->with('group1')
@@ -183,9 +209,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->once())
->method('getGroups')
->with('1')
@@ -208,9 +232,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
*/
- $backend1 = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend1 = $this->getTestBackend();
$backend1->expects($this->once())
->method('getGroups')
->with('1')
@@ -222,9 +244,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend2
*/
- $backend2 = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend2 = $this->getTestBackend();
$backend2->expects($this->once())
->method('getGroups')
->with('1')
@@ -249,9 +269,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
*/
- $backend1 = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend1 = $this->getTestBackend();
$backend1->expects($this->once())
->method('getGroups')
->with('1', 2, 1)
@@ -263,9 +281,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend2
*/
- $backend2 = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend2 = $this->getTestBackend();
$backend2->expects($this->once())
->method('getGroups')
->with('1', 2, 1)
@@ -290,9 +306,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->once())
->method('getUserGroups')
->with('user1')
@@ -302,13 +316,10 @@ class ManagerTest extends \Test\TestCase {
->with('group1')
->will($this->returnValue(true));
- $userBackend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
$manager = new \OC\Group\Manager($this->userManager);
$manager->addBackend($backend);
- $groups = $manager->getUserGroups($this->newUser('user1', $userBackend));
+ $groups = $manager->getUserGroups($this->getTestUser('user1'));
$this->assertEquals(1, count($groups));
$group1 = reset($groups);
$this->assertEquals('group1', $group1->getGID());
@@ -344,9 +355,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->once())
->method('getUserGroups')
->with('user1')
@@ -365,9 +374,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->once())
->method('getUserGroups')
->with('user1')
@@ -386,9 +393,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->once())
->method('getUserGroups')
->with('user1')
@@ -407,9 +412,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
*/
- $backend1 = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend1 = $this->getTestBackend();
$backend1->expects($this->once())
->method('getUserGroups')
->with('user1')
@@ -421,9 +424,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend2
*/
- $backend2 = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend2 = $this->getTestBackend();
$backend2->expects($this->once())
->method('getUserGroups')
->with('user1')
@@ -432,14 +433,11 @@ class ManagerTest extends \Test\TestCase {
->method('groupExists')
->will($this->returnValue(true));
- $userBackend = $this->getMockBuilder('\OC\User\Backend')
- ->disableOriginalConstructor()
- ->getMock();
$manager = new \OC\Group\Manager($this->userManager);
$manager->addBackend($backend1);
$manager->addBackend($backend2);
- $groups = $manager->getUserGroups($this->newUser('user1', $userBackend));
+ $groups = $manager->getUserGroups($this->getTestUser('user1'));
$this->assertEquals(2, count($groups));
$group1 = reset($groups);
$group2 = next($groups);
@@ -447,30 +445,28 @@ class ManagerTest extends \Test\TestCase {
$this->assertEquals('group2', $group2->getGID());
}
- public function testDisplayNamesInGroupWithOneUserBackend() {
+ public function testDisplayNamesInGroupWithOneUserBackend() {
/**
- * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->exactly(1))
->method('groupExists')
->with('testgroup')
->will($this->returnValue(true));
- $backend->expects($this->any())
- ->method('InGroup')
+ $backend->expects($this->any())
+ ->method('inGroup')
->will($this->returnCallback(function($uid, $gid) {
- switch($uid) {
- case 'user1' : return false;
- case 'user2' : return true;
- case 'user3' : return false;
- case 'user33': return true;
- default:
- return null;
- }
- }));
+ switch($uid) {
+ case 'user1' : return false;
+ case 'user2' : return true;
+ case 'user3' : return false;
+ case 'user33': return true;
+ default:
+ return null;
+ }
+ }));
$userBackend = $this->getMockBuilder('\OC\User\Backend')
->disableOriginalConstructor()
@@ -480,21 +476,21 @@ class ManagerTest extends \Test\TestCase {
->method('searchDisplayName')
->with('user3')
->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) {
- switch($offset) {
- case 0 : return array('user3' => $this->newUser('user3', $userBackend),
- 'user33' => $this->newUser('user33', $userBackend));
- case 2 : return array();
- }
- }));
-
+ switch($offset) {
+ case 0 : return ['user3' => $this->getTestUser('user3'),
+ 'user33' => $this->getTestUser('user33')];
+ case 2 : return [];
+ }
+ return null;
+ }));
$this->userManager->expects($this->any())
->method('get')
->will($this->returnCallback(function($uid) use ($userBackend) {
switch($uid) {
- case 'user1' : return $this->newUser('user1', $userBackend);
- case 'user2' : return $this->newUser('user2', $userBackend);
- case 'user3' : return $this->newUser('user3', $userBackend);
- case 'user33': return $this->newUser('user33', $userBackend);
+ case 'user1' : return $this->getTestUser('user1');
+ case 'user2' : return $this->getTestUser('user2');
+ case 'user3' : return $this->getTestUser('user3');
+ case 'user33': return $this->getTestUser('user33');
default:
return null;
}
@@ -511,31 +507,29 @@ class ManagerTest extends \Test\TestCase {
$this->assertTrue(isset($users['user33']));
}
- public function testDisplayNamesInGroupWithOneUserBackendWithLimitSpecified() {
+ public function testDisplayNamesInGroupWithOneUserBackendWithLimitSpecified() {
/**
- * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->exactly(1))
->method('groupExists')
->with('testgroup')
->will($this->returnValue(true));
- $backend->expects($this->any())
- ->method('InGroup')
+ $backend->expects($this->any())
+ ->method('inGroup')
->will($this->returnCallback(function($uid, $gid) {
- switch($uid) {
- case 'user1' : return false;
- case 'user2' : return true;
- case 'user3' : return false;
- case 'user33': return true;
- case 'user333': return true;
- default:
- return null;
- }
- }));
+ switch($uid) {
+ case 'user1' : return false;
+ case 'user2' : return true;
+ case 'user3' : return false;
+ case 'user33': return true;
+ case 'user333': return true;
+ default:
+ return null;
+ }
+ }));
$userBackend = $this->getMockBuilder('\OC\User\Backend')
->disableOriginalConstructor()
@@ -545,22 +539,22 @@ class ManagerTest extends \Test\TestCase {
->method('searchDisplayName')
->with('user3')
->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) {
- switch($offset) {
- case 0 : return array('user3' => $this->newUser('user3', $userBackend),
- 'user33' => $this->newUser('user33', $userBackend));
- case 2 : return array('user333' => $this->newUser('user333', $userBackend));
- }
- }));
-
+ switch($offset) {
+ case 0 : return ['user3' => $this->getTestUser('user3'),
+ 'user33' => $this->getTestUser('user33')];
+ case 2 : return ['user333' => $this->getTestUser('user333')];
+ }
+ return null;
+ }));
$this->userManager->expects($this->any())
->method('get')
->will($this->returnCallback(function($uid) use ($userBackend) {
switch($uid) {
- case 'user1' : return $this->newUser('user1', $userBackend);
- case 'user2' : return $this->newUser('user2', $userBackend);
- case 'user3' : return $this->newUser('user3', $userBackend);
- case 'user33': return $this->newUser('user33', $userBackend);
- case 'user333': return $this->newUser('user333', $userBackend);
+ case 'user1' : return $this->getTestUser('user1');
+ case 'user2' : return $this->getTestUser('user2');
+ case 'user3' : return $this->getTestUser('user3');
+ case 'user33': return $this->getTestUser('user33');
+ case 'user333': return $this->getTestUser('user333');
default:
return null;
}
@@ -580,29 +574,27 @@ class ManagerTest extends \Test\TestCase {
public function testDisplayNamesInGroupWithOneUserBackendWithLimitAndOffsetSpecified() {
/**
- * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->exactly(1))
->method('groupExists')
->with('testgroup')
->will($this->returnValue(true));
- $backend->expects($this->any())
+ $backend->expects($this->any())
->method('inGroup')
->will($this->returnCallback(function($uid) {
- switch($uid) {
- case 'user1' : return false;
- case 'user2' : return true;
- case 'user3' : return false;
- case 'user33': return true;
- case 'user333': return true;
- default:
- return null;
- }
- }));
+ switch($uid) {
+ case 'user1' : return false;
+ case 'user2' : return true;
+ case 'user3' : return false;
+ case 'user33': return true;
+ case 'user333': return true;
+ default:
+ return null;
+ }
+ }));
$userBackend = $this->getMockBuilder('\OC\User\Backend')
->disableOriginalConstructor()
@@ -612,25 +604,25 @@ class ManagerTest extends \Test\TestCase {
->method('searchDisplayName')
->with('user3')
->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) {
- switch($offset) {
- case 0 :
- return array(
- 'user3' => $this->newUser('user3', $userBackend),
- 'user33' => $this->newUser('user33', $userBackend),
- 'user333' => $this->newUser('user333', $userBackend)
- );
- }
- }));
-
+ switch($offset) {
+ case 0 :
+ return [
+ 'user3' => $this->getTestUser('user3'),
+ 'user33' => $this->getTestUser('user33'),
+ 'user333' => $this->getTestUser('user333')
+ ];
+ }
+ return null;
+ }));
$this->userManager->expects($this->any())
->method('get')
->will($this->returnCallback(function($uid) use ($userBackend) {
switch($uid) {
- case 'user1' : return $this->newUser('user1', $userBackend);
- case 'user2' : return $this->newUser('user2', $userBackend);
- case 'user3' : return $this->newUser('user3', $userBackend);
- case 'user33': return $this->newUser('user33', $userBackend);
- case 'user333': return $this->newUser('user333', $userBackend);
+ case 'user1' : return $this->getTestUser('user1');
+ case 'user2' : return $this->getTestUser('user2');
+ case 'user3' : return $this->getTestUser('user3');
+ case 'user33': return $this->getTestUser('user33');
+ case 'user333': return $this->getTestUser('user333');
default:
return null;
}
@@ -650,17 +642,15 @@ class ManagerTest extends \Test\TestCase {
public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmpty() {
/**
- * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->exactly(1))
->method('groupExists')
->with('testgroup')
->will($this->returnValue(true));
- $backend->expects($this->once())
+ $backend->expects($this->once())
->method('usersInGroup')
->with('testgroup', '', -1, 0)
->will($this->returnValue(array('user2', 'user33')));
@@ -673,10 +663,10 @@ class ManagerTest extends \Test\TestCase {
->method('get')
->will($this->returnCallback(function($uid) use ($userBackend) {
switch($uid) {
- case 'user1' : return $this->newUser('user1', $userBackend);
- case 'user2' : return $this->newUser('user2', $userBackend);
- case 'user3' : return $this->newUser('user3', $userBackend);
- case 'user33': return $this->newUser('user33', $userBackend);
+ case 'user1' : return $this->getTestUser('user1');
+ case 'user2' : return $this->getTestUser('user2');
+ case 'user3' : return $this->getTestUser('user3');
+ case 'user33': return $this->getTestUser('user33');
default:
return null;
}
@@ -695,11 +685,9 @@ class ManagerTest extends \Test\TestCase {
public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitSpecified() {
/**
- * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->exactly(1))
->method('groupExists')
->with('testgroup')
@@ -718,10 +706,10 @@ class ManagerTest extends \Test\TestCase {
->method('get')
->will($this->returnCallback(function($uid) use ($userBackend) {
switch($uid) {
- case 'user1' : return $this->newUser('user1', $userBackend);
- case 'user2' : return $this->newUser('user2', $userBackend);
- case 'user3' : return $this->newUser('user3', $userBackend);
- case 'user33': return $this->newUser('user33', $userBackend);
+ case 'user1' : return $this->getTestUser('user1');
+ case 'user2' : return $this->getTestUser('user2');
+ case 'user3' : return $this->getTestUser('user3');
+ case 'user33': return $this->getTestUser('user33');
default:
return null;
}
@@ -738,13 +726,11 @@ class ManagerTest extends \Test\TestCase {
$this->assertFalse(isset($users['user33']));
}
- public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitAndOffsetSpecified() {
+ public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitAndOffsetSpecified() {
/**
- * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend1
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->exactly(1))
->method('groupExists')
->with('testgroup')
@@ -763,10 +749,10 @@ class ManagerTest extends \Test\TestCase {
->method('get')
->will($this->returnCallback(function($uid) use ($userBackend) {
switch($uid) {
- case 'user1' : return $this->newUser('user1', $userBackend);
- case 'user2' : return $this->newUser('user2', $userBackend);
- case 'user3' : return $this->newUser('user3', $userBackend);
- case 'user33': return $this->newUser('user33', $userBackend);
+ case 'user1' : return $this->getTestUser('user1');
+ case 'user2' : return $this->getTestUser('user2');
+ case 'user3' : return $this->getTestUser('user3');
+ case 'user33': return $this->getTestUser('user33');
default:
return null;
}
@@ -787,10 +773,8 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
- $expectedGroups = array();
+ $backend = $this->getTestBackend();
+ $expectedGroups = [];
$backend->expects($this->any())
->method('getUserGroups')
->with('user1')
@@ -801,22 +785,19 @@ class ManagerTest extends \Test\TestCase {
->method('groupExists')
->with('group1')
->will($this->returnValue(true));
- $backend->expects($this->once())
- ->method('implementsActions')
- ->will($this->returnValue(true));
$manager = new \OC\Group\Manager($this->userManager);
$manager->addBackend($backend);
// prime cache
- $user1 = $this->newUser('user1', null);
+ $user1 = $this->getTestUser('user1');
$groups = $manager->getUserGroups($user1);
$this->assertEquals(array(), $groups);
// add user
$group = $manager->get('group1');
$group->addUser($user1);
- $expectedGroups = array('group1');
+ $expectedGroups = ['group1'];
// check result
$groups = $manager->getUserGroups($user1);
@@ -829,10 +810,8 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
- $expectedGroups = array('group1');
+ $backend = $this->getTestBackend();
+ $expectedGroups = ['group1'];
$backend->expects($this->any())
->method('getUserGroups')
->with('user1')
@@ -844,9 +823,6 @@ class ManagerTest extends \Test\TestCase {
->with('group1')
->will($this->returnValue(true));
$backend->expects($this->once())
- ->method('implementsActions')
- ->will($this->returnValue(true));
- $backend->expects($this->once())
->method('inGroup')
->will($this->returnValue(true));
$backend->expects($this->once())
@@ -857,7 +833,7 @@ class ManagerTest extends \Test\TestCase {
$manager->addBackend($backend);
// prime cache
- $user1 = $this->newUser('user1', null);
+ $user1 = $this->getTestUser('user1');
$groups = $manager->getUserGroups($user1);
$this->assertEquals(1, count($groups));
$group1 = reset($groups);
@@ -877,9 +853,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
*/
- $backend = $this->getMockBuilder('\OC\Group\Database')
- ->disableOriginalConstructor()
- ->getMock();
+ $backend = $this->getTestBackend();
$backend->expects($this->any())
->method('getUserGroups')
->with('user1')
@@ -892,4 +866,39 @@ class ManagerTest extends \Test\TestCase {
$this->assertEquals([], $groups);
}
+ public function testGroupDisplayName() {
+ /**
+ * @var \PHPUnit_Framework_MockObject_MockObject | \OC\Group\Backend $backend
+ */
+ $backend = $this->getTestBackend(
+ GroupInterface::ADD_TO_GROUP |
+ GroupInterface::REMOVE_FROM_GOUP |
+ GroupInterface::COUNT_USERS |
+ GroupInterface::CREATE_GROUP |
+ GroupInterface::DELETE_GROUP |
+ GroupInterface::GROUP_DETAILS
+ );
+ $backend->expects($this->any())
+ ->method('getGroupDetails')
+ ->will($this->returnValueMap([
+ ['group1', ['gid' => 'group1', 'displayName' => 'Group One']],
+ ['group2', ['gid' => 'group2']],
+ ]));
+
+ $manager = new \OC\Group\Manager($this->userManager);
+ $manager->addBackend($backend);
+
+ // group with display name
+ $group = $manager->get('group1');
+ $this->assertNotNull($group);
+ $this->assertEquals('group1', $group->getGID());
+ $this->assertEquals('Group One', $group->getDisplayName());
+
+ // group without display name
+ $group = $manager->get('group2');
+ $this->assertNotNull($group);
+ $this->assertEquals('group2', $group->getGID());
+ $this->assertEquals('group2', $group->getDisplayName());
+ }
+
}
diff --git a/tests/lib/Http/Client/ClientTest.php b/tests/lib/Http/Client/ClientTest.php
index 4369eab3a54..1b0a51b7395 100644
--- a/tests/lib/Http/Client/ClientTest.php
+++ b/tests/lib/Http/Client/ClientTest.php
@@ -10,6 +10,7 @@ namespace Test\Http\Client;
use GuzzleHttp\Message\Response;
use OC\Http\Client\Client;
+use OC\Security\CertificateManager;
use OCP\ICertificateManager;
use OCP\IConfig;
@@ -17,11 +18,13 @@ use OCP\IConfig;
* Class ClientTest
*/
class ClientTest extends \Test\TestCase {
- /** @var \GuzzleHttp\Client */
+ /** @var \GuzzleHttp\Client|\PHPUnit_Framework_MockObject_MockObject */
private $guzzleClient;
+ /** @var CertificateManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $certificateManager;
/** @var Client */
private $client;
- /** @var IConfig */
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
private $config;
public function setUp() {
@@ -30,10 +33,10 @@ class ClientTest extends \Test\TestCase {
$this->guzzleClient = $this->getMockBuilder('\GuzzleHttp\Client')
->disableOriginalConstructor()
->getMock();
- $certificateManager = $this->createMock(ICertificateManager::class);
+ $this->certificateManager = $this->createMock(ICertificateManager::class);
$this->client = new Client(
$this->config,
- $certificateManager,
+ $this->certificateManager,
$this->guzzleClient
);
}
@@ -109,4 +112,64 @@ class ClientTest extends \Test\TestCase {
->willReturn(new Response(1337));
$this->assertEquals(1337, $this->client->options('http://localhost/', [])->getStatusCode());
}
+
+ public function testHead() {
+ $this->guzzleClient->method('head')
+ ->willReturn(new Response(1337));
+ $this->assertEquals(1337, $this->client->head('http://localhost/', [])->getStatusCode());
+ }
+
+ public function testSetDefaultOptionsWithNotInstalled() {
+ $this->config
+ ->expects($this->at(0))
+ ->method('getSystemValue')
+ ->with('installed', false)
+ ->willReturn(false);
+ $this->certificateManager
+ ->expects($this->once())
+ ->method('listCertificates')
+ ->willReturn([]);
+ $this->guzzleClient
+ ->expects($this->at(0))
+ ->method('setDefaultOption')
+ ->with('verify', \OC::$SERVERROOT . '/resources/config/ca-bundle.crt');
+ $this->guzzleClient
+ ->expects($this->at(1))
+ ->method('setDefaultOption')
+ ->with('headers/User-Agent', 'Nextcloud Server Crawler');
+
+ self::invokePrivate($this->client, 'setDefaultOptions');
+ }
+
+ public function testSetDefaultOptionsWithProxy() {
+ $this->config
+ ->expects($this->at(0))
+ ->method('getSystemValue')
+ ->with('proxy', null)
+ ->willReturn('foo');
+ $this->config
+ ->expects($this->at(1))
+ ->method('getSystemValue')
+ ->with('proxyuserpwd', null)
+ ->willReturn(null);
+ $this->certificateManager
+ ->expects($this->once())
+ ->method('getAbsoluteBundlePath')
+ ->with(null)
+ ->willReturn('/my/path.crt');
+ $this->guzzleClient
+ ->expects($this->at(0))
+ ->method('setDefaultOption')
+ ->with('verify', '/my/path.crt');
+ $this->guzzleClient
+ ->expects($this->at(1))
+ ->method('setDefaultOption')
+ ->with('headers/User-Agent', 'Nextcloud Server Crawler');
+ $this->guzzleClient
+ ->expects($this->at(2))
+ ->method('setDefaultOption')
+ ->with('proxy', 'foo');
+
+ self::invokePrivate($this->client, 'setDefaultOptions');
+ }
}
diff --git a/tests/lib/Http/Client/ResponseTest.php b/tests/lib/Http/Client/ResponseTest.php
index 685f34a0baf..2e5a47b7f4a 100644
--- a/tests/lib/Http/Client/ResponseTest.php
+++ b/tests/lib/Http/Client/ResponseTest.php
@@ -8,7 +8,7 @@
namespace Test\Http\Client;
-use Guzzle\Stream\Stream;
+use GuzzleHttp\Stream\Stream;
use GuzzleHttp\Message\Response as GuzzleResponse;
use OC\Http\Client\Response;
@@ -27,12 +27,33 @@ class ResponseTest extends \Test\TestCase {
$this->response = new Response($this->guzzleResponse);
}
+ public function testGetBody() {
+ $this->guzzleResponse->setBody(Stream::factory('MyResponse'));
+ $this->assertSame('MyResponse', $this->response->getBody());
+ }
+
public function testGetStatusCode() {
- $this->assertEquals(1337, $this->response->getStatusCode());
+ $this->assertSame(1337, $this->response->getStatusCode());
}
public function testGetHeader() {
$this->guzzleResponse->setHeader('bar', 'foo');
- $this->assertEquals('foo', $this->response->getHeader('bar'));
+ $this->assertSame('foo', $this->response->getHeader('bar'));
+ }
+
+ public function testGetHeaders() {
+ $this->guzzleResponse->setHeader('bar', 'foo');
+ $this->guzzleResponse->setHeader('x-awesome', 'yes');
+
+ $expected = [
+ 'bar' => [
+ 0 => 'foo',
+ ],
+ 'x-awesome' => [
+ 0 => 'yes',
+ ],
+ ];
+ $this->assertSame($expected, $this->response->getHeaders());
+ $this->assertSame('yes', $this->response->getHeader('x-awesome'));
}
}
diff --git a/tests/lib/IntegrityCheck/CheckerTest.php b/tests/lib/IntegrityCheck/CheckerTest.php
index 0e6bd52a5df..049017cb5e8 100644
--- a/tests/lib/IntegrityCheck/CheckerTest.php
+++ b/tests/lib/IntegrityCheck/CheckerTest.php
@@ -34,19 +34,19 @@ use OCP\ICacheFactory;
use OCP\App\IAppManager;
class CheckerTest extends TestCase {
- /** @var EnvironmentHelper */
+ /** @var EnvironmentHelper|\PHPUnit_Framework_MockObject_MockObject */
private $environmentHelper;
- /** @var AppLocator */
+ /** @var AppLocator|\PHPUnit_Framework_MockObject_MockObject */
private $appLocator;
/** @var Checker */
private $checker;
- /** @var FileAccessHelper */
+ /** @var FileAccessHelper|\PHPUnit_Framework_MockObject_MockObject */
private $fileAccessHelper;
- /** @var IConfig */
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
private $config;
- /** @var ICacheFactory */
+ /** @var ICacheFactory|\PHPUnit_Framework_MockObject_MockObject */
private $cacheFactory;
- /** @var IAppManager */
+ /** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject */
private $appManager;
public function setUp() {
@@ -77,9 +77,20 @@ class CheckerTest extends TestCase {
/**
* @expectedException \Exception
- * @expectedExceptionMessage Directory does not exist.
+ * @expectedExceptionMessage Exception message
*/
public function testWriteAppSignatureOfNotExistingApp() {
+ $this->fileAccessHelper
+ ->expects($this->at(0))
+ ->method('assertDirectoryExists')
+ ->with('NotExistingApp/appinfo')
+ ->willThrowException(new \Exception('Exception message'));
+ $this->fileAccessHelper
+ ->expects($this->at(1))
+ ->method('is_writable')
+ ->with('NotExistingApp/appinfo')
+ ->willReturn(true);
+
$keyBundle = file_get_contents(__DIR__ .'/../../data/integritycheck/SomeApp.crt');
$rsaPrivateKey = file_get_contents(__DIR__ .'/../../data/integritycheck/SomeApp.key');
$rsa = new RSA();
@@ -89,6 +100,25 @@ class CheckerTest extends TestCase {
$this->checker->writeAppSignature('NotExistingApp', $x509, $rsa);
}
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessageRegExp /[a-zA-Z\/_-]+ is not writable/
+ */
+ public function testWriteAppSignatureWrongPermissions() {
+ $this->fileAccessHelper
+ ->expects($this->once())
+ ->method('file_put_contents')
+ ->will($this->throwException(new \Exception('Exception message')));
+
+ $keyBundle = file_get_contents(__DIR__ .'/../../data/integritycheck/SomeApp.crt');
+ $rsaPrivateKey = file_get_contents(__DIR__ .'/../../data/integritycheck/SomeApp.key');
+ $rsa = new RSA();
+ $rsa->loadKey($rsaPrivateKey);
+ $x509 = new X509();
+ $x509->loadX509($keyBundle);
+ $this->checker->writeAppSignature(\OC::$SERVERROOT . '/tests/data/integritycheck/app/', $x509, $rsa);
+ }
+
public function testWriteAppSignature() {
$expectedSignatureFileData = '{
"hashes": {
@@ -443,6 +473,54 @@ class CheckerTest extends TestCase {
$this->assertSame([], $this->checker->verifyAppSignature('SomeApp'));
}
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Exception message
+ */
+ public function testWriteCoreSignatureWithException() {
+ $this->fileAccessHelper
+ ->expects($this->at(0))
+ ->method('assertDirectoryExists')
+ ->will($this->throwException(new \Exception('Exception message')));
+ $this->fileAccessHelper
+ ->expects($this->at(1))
+ ->method('is_writable')
+ ->with(__DIR__ . '/core')
+ ->willReturn(true);
+
+ $keyBundle = file_get_contents(__DIR__ .'/../../data/integritycheck/SomeApp.crt');
+ $rsaPrivateKey = file_get_contents(__DIR__ .'/../../data/integritycheck/SomeApp.key');
+ $rsa = new RSA();
+ $rsa->loadKey($rsaPrivateKey);
+ $x509 = new X509();
+ $x509->loadX509($keyBundle);
+ $this->checker->writeCoreSignature($x509, $rsa, __DIR__);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessageRegExp /[a-zA-Z\/_-]+ is not writable/
+ */
+ public function testWriteCoreSignatureWrongPermissions() {
+ $this->fileAccessHelper
+ ->expects($this->at(0))
+ ->method('assertDirectoryExists')
+ ->will($this->throwException(new \Exception('Exception message')));
+ $this->fileAccessHelper
+ ->expects($this->at(1))
+ ->method('is_writable')
+ ->with(__DIR__ . '/core')
+ ->willReturn(false);
+
+ $keyBundle = file_get_contents(__DIR__ .'/../../data/integritycheck/SomeApp.crt');
+ $rsaPrivateKey = file_get_contents(__DIR__ .'/../../data/integritycheck/SomeApp.key');
+ $rsa = new RSA();
+ $rsa->loadKey($rsaPrivateKey);
+ $x509 = new X509();
+ $x509->loadX509($keyBundle);
+ $this->checker->writeCoreSignature($x509, $rsa, __DIR__);
+ }
+
public function testWriteCoreSignature() {
$expectedSignatureFileData = '{
"hashes": {
@@ -948,7 +1026,7 @@ class CheckerTest extends TestCase {
->method('verifyCoreSignature');
$this->appLocator
->expects($this->at(0))
- ->Method('getAllApps')
+ ->method('getAllApps')
->will($this->returnValue([
'files',
'calendar',
@@ -1074,7 +1152,6 @@ class CheckerTest extends TestCase {
->with('integrity.check.disabled', false)
->will($this->returnValue(true));
- $result = $this->invokePrivate($this->checker, 'isCodeCheckEnforced');
- $this->assertSame(false, $result);
+ $this->assertFalse(self::invokePrivate($this->checker, 'isCodeCheckEnforced'));
}
}
diff --git a/tests/lib/IntegrityCheck/Helpers/FileAccessHelperTest.php b/tests/lib/IntegrityCheck/Helpers/FileAccessHelperTest.php
index 740b14e61c4..de4aeec78cc 100644
--- a/tests/lib/IntegrityCheck/Helpers/FileAccessHelperTest.php
+++ b/tests/lib/IntegrityCheck/Helpers/FileAccessHelperTest.php
@@ -40,4 +40,29 @@ class FileAccessHelperTest extends TestCase {
$this->fileAccessHelper->file_put_contents($filePath, $data);
$this->assertSame($data, $this->fileAccessHelper->file_get_contents($filePath));
}
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Failed to write into /anabsolutelynotexistingfolder/on/the/system.txt
+ */
+ public function testFile_put_contentsWithException() {
+ $this->fileAccessHelper->file_put_contents('/anabsolutelynotexistingfolder/on/the/system.txt', 'MyFiles');
+ }
+
+ public function testIs_writable() {
+ $this->assertFalse($this->fileAccessHelper->is_writable('/anabsolutelynotexistingfolder/on/the/system.txt'));
+ $this->assertTrue($this->fileAccessHelper->is_writable(\OC::$server->getTempManager()->getTemporaryFile('MyFile')));
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Directory /anabsolutelynotexistingfolder/on/the/system does not exist.
+ */
+ public function testAssertDirectoryExistsWithException() {
+ $this->fileAccessHelper->assertDirectoryExists('/anabsolutelynotexistingfolder/on/the/system');
+ }
+
+ public function testAssertDirectoryExists() {
+ $this->fileAccessHelper->assertDirectoryExists(\OC::$server->getTempManager()->getTemporaryFolder('/testfolder/'));
+ }
}
diff --git a/tests/lib/LoggerTest.php b/tests/lib/LoggerTest.php
index abb9deebd55..da9cedc9f56 100644
--- a/tests/lib/LoggerTest.php
+++ b/tests/lib/LoggerTest.php
@@ -138,4 +138,22 @@ class LoggerTest extends TestCase {
}
}
+ public function dataGetLogClass() {
+ return [
+ ['file', \OC\Log\File::class],
+ ['errorlog', \OC\Log\Errorlog::class],
+ ['syslog', \OC\Log\Syslog::class],
+
+ ['owncloud', \OC\Log\File::class],
+ ['nextcloud', \OC\Log\File::class],
+ ['foobar', \OC\Log\File::class],
+ ];
+ }
+
+ /**
+ * @dataProvider dataGetLogClass
+ */
+ public function testGetLogClass($type, $class) {
+ $this->assertEquals($class, Log::getLogClass($type));
+ }
}
diff --git a/tests/lib/Mail/MailerTest.php b/tests/lib/Mail/MailerTest.php
index c63ceb5982a..7a7ce0392e9 100644
--- a/tests/lib/Mail/MailerTest.php
+++ b/tests/lib/Mail/MailerTest.php
@@ -44,7 +44,7 @@ class MailerTest extends TestCase {
$this->config
->expects($this->once())
->method('getSystemValue')
- ->with('mail_smtpmode', 'sendmail')
+ ->with('mail_smtpmode', 'php')
->will($this->returnValue('sendmail'));
$this->assertEquals(\Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance'));
@@ -54,7 +54,7 @@ class MailerTest extends TestCase {
$this->config
->expects($this->once())
->method('getSystemValue')
- ->with('mail_smtpmode', 'sendmail')
+ ->with('mail_smtpmode', 'php')
->will($this->returnValue('qmail'));
$this->assertEquals(\Swift_SendmailTransport::newInstance('/var/qmail/bin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance'));
diff --git a/tests/lib/Memcache/APCTest.php b/tests/lib/Memcache/APCTest.php
deleted file mode 100644
index 4bd7e62b94a..00000000000
--- a/tests/lib/Memcache/APCTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace Test\Memcache;
-
-class APCTest extends Cache {
- protected function setUp() {
- parent::setUp();
-
- if(!\OC\Memcache\APC::isAvailable()) {
- $this->markTestSkipped('The apc extension is not available.');
- return;
- }
- if(\OC\Memcache\APCu::isAvailable()) {
- $this->markTestSkipped('The apc extension is emulated by ACPu.');
- return;
- }
- $this->instance=new \OC\Memcache\APC($this->getUniqueID());
- }
-}
diff --git a/tests/lib/Memcache/APCuTest.php b/tests/lib/Memcache/APCuTest.php
index 73fd5a12880..41de75a8ea8 100644
--- a/tests/lib/Memcache/APCuTest.php
+++ b/tests/lib/Memcache/APCuTest.php
@@ -19,4 +19,16 @@ class APCuTest extends Cache {
}
$this->instance=new \OC\Memcache\APCu($this->getUniqueID());
}
+
+ public function testCasIntChanged() {
+ $this->instance->set('foo', 1);
+ $this->assertTrue($this->instance->cas('foo', 1, 2));
+ $this->assertEquals(2, $this->instance->get('foo'));
+ }
+
+ public function testCasIntNotChanged() {
+ $this->instance->set('foo', 1);
+ $this->assertFalse($this->instance->cas('foo', 2, 3));
+ $this->assertEquals(1, $this->instance->get('foo'));
+ }
}
diff --git a/tests/lib/NavigationManagerTest.php b/tests/lib/NavigationManagerTest.php
index 96708786e39..64fec802eca 100644
--- a/tests/lib/NavigationManagerTest.php
+++ b/tests/lib/NavigationManagerTest.php
@@ -12,7 +12,15 @@
namespace Test;
+use OC\App\AppManager;
use OC\NavigationManager;
+use OCP\App\IAppManager;
+use OCP\IGroupManager;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserSession;
+use OCP\L10N\IFactory;
class NavigationManagerTest extends TestCase {
/** @var \OC\NavigationManager */
@@ -157,4 +165,62 @@ class NavigationManagerTest extends TestCase {
$this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
$this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by getAll()');
}
+
+ /**
+ * @dataProvider providesNavigationConfig
+ */
+ public function testWithAppManager($expected, $config, $isAdmin = false) {
+
+ $appManager = $this->createMock(AppManager::class);
+ $urlGenerator = $this->createMock(IURLGenerator::class);
+ $l10nFac = $this->createMock(IFactory::class);
+ $userSession = $this->createMock(IUserSession::class);
+ $groupManager = $this->createMock(IGroupManager::class);
+ $l = $this->createMock(IL10N::class);
+ $l->expects($this->any())->method('t')->willReturnCallback(function($text, $parameters = []) {
+ return vsprintf($text, $parameters);
+ });
+
+ $appManager->expects($this->once())->method('getInstalledApps')->willReturn(['test']);
+ $appManager->expects($this->once())->method('getAppInfo')->with('test')->willReturn($config);
+ $l10nFac->expects($this->exactly(count($expected)))->method('get')->with('test')->willReturn($l);
+ $urlGenerator->expects($this->any())->method('imagePath')->willReturnCallback(function($appName, $file) {
+ return "/apps/$appName/img/$file";
+ });
+ $urlGenerator->expects($this->exactly(count($expected)))->method('linkToRoute')->willReturnCallback(function($route) {
+ return "/apps/test/";
+ });
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())->method('getUID')->willReturn('user001');
+ $userSession->expects($this->any())->method('getUser')->willReturn($user);
+ $groupManager->expects($this->any())->method('isAdmin')->willReturn($isAdmin);
+
+ $navigationManager = new NavigationManager($appManager, $urlGenerator, $l10nFac, $userSession, $groupManager);
+
+ $entries = $navigationManager->getAll();
+ $this->assertEquals($expected, $entries);
+ }
+
+ public function providesNavigationConfig() {
+ return [
+ 'minimalistic' => [[[
+ 'id' => 'test',
+ 'order' => 100,
+ 'href' => '/apps/test/',
+ 'icon' => '/apps/test/img/app.svg',
+ 'name' => 'Test',
+ 'active' => false
+ ]], ['navigation' => ['route' => 'test.page.index', 'name' => 'Test']]],
+ 'no admin' => [[[
+ 'id' => 'test',
+ 'order' => 100,
+ 'href' => '/apps/test/',
+ 'icon' => '/apps/test/img/app.svg',
+ 'name' => 'Test',
+ 'active' => false
+ ]], ['navigation' => ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']], true],
+ 'no name' => [[], ['navigation' => ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index']], true],
+ 'admin' => [[], ['navigation' => ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']]]
+ ];
+ }
}
diff --git a/tests/lib/PreviewTest.php b/tests/lib/PreviewTest.php
deleted file mode 100644
index 2d6f53e2ce8..00000000000
--- a/tests/lib/PreviewTest.php
+++ /dev/null
@@ -1,963 +0,0 @@
-<?php
-/**
- * @author Georg Ehrke <georg@owncloud.com>
- * @author Olivier Paroz <owncloud@interfasys.ch>
- *
- * @copyright Copyright (c) 2015, 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/>
- *
- */
-
-namespace Test;
-
-use OC\Files\FileInfo;
-use OC\Files\Filesystem;
-use OC\Files\Storage\Temporary;
-use OC\Files\View;
-use OC\Preview;
-use Test\Traits\MountProviderTrait;
-use Test\Traits\UserTrait;
-
-/**
- * Class PreviewTest
- *
- * @group DB
- *
- * @package Test
- */
-class PreviewTest extends TestCase {
- use UserTrait;
- use MountProviderTrait;
-
- const TEST_PREVIEW_USER1 = "test-preview-user1";
-
- /** @var View */
- private $rootView;
- /**
- * Note that using 756 with an image with a ratio of 1.6 brings interesting rounding issues
- *
- * @var int maximum width allowed for a preview
- * */
- private $configMaxWidth = 756;
- /** @var int maximum height allowed for a preview */
- private $configMaxHeight = 756;
- private $keepAspect;
- private $scalingUp;
-
- private $samples = [];
- private $sampleFileId;
- private $sampleFilename;
- private $sampleWidth;
- private $sampleHeight;
- private $maxScaleFactor;
- /** @var int width of the max preview */
- private $maxPreviewWidth;
- /** @var int height of the max preview */
- private $maxPreviewHeight;
- /** @var int height of the max preview, which is the same as the one of the original image */
- private $maxPreviewRatio;
- private $cachedBigger = [];
-
- /**
- * Make sure your configuration file doesn't contain any additional providers
- */
- protected function setUp() {
- parent::setUp();
-
- $this->createUser(self::TEST_PREVIEW_USER1, self::TEST_PREVIEW_USER1);
- $this->loginAsUser(self::TEST_PREVIEW_USER1);
-
- $storage = new Temporary([]);
- Filesystem::mount($storage, [], '/' . self::TEST_PREVIEW_USER1 . '/');
-
- $this->rootView = new View('');
- $this->rootView->mkdir('/' . self::TEST_PREVIEW_USER1);
- $this->rootView->mkdir('/' . self::TEST_PREVIEW_USER1 . '/files');
-
- // We simulate the max dimension set in the config
- \OC::$server->getConfig()
- ->setSystemValue('preview_max_x', $this->configMaxWidth);
- \OC::$server->getConfig()
- ->setSystemValue('preview_max_y', $this->configMaxHeight);
- // Used to test upscaling
- $this->maxScaleFactor = 2;
- \OC::$server->getConfig()
- ->setSystemValue('preview_max_scale_factor', $this->maxScaleFactor);
-
- // We need to enable the providers we're going to use in the tests
- $providers = [
- 'OC\\Preview\\JPEG',
- 'OC\\Preview\\PNG',
- 'OC\\Preview\\GIF',
- 'OC\\Preview\\TXT',
- 'OC\\Preview\\Postscript'
- ];
- \OC::$server->getConfig()
- ->setSystemValue('enabledPreviewProviders', $providers);
-
- // Sample is 1680x1050 JPEG
- $this->prepareSample('testimage.jpg', 1680, 1050);
- // Sample is 2400x1707 EPS
- $this->prepareSample('testimage.eps', 2400, 1707);
- // Sample is 1200x450 PNG
- $this->prepareSample('testimage-wide.png', 1200, 450);
- // Sample is 64x64 GIF
- $this->prepareSample('testimage.gif', 64, 64);
- }
-
- protected function tearDown() {
- $this->logout();
-
- parent::tearDown();
- }
-
- /**
- * Tests if a preview can be deleted
- */
- public function testIsPreviewDeleted() {
-
- $sampleFile = '/' . self::TEST_PREVIEW_USER1 . '/files/test.txt';
-
- $this->rootView->file_put_contents($sampleFile, 'dummy file data');
-
- $x = 50;
- $y = 50;
-
- $preview = new Preview(self::TEST_PREVIEW_USER1, 'files/', 'test.txt', $x, $y);
- $preview->getPreview();
-
- $fileInfo = $this->rootView->getFileInfo($sampleFile);
- /** @var int $fileId */
- $fileId = $fileInfo['fileid'];
- $thumbCacheFile = $this->buildCachePath($fileId, $x, $y, true);
-
- $this->assertSame(
- true, $this->rootView->file_exists($thumbCacheFile), "$thumbCacheFile \n"
- );
-
- $preview->deletePreview();
-
- $this->assertSame(false, $this->rootView->file_exists($thumbCacheFile));
- }
-
- /**
- * Tests if all previews can be deleted
- *
- * We test this first to make sure we'll be able to cleanup after each preview generating test
- */
- public function testAreAllPreviewsDeleted() {
-
- $sampleFile = '/' . self::TEST_PREVIEW_USER1 . '/files/test.txt';
-
- $this->rootView->file_put_contents($sampleFile, 'dummy file data');
-
- $x = 50;
- $y = 50;
-
- $preview = new Preview(self::TEST_PREVIEW_USER1, 'files/', 'test.txt', $x, $y);
- $preview->getPreview();
-
- $fileInfo = $this->rootView->getFileInfo($sampleFile);
- /** @var int $fileId */
- $fileId = $fileInfo['fileid'];
-
- $thumbCacheFolder = '/' . self::TEST_PREVIEW_USER1 . '/' . Preview::THUMBNAILS_FOLDER .
- '/' . $fileId . '/';
-
- $this->assertSame(true, $this->rootView->is_dir($thumbCacheFolder), "$thumbCacheFolder \n");
-
- $preview->deleteAllPreviews();
-
- $this->assertSame(false, $this->rootView->is_dir($thumbCacheFolder));
- }
-
- public function txtBlacklist() {
- $txt = 'random text file';
-
- return [
- ['txt', $txt, false],
- ];
- }
-
- /**
- * @dataProvider txtBlacklist
- *
- * @param $extension
- * @param $data
- * @param $expectedResult
- */
- public function testIsTransparent($extension, $data, $expectedResult) {
-
- $x = 32;
- $y = 32;
-
- $sample = '/' . self::TEST_PREVIEW_USER1 . '/files/test.' . $extension;
- $this->rootView->file_put_contents($sample, $data);
- $preview = new Preview(
- self::TEST_PREVIEW_USER1, 'files/', 'test.' . $extension, $x,
- $y
- );
- $image = $preview->getPreview();
- $resource = $image->resource();
-
- //http://stackoverflow.com/questions/5702953/imagecolorat-and-transparency
- $colorIndex = imagecolorat($resource, 1, 1);
- $colorInfo = imagecolorsforindex($resource, $colorIndex);
- $this->assertSame(
- $expectedResult,
- $colorInfo['alpha'] === 127,
- 'Failed asserting that only previews for text files are transparent.'
- );
- }
-
- /**
- * Tests if unsupported previews return an empty object
- */
- public function testUnsupportedPreviewsReturnEmptyObject() {
- $width = 400;
- $height = 200;
-
- // Previews for odt files are not enabled
- $imgData = file_get_contents(\OC::$SERVERROOT . '/tests/data/testimage.odt');
- $imgPath = '/' . self::TEST_PREVIEW_USER1 . '/files/testimage.odt';
- $this->rootView->file_put_contents($imgPath, $imgData);
-
- $preview =
- new Preview(self::TEST_PREVIEW_USER1, 'files/', 'testimage.odt', $width, $height);
- $preview->getPreview();
- $image = $preview->getPreview();
-
- $this->assertSame(false, $image->valid());
- }
-
- /**
- * We generate the data to use as it makes it easier to adjust in case we need to test
- * something different
- *
- * @return array
- */
- public static function dimensionsDataProvider() {
- $data = [];
- $samples = [
- [200, 800],
- [200, 800],
- [50, 400],
- [4, 60],
- ];
- $keepAspect = false;
- $scalingUp = false;
-
- for ($a = 0; $a < sizeof($samples); $a++) {
- for ($b = 0; $b < 2; $b++) {
- for ($c = 0; $c < 2; $c++) {
- for ($d = 0; $d < 4; $d++) {
- $coordinates = [
- [
- -rand($samples[$a][0], $samples[$a][1]),
- -rand($samples[$a][0], $samples[$a][1])
- ],
- [
- rand($samples[$a][0], $samples[$a][1]),
- rand($samples[$a][0], $samples[$a][1])
- ],
- [
- -rand($samples[$a][0], $samples[$a][1]),
- rand($samples[$a][0], $samples[$a][1])
- ],
- [
- rand($samples[$a][0], $samples[$a][1]),
- -rand($samples[$a][0], $samples[$a][1])
- ]
- ];
- $row = [$a];
- $row[] = $coordinates[$d][0];
- $row[] = $coordinates[$d][1];
- $row[] = $keepAspect;
- $row[] = $scalingUp;
- $data[] = $row;
- }
- $scalingUp = !$scalingUp;
- }
- $keepAspect = !$keepAspect;
- }
- }
-
- return $data;
- }
-
- /**
- * Tests if a preview of max dimensions gets created
- *
- * @requires extension imagick
- * @dataProvider dimensionsDataProvider
- *
- * @param int $sampleId
- * @param int $widthAdjustment
- * @param int $heightAdjustment
- * @param bool $keepAspect
- * @param bool $scalingUp
- */
- public function testCreateMaxAndNormalPreviewsAtFirstRequest(
- $sampleId, $widthAdjustment, $heightAdjustment, $keepAspect = false, $scalingUp = false
- ) {
- // Get the right sample for the experiment
- $this->getSample($sampleId);
- $sampleWidth = $this->sampleWidth;
- $sampleHeight = $this->sampleHeight;
- $sampleFileId = $this->sampleFileId;
-
- // Adjust the requested size so that we trigger various test cases
- $previewWidth = $sampleWidth + $widthAdjustment;
- $previewHeight = $sampleHeight + $heightAdjustment;
- $this->keepAspect = $keepAspect;
- $this->scalingUp = $scalingUp;
-
- // Generates the max preview
- $preview = $this->createPreview($previewWidth, $previewHeight);
-
- // There should be no cached thumbnails
- $thumbnailFolder = '/' . self::TEST_PREVIEW_USER1 . '/' . Preview::THUMBNAILS_FOLDER .
- '/' . $sampleFileId;
- $this->assertSame(false, $this->rootView->is_dir($thumbnailFolder));
-
- $image = $preview->getPreview();
- $this->assertNotSame(false, $image);
-
- $maxThumbCacheFile = $this->buildCachePath(
- $sampleFileId, $this->maxPreviewWidth, $this->maxPreviewHeight, true, '-max'
- );
-
- $this->assertSame(
- true, $this->rootView->file_exists($maxThumbCacheFile), "$maxThumbCacheFile \n"
- );
-
- // We check the dimensions of the file we've just stored
- $maxPreview = imagecreatefromstring($this->rootView->file_get_contents($maxThumbCacheFile));
-
- $this->assertEquals($this->maxPreviewWidth, imagesx($maxPreview));
- $this->assertEquals($this->maxPreviewHeight, imagesy($maxPreview));
-
- // A thumbnail of the asked dimensions should also have been created (within the constraints of the max preview)
- list($limitedPreviewWidth, $limitedPreviewHeight) =
- $this->simulatePreviewDimensions($previewWidth, $previewHeight);
-
- $actualWidth = $image->width();
- $actualHeight = $image->height();
-
- $this->assertEquals(
- (int)$limitedPreviewWidth, $image->width(), "$actualWidth x $actualHeight \n"
- );
- $this->assertEquals((int)$limitedPreviewHeight, $image->height());
-
- // And it should be cached
- $this->checkCache($sampleFileId, $limitedPreviewWidth, $limitedPreviewHeight);
-
- $preview->deleteAllPreviews();
- }
-
- /**
- * Tests if the second preview will be based off the cached max preview
- *
- * @requires extension imagick
- * @dataProvider dimensionsDataProvider
- *
- * @param int $sampleId
- * @param int $widthAdjustment
- * @param int $heightAdjustment
- * @param bool $keepAspect
- * @param bool $scalingUp
- */
- public function testSecondPreviewsGetCachedMax(
- $sampleId, $widthAdjustment, $heightAdjustment, $keepAspect = false, $scalingUp = false
- ) {
- //$this->markTestSkipped('Not testing this at this time');
-
- $this->getSample($sampleId);
- $sampleWidth = $this->sampleWidth;
- $sampleHeight = $this->sampleHeight;
- $sampleFileId = $this->sampleFileId;
-
- //Creates the Max preview which will be used in the rest of the test
- $this->createMaxPreview();
-
- // Adjust the requested size so that we trigger various test cases
- $previewWidth = $sampleWidth + $widthAdjustment;
- $previewHeight = $sampleHeight + $heightAdjustment;
- $this->keepAspect = $keepAspect;
- $this->scalingUp = $scalingUp;
-
- $preview = $this->createPreview($previewWidth, $previewHeight);
-
- // A cache query should return the thumbnail of max dimension
- $isCached = $preview->isCached($sampleFileId);
- $cachedMaxPreview = $this->buildCachePath(
- $sampleFileId, $this->maxPreviewWidth, $this->maxPreviewHeight, false, '-max'
- );
- $this->assertSame($cachedMaxPreview, $isCached);
- }
-
- /**
- * Make sure that the max preview can never be deleted
- *
- * For this test to work, the preview we generate first has to be the size of max preview
- */
- public function testMaxPreviewCannotBeDeleted() {
- //$this->markTestSkipped('Not testing this at this time');
-
- $this->keepAspect = true;
- $this->getSample(0);
- $fileId = $this->sampleFileId;
-
- //Creates the Max preview which we will try to delete
- $preview = $this->createMaxPreview();
-
- // We try to deleted the preview
- $preview->deletePreview();
- $this->assertNotSame(false, $preview->isCached($fileId));
-
- $preview->deleteAllPreviews();
- }
-
- public static function aspectDataProvider() {
- $data = [];
- $samples = 4;
- $keepAspect = false;
- $scalingUp = false;
- for ($a = 0; $a < $samples; $a++) {
- for ($b = 0; $b < 2; $b++) {
- for ($c = 0; $c < 2; $c++) {
- $row = [$a];
- $row[] = $keepAspect;
- $row[] = $scalingUp;
- $data[] = $row;
- $scalingUp = !$scalingUp;
- }
- $keepAspect = !$keepAspect;
- }
- }
-
- return $data;
- }
-
- /**
- * We ask for a preview larger than what is set in the configuration,
- * so we should be getting either the max preview or a preview the size
- * of the dimensions set in the config
- *
- * @requires extension imagick
- * @dataProvider aspectDataProvider
- *
- * @param int $sampleId
- * @param bool $keepAspect
- * @param bool $scalingUp
- */
- public function testDoNotCreatePreviewsLargerThanConfigMax(
- $sampleId, $keepAspect = false, $scalingUp = false
- ) {
- //$this->markTestSkipped('Not testing this at this time');
-
- $this->getSample($sampleId);
-
- //Creates the Max preview which will be used in the rest of the test
- $this->createMaxPreview();
-
- // Now we will create the real preview
- $previewWidth = 4000;
- $previewHeight = 4000;
- $this->keepAspect = $keepAspect;
- $this->scalingUp = $scalingUp;
-
- // Tries to create the very large preview
- $preview = $this->createPreview($previewWidth, $previewHeight);
-
- $image = $preview->getPreview();
- $this->assertNotSame(false, $image);
-
- list($expectedWidth, $expectedHeight) =
- $this->simulatePreviewDimensions($previewWidth, $previewHeight);
- $this->assertEquals($expectedWidth, $image->width());
- $this->assertEquals($expectedHeight, $image->height());
-
- // A preview of the asked size should not have been created since it's larger that our max dimensions
- $postfix = $this->getThumbnailPostfix($previewWidth, $previewHeight);
- $thumbCacheFile = $this->buildCachePath(
- $this->sampleFileId, $previewWidth, $previewHeight, false, $postfix
- );
- $this->assertSame(
- false, $this->rootView->file_exists($thumbCacheFile), "$thumbCacheFile \n"
- );
-
- $preview->deleteAllPreviews();
- }
-
- /**
- * Makes sure we're getting the proper cached thumbnail
- *
- * When we start by generating a preview which keeps the aspect ratio
- * 200-125-with-aspect
- * 300-300 ✓
- *
- * When we start by generating a preview of exact dimensions
- * 200-200 ✓
- * 300-188-with-aspect
- *
- * @requires extension imagick
- * @dataProvider aspectDataProvider
- *
- * @param int $sampleId
- * @param bool $keepAspect
- * @param bool $scalingUp
- */
- public function testIsBiggerWithAspectRatioCached(
- $sampleId, $keepAspect = false, $scalingUp = false
- ) {
- //$this->markTestSkipped('Not testing this at this time');
-
- $previewWidth = 400;
- $previewHeight = 400;
- $this->getSample($sampleId);
- $fileId = $this->sampleFileId;
- $this->keepAspect = $keepAspect;
- $this->scalingUp = $scalingUp;
-
- // Caching the max preview in our preview array for the test
- $this->cachedBigger[] = $this->buildCachePath(
- $fileId, $this->maxPreviewWidth, $this->maxPreviewHeight, false, '-max'
- );
-
- $this->getSmallerThanMaxPreview($fileId, $previewWidth, $previewHeight);
- // We switch the aspect ratio, to generate a thumbnail we should not be picked up
- $this->keepAspect = !$keepAspect;
- $this->getSmallerThanMaxPreview($fileId, $previewWidth + 100, $previewHeight + 100);
-
- // Small thumbnails are always cropped
- $this->keepAspect = false;
- // Smaller previews should be based on the previous, larger preview, with the correct aspect ratio
- $this->createThumbnailFromBiggerCachedPreview($fileId, 32, 32);
-
- // 2nd cache query should indicate that we have a cached copy of the exact dimension
- $this->getCachedSmallThumbnail($fileId, 32, 32);
-
- // We create a preview in order to be able to delete the cache
- $preview = $this->createPreview(rand(), rand());
- $preview->deleteAllPreviews();
- $this->cachedBigger = [];
- }
-
- /**
- * Initialises the preview
- *
- * @param int $width
- * @param int $height
- *
- * @return Preview
- */
- private function createPreview($width, $height) {
- $preview = new Preview(
- self::TEST_PREVIEW_USER1, 'files/', $this->sampleFilename, $width,
- $height
- );
-
- $this->assertSame(true, $preview->isFileValid());
-
- $preview->setKeepAspect($this->keepAspect);
- $preview->setScalingup($this->scalingUp);
-
- return $preview;
- }
-
- /**
- * Creates the Max preview which will be used in the rest of the test
- *
- * @return Preview
- */
- private function createMaxPreview() {
- $this->keepAspect = true;
- $preview = $this->createPreview($this->maxPreviewWidth, $this->maxPreviewHeight);
- $preview->getPreview();
-
- return $preview;
- }
-
- /**
- * Makes sure the preview which was just created has been saved to disk
- *
- * @param int $fileId
- * @param int $previewWidth
- * @param int $previewHeight
- */
- private function checkCache($fileId, $previewWidth, $previewHeight) {
- $postfix = $this->getThumbnailPostfix($previewWidth, $previewHeight);
-
- $thumbCacheFile = $this->buildCachePath(
- $fileId, $previewWidth, $previewHeight, true, $postfix
- );
-
- $this->assertSame(
- true, $this->rootView->file_exists($thumbCacheFile), "$thumbCacheFile \n"
- );
- }
-
- /**
- * Computes special filename postfixes
- *
- * @param int $width
- * @param int $height
- *
- * @return string
- */
- private function getThumbnailPostfix($width, $height) {
- // Need to take care of special postfix added to the dimensions
- $postfix = '';
- $isMaxPreview = ($width === $this->maxPreviewWidth
- && $height === $this->maxPreviewHeight) ? true : false;
- if ($isMaxPreview) {
- $postfix = '-max';
- }
- if ($this->keepAspect && !$isMaxPreview) {
- $postfix = '-with-aspect';
- }
-
- return $postfix;
- }
-
- private function getSmallerThanMaxPreview($fileId, $previewWidth, $previewHeight) {
- $preview = $this->createPreview($previewWidth, $previewHeight);
-
- $image = $preview->getPreview();
- $this->assertNotSame(false, $image);
-
- // A thumbnail of the asked dimensions should also have been created (within the constraints of the max preview)
- list($limitedPreviewWidth, $limitedPreviewHeight) =
- $this->simulatePreviewDimensions($previewWidth, $previewHeight);
-
- $this->assertEquals($limitedPreviewWidth, $image->width());
- $this->assertEquals($limitedPreviewHeight, $image->height());
-
- // And it should be cached
- $this->checkCache($fileId, $limitedPreviewWidth, $limitedPreviewHeight);
-
- $this->cachedBigger[] = $preview->isCached($fileId);
- }
-
- private function createThumbnailFromBiggerCachedPreview($fileId, $width, $height) {
- $preview = $this->createPreview($width, $height);
-
- // A cache query should return a thumbnail of slightly larger dimensions
- // and with the proper aspect ratio
- $isCached = $preview->isCached($fileId);
- $expectedCachedBigger = $this->getExpectedCachedBigger();
-
- $this->assertSame($expectedCachedBigger, $isCached);
-
- $image = $preview->getPreview();
- $this->assertNotSame(false, $image);
- }
-
- /**
- * Picks the bigger cached preview with the correct aspect ratio or the max preview if it's
- * smaller than that
- *
- * For non-upscaled images, we pick the only picture without aspect ratio
- *
- * @return string
- */
- private function getExpectedCachedBigger() {
- $foundPreview = null;
- $foundWidth = null;
- $foundHeight = null;
- $maxPreview = null;
- $maxWidth = null;
- $maxHeight = null;
-
- foreach ($this->cachedBigger as $cached) {
- $size = explode('-', basename($cached));
- $width = (int)$size[0];
- $height = (int)$size[1];
-
- if (strpos($cached, 'max')) {
- $maxWidth = $width;
- $maxHeight = $height;
- $maxPreview = $cached;
- continue;
- }
-
- // We pick the larger preview with no aspect ratio
- if (!strpos($cached, 'aspect') && !strpos($cached, 'max')) {
- $foundPreview = $cached;
- $foundWidth = $width;
- $foundHeight = $height;
- }
- }
- if ($foundWidth > $maxWidth && $foundHeight > $maxHeight) {
- $foundPreview = $maxPreview;
- }
-
- return $foundPreview;
- }
-
- /**
- * A small thumbnail of exact dimensions should be in the cache
- *
- * @param int $fileId
- * @param int $width
- * @param int $height
- */
- private function getCachedSmallThumbnail($fileId, $width, $height) {
- $preview = $this->createPreview($width, $height);
-
- $isCached = $preview->isCached($fileId);
- $thumbCacheFile = $this->buildCachePath($fileId, $width, $height);
-
- $this->assertSame($thumbCacheFile, $isCached, "$thumbCacheFile \n");
- }
-
- /**
- * Builds the complete path to a cached thumbnail starting from the user folder
- *
- * @param int $fileId
- * @param int $width
- * @param int $height
- * @param bool $user
- * @param string $postfix
- *
- * @return string
- */
- private function buildCachePath($fileId, $width, $height, $user = false, $postfix = '') {
- $userPath = '';
- if ($user) {
- $userPath = '/' . self::TEST_PREVIEW_USER1 . '/';
- }
-
- return $userPath . Preview::THUMBNAILS_FOLDER . '/' . $fileId
- . '/' . $width . '-' . $height . $postfix . '.png';
- }
-
- /**
- * Stores the sample in the filesystem and stores it in the $samples array
- *
- * @param string $fileName
- * @param int $sampleWidth
- * @param int $sampleHeight
- */
- private function prepareSample($fileName, $sampleWidth, $sampleHeight) {
- $imgData = file_get_contents(\OC::$SERVERROOT . '/tests/data/' . $fileName);
- $imgPath = '/' . self::TEST_PREVIEW_USER1 . '/files/' . $fileName;
- $this->rootView->file_put_contents($imgPath, $imgData);
- $fileInfo = $this->rootView->getFileInfo($imgPath);
-
- list($maxPreviewWidth, $maxPreviewHeight) =
- $this->setMaxPreview($sampleWidth, $sampleHeight);
-
- $this->samples[] =
- [
- 'sampleFileId' => $fileInfo['fileid'],
- 'sampleFileName' => $fileName,
- 'sampleWidth' => $sampleWidth,
- 'sampleHeight' => $sampleHeight,
- 'maxPreviewWidth' => $maxPreviewWidth,
- 'maxPreviewHeight' => $maxPreviewHeight
- ];
- }
-
- /**
- * Sets the variables used to define the boundaries which need to be respected when using a
- * specific sample
- *
- * @param $sampleId
- */
- private function getSample($sampleId) {
- // Corrects a rounding difference when using the EPS (Imagick converted) sample
- $filename = $this->samples[$sampleId]['sampleFileName'];
- $splitFileName = pathinfo($filename);
- $extension = $splitFileName['extension'];
- $correction = ($extension === 'eps' && PHP_MAJOR_VERSION < 7) ? 1 : 0;
- $maxPreviewHeight = $this->samples[$sampleId]['maxPreviewHeight'];
- $maxPreviewHeight = $maxPreviewHeight - $correction;
-
- $this->sampleFileId = $this->samples[$sampleId]['sampleFileId'];
- $this->sampleFilename = $this->samples[$sampleId]['sampleFileName'];
- $this->sampleWidth = $this->samples[$sampleId]['sampleWidth'];
- $this->sampleHeight = $this->samples[$sampleId]['sampleHeight'];
- $this->maxPreviewWidth = $this->samples[$sampleId]['maxPreviewWidth'];
- $this->maxPreviewHeight = $maxPreviewHeight;
- $ratio = $this->maxPreviewWidth / $this->maxPreviewHeight;
- $this->maxPreviewRatio = $ratio;
- }
-
- /**
- * Defines the size of the max preview
- *
- * @fixme the Imagick previews don't have the exact same size on disk as they're calculated here
- *
- * @param int $sampleWidth
- * @param int $sampleHeight
- *
- * @return array
- */
- private function setMaxPreview($sampleWidth, $sampleHeight) {
- // Max previews are never scaled up
- $this->scalingUp = false;
- // Max previews always keep the aspect ratio
- $this->keepAspect = true;
- // We set this variable in order to be able to calculate the max preview with the proper aspect ratio
- $this->maxPreviewRatio = $sampleWidth / $sampleHeight;
- $maxPreviewWidth = min($sampleWidth, $this->configMaxWidth);
- $maxPreviewHeight = min($sampleHeight, $this->configMaxHeight);
- list($maxPreviewWidth, $maxPreviewHeight) =
- $this->applyAspectRatio($maxPreviewWidth, $maxPreviewHeight);
-
- return [$maxPreviewWidth, $maxPreviewHeight];
- }
-
- /**
- * Calculates the expected dimensions of the preview to be able to assess if we've got the
- * right result
- *
- * @param int $askedWidth
- * @param int $askedHeight
- *
- * @return array
- */
- private function simulatePreviewDimensions($askedWidth, $askedHeight) {
- $askedWidth = min($askedWidth, $this->configMaxWidth);
- $askedHeight = min($askedHeight, $this->configMaxHeight);
-
- if ($this->keepAspect) {
- // Defines the box in which the preview has to fit
- $scaleFactor = $this->scalingUp ? $this->maxScaleFactor : 1;
- $newPreviewWidth = min($askedWidth, $this->maxPreviewWidth * $scaleFactor);
- $newPreviewHeight = min($askedHeight, $this->maxPreviewHeight * $scaleFactor);
- list($newPreviewWidth, $newPreviewHeight) =
- $this->applyAspectRatio($newPreviewWidth, $newPreviewHeight);
- } else {
- list($newPreviewWidth, $newPreviewHeight) =
- $this->fixSize($askedWidth, $askedHeight);
- }
-
- return [(int)$newPreviewWidth, (int)$newPreviewHeight];
- }
-
- /**
- * Resizes the boundaries to match the aspect ratio
- *
- * @param int $askedWidth
- * @param int $askedHeight
- *
- * @return \int[]
- */
- private function applyAspectRatio($askedWidth, $askedHeight) {
- $originalRatio = $this->maxPreviewRatio;
- if ($askedWidth / $originalRatio < $askedHeight) {
- $askedHeight = round($askedWidth / $originalRatio);
- } else {
- $askedWidth = round($askedHeight * $originalRatio);
- }
-
- return [(int)$askedWidth, (int)$askedHeight];
- }
-
- /**
- * Clips or stretches the dimensions so that they fit in the boundaries
- *
- * @param int $askedWidth
- * @param int $askedHeight
- *
- * @return array
- */
- private function fixSize($askedWidth, $askedHeight) {
- if ($this->scalingUp) {
- $askedWidth = min($this->configMaxWidth, $askedWidth);
- $askedHeight = min($this->configMaxHeight, $askedHeight);
- }
-
- return [(int)$askedWidth, (int)$askedHeight];
- }
-
- public function testKeepAspectRatio() {
- $originalWidth = 1680;
- $originalHeight = 1050;
- $originalAspectRation = $originalWidth / $originalHeight;
-
- $preview = new Preview(
- self::TEST_PREVIEW_USER1, 'files/', 'testimage.jpg',
- 150,
- 150
- );
- $preview->setKeepAspect(true);
- $image = $preview->getPreview();
-
- $aspectRatio = $image->width() / $image->height();
- $this->assertEquals(round($originalAspectRation, 2), round($aspectRatio, 2));
-
- $this->assertLessThanOrEqual(150, $image->width());
- $this->assertLessThanOrEqual(150, $image->height());
- }
-
- public function testKeepAspectRatioCover() {
- $originalWidth = 1680;
- $originalHeight = 1050;
- $originalAspectRation = $originalWidth / $originalHeight;
-
- $preview = new Preview(
- self::TEST_PREVIEW_USER1, 'files/', 'testimage.jpg',
- 150,
- 150
- );
- $preview->setKeepAspect(true);
- $preview->setMode(Preview::MODE_COVER);
- $image = $preview->getPreview();
-
- $aspectRatio = $image->width() / $image->height();
- $this->assertEquals(round($originalAspectRation, 2), round($aspectRatio, 2));
-
- $this->assertGreaterThanOrEqual(150, $image->width());
- $this->assertGreaterThanOrEqual(150, $image->height());
- }
-
- public function testSetFileWithInfo() {
- $info = new FileInfo('/foo', null, '/foo', ['mimetype' => 'foo/bar'], null);
- $preview = new Preview();
- $preview->setFile('/foo', $info);
- $this->assertEquals($info, $this->invokePrivate($preview, 'getFileInfo'));
- }
-
- public function testIsCached() {
- $sourceFile = __DIR__ . '/../data/testimage.png';
- $userId = $this->getUniqueID();
- $this->createUser($userId, 'pass');
-
- $storage = new Temporary();
- $storage->mkdir('files');
- $this->registerMount($userId, $storage, '/' . $userId);
-
- \OC_Util::tearDownFS();
- \OC_Util::setupFS($userId);
- $preview = new Preview($userId, 'files');
- $view = new View('/' . $userId . '/files');
- $view->file_put_contents('test.png', file_get_contents($sourceFile));
- $info = $view->getFileInfo('test.png');
- $preview->setFile('test.png', $info);
-
- $preview->setMaxX(64);
- $preview->setMaxY(64);
-
- $this->assertFalse($preview->isCached($info->getId()));
-
- $preview->getPreview();
-
- $this->assertEquals('thumbnails/' . $info->getId() . '/64-64.png', $preview->isCached($info->getId()));
- }
-}
diff --git a/tests/lib/Repair/AvatarPermissionsTest.php b/tests/lib/Repair/AvatarPermissionsTest.php
deleted file mode 100644
index e3f582dc512..00000000000
--- a/tests/lib/Repair/AvatarPermissionsTest.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/**
- * @author Roeland Jago Douma <rullzer@owncloud.com>
- *
- * @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/>
- *
- */
-namespace Test\Repair;
-
-/**
- * Test for fixing the userRoot and avatar permissions
- *
- * @group DB
- *
- * @see \OC\Repair\AvatarPermissionsTest
- */
-class AvatarPermissionsTest extends \Test\TestCase {
-
- /** @var \OC\Repair\AvatarPermissions */
- protected $repair;
-
- /** @var \OCP\IDBConnection */
- protected $connection;
-
- protected function setUp() {
- parent::setUp();
-
- $this->connection = \OC::$server->getDatabaseConnection();
- $this->repair = new \OC\Repair\AvatarPermissions($this->connection);
- $this->cleanUpTables();
- }
-
- protected function tearDown() {
- $this->cleanUpTables();
-
- parent::tearDown();
- }
-
- protected function cleanUpTables() {
- $qb = $this->connection->getQueryBuilder();
- $qb->delete('filecache')->execute();
- $qb->delete('storages')->execute();
- }
-
- public function dataFixUserRootPermissions() {
- return [
- ['home::user', '', 0, 23],
- ['home::user', 'foo', 0, 0],
- ['home::user', 'avatar.jpg', 0, 0],
- ['ABC::user', '', 0, 0],
- ['ABC::user', 'foo', 0, 0],
- ];
- }
-
- /**
- * @dataProvider dataFixUserRootPermissions
- *
- * @param string $storageId
- * @param string $path
- * @param int $permissionsBefore
- * @param int $permissionsAfter
- */
- public function testFixUserRootPermissions($storageId, $path, $permissionsBefore, $permissionsAfter) {
- $userStorage = $this->addStorage($storageId);
- $userHome = $this->addFileCacheEntry($userStorage, $path, $permissionsBefore);
-
- $this->invokePrivate($this->repair, 'fixUserRootPermissions', []);
-
- $this->verifyPermissions($userHome, $permissionsAfter);
- }
-
- public function dataFixAvatarPermissions() {
- return [
- ['home::user', '', 0, 0],
- ['home::user', 'avatar.jpg', 0, 27],
- ['home::user', 'avatar.png', 0, 27],
- ['home::user', 'avatar.32.png', 0, 27],
- ['home::user', 'mine.txt', 0, 0],
- ['ABC::user', '', 0, 0],
- ['ABC::user', 'avatar.jpg', 0, 0],
- ['ABC::user', 'avatar.png', 0, 0],
- ['ABC::user', 'avatar.32.png', 0, 0],
- ['ABC::user', 'mine.txt', 0, 0],
- ];
- }
-
- /**
- * @dataProvider dataFixAvatarPermissions
- *
- * @param string $storageId
- * @param string $path
- * @param int $permissionsBefore
- * @param int $permissionsAfter
- */
- public function testFixAvatarPermissions($storageId, $path, $permissionsBefore, $permissionsAfter) {
- $userStorage = $this->addStorage($storageId);
- $userHome = $this->addFileCacheEntry($userStorage, $path, $permissionsBefore);
-
- $this->invokePrivate($this->repair, 'fixAvatarPermissions', []);
-
- $this->verifyPermissions($userHome, $permissionsAfter);
- }
-
- /**
- * Add a new storage
- *
- * @param string $id
- * @return int The numeric id
- */
- protected function addStorage($id) {
- $qb = $this->connection->getQueryBuilder();
-
- $qb->insert('storages')
- ->values([
- 'id' => $qb->createNamedParameter($id)
- ]);
-
- $qb->execute();
-
- return $qb->getLastInsertId();
- }
-
- /**
- * Add a filecache entry
- *
- * @param int $storage
- * @param string $path
- * @param int $permissions
- *
- * @return int The fileid
- */
- protected function addFileCacheEntry($storage, $path, $permissions) {
- $qb = $this->connection->getQueryBuilder();
-
- $qb->insert('filecache')
- ->values([
- 'path' => $qb->createNamedParameter($path),
- 'path_hash' => $qb->createNamedParameter(md5($path)),
- 'parent' => $qb->createNamedParameter(42),
- 'mimetype' => $qb->createNamedParameter(23),
- 'mimepart' => $qb->createNamedParameter(32),
- 'size' => $qb->createNamedParameter(16),
- 'mtime' => $qb->createNamedParameter(1),
- 'storage_mtime' => $qb->createNamedParameter(2),
- 'encrypted' => $qb->createNamedParameter(0),
- 'unencrypted_size' => $qb->createNamedParameter(0),
- 'storage' => $qb->createNamedParameter($storage),
- 'permissions' => $qb->createNamedParameter($permissions),
- ]);
-
- $qb->execute();
-
- return $qb->getLastInsertId();
- }
-
- /**
- * @param int $fileId
- * @param int $permissions
- */
- protected function verifyPermissions($fileId, $permissions) {
- $qb = $this->connection->getQueryBuilder();
-
- $qb->select('permissions')
- ->from('filecache')
- ->where($qb->expr()->eq('fileid', $qb->createNamedParameter($fileId)));
-
- $cursor = $qb->execute();
-
- $data = $cursor->fetch();
- $cursor->closeCursor();
-
- $this->assertSame($permissions, (int)$data['permissions']);
- }
-
-
-}
diff --git a/tests/lib/Repair/NC11/FixMountStoragesTest.php b/tests/lib/Repair/NC11/FixMountStoragesTest.php
new file mode 100644
index 00000000000..12e09105038
--- /dev/null
+++ b/tests/lib/Repair/NC11/FixMountStoragesTest.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * @copyright 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @author 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 Test\Repair\NC11;
+
+use OC\Repair\NC11\FixMountStorages;
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IDBConnection;
+use OCP\Migration\IOutput;
+use Test\TestCase;
+
+/**
+ * Class FixMountStoragesTest
+ *
+ * @package Test\Repair\NC11
+ * @group DB
+ */
+class FixMountStoragesTest extends TestCase {
+
+ /** @var IDBConnection */
+ private $db;
+
+ /** @var FixMountStorages */
+ private $repair;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->db = \OC::$server->getDatabaseConnection();
+
+ $this->repair = new FixMountStorages(
+ $this->db
+ );
+ }
+
+ public function testGetName() {
+ $this->assertSame('Fix potential broken mount points', $this->repair->getName());
+ }
+
+ public function testRun() {
+ // Valid mount
+ $file1 = $this->createFile(42);
+ $mount1 = $this->createMount($file1, 42);
+ $this->assertStorage($mount1, 42);
+
+ // Broken mount
+ $file2 = $this->createFile(23);
+ $mount2 = $this->createMount($file2, 1337);
+ $this->assertStorage($mount2, 1337);
+
+ /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $output */
+ $output = $this->createMock(IOutput::class);
+ $output->expects($this->at(0))
+ ->method('info')
+ ->with('1 mounts updated');
+
+ $this->repair->run($output);
+ $this->assertStorage($mount1, 42);
+ $this->assertStorage($mount2, 23);
+
+ $output->expects($this->at(0))
+ ->method('info')
+ ->with('No mounts updated');
+
+ $this->repair->run($output);
+ $this->assertStorage($mount1, 42);
+ $this->assertStorage($mount2, 23);
+ }
+
+
+ protected function createFile($storage) {
+ $query = $this->db->getQueryBuilder();
+
+ $query->insert('filecache')
+ ->values([
+ 'storage' => $query->createNamedParameter($storage, IQueryBuilder::PARAM_INT),
+ 'path_hash' => $query->createNamedParameter(static::getUniqueID(), IQueryBuilder::PARAM_STR),
+ 'encrypted' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'size' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'unencrypted_size' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ ]);
+ $query->execute();
+
+ return $query->getLastInsertId();
+ }
+
+ protected function createMount($fileId, $storage) {
+ $query = $this->db->getQueryBuilder();
+
+ $query->insert('mounts')
+ ->values([
+ 'storage_id' => $query->createNamedParameter($storage, IQueryBuilder::PARAM_INT),
+ 'root_id' => $query->createNamedParameter($fileId, IQueryBuilder::PARAM_INT),
+ 'user_id' => $query->createNamedParameter(static::getUniqueID(), IQueryBuilder::PARAM_STR),
+ 'mount_point' => $query->createNamedParameter(static::getUniqueID(), IQueryBuilder::PARAM_STR),
+ ]);
+ $query->execute();
+
+ return $query->getLastInsertId();
+ }
+
+ protected function assertStorage($mount, $storage) {
+ $query = $this->db->getQueryBuilder();
+ $query->select('storage_id')
+ ->from('mounts')
+ ->where($query->expr()->eq('id', $query->createNamedParameter($mount, IQueryBuilder::PARAM_INT)));
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ $this->assertEquals($storage, $row['storage_id']);
+ }
+}
diff --git a/tests/lib/Repair/RepairInvalidSharesTest.php b/tests/lib/Repair/RepairInvalidSharesTest.php
index 1ac42e53bf6..83dbed7d202 100644
--- a/tests/lib/Repair/RepairInvalidSharesTest.php
+++ b/tests/lib/Repair/RepairInvalidSharesTest.php
@@ -278,6 +278,73 @@ class RepairInvalidSharesTest extends TestCase {
$result->closeCursor();
}
+ public function fileSharePermissionsProvider() {
+ return [
+ // unchanged for folder
+ [
+ 'folder',
+ 31,
+ 31,
+ ],
+ // unchanged for read-write + share
+ [
+ 'file',
+ \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE,
+ \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE,
+ ],
+ // fixed for all perms
+ [
+ 'file',
+ \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE,
+ \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE,
+ ],
+ ];
+ }
+
+ /**
+ * Test adjusting file share permissions
+ *
+ * @dataProvider fileSharePermissionsProvider
+ */
+ public function testFileSharePermissions($itemType, $testPerms, $expectedPerms) {
+ $qb = $this->connection->getQueryBuilder();
+ $qb->insert('share')
+ ->values([
+ 'share_type' => $qb->expr()->literal(Constants::SHARE_TYPE_LINK),
+ 'uid_owner' => $qb->expr()->literal('user1'),
+ 'item_type' => $qb->expr()->literal($itemType),
+ 'item_source' => $qb->expr()->literal(123),
+ 'item_target' => $qb->expr()->literal('/123'),
+ 'file_source' => $qb->expr()->literal(123),
+ 'file_target' => $qb->expr()->literal('/test'),
+ 'permissions' => $qb->expr()->literal($testPerms),
+ 'stime' => $qb->expr()->literal(time()),
+ ])
+ ->execute();
+
+ $shareId = $this->getLastShareId();
+
+ /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */
+ $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->repair->run($outputMock);
+
+ $results = $this->connection->getQueryBuilder()
+ ->select('*')
+ ->from('share')
+ ->orderBy('permissions', 'ASC')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(1, $results);
+
+ $updatedShare = $results[0];
+
+ $this->assertEquals($expectedPerms, $updatedShare['permissions']);
+ }
+
/**
* @return int
*/
diff --git a/tests/lib/Repair/RepairLegacyStoragesTest.php b/tests/lib/Repair/RepairLegacyStoragesTest.php
deleted file mode 100644
index 8d8366dde06..00000000000
--- a/tests/lib/Repair/RepairLegacyStoragesTest.php
+++ /dev/null
@@ -1,321 +0,0 @@
-<?php
-/**
- * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace Test\Repair;
-
-use OC\Files\Cache\Cache;
-use OC\Files\Cache\Storage;
-use OCP\Migration\IOutput;
-use PHPUnit_Framework_MockObject_MockObject;
-use Test\TestCase;
-
-/**
- * Tests for the converting of legacy storages to home storages.
- *
- * @group DB
- *
- * @see \OC\Repair\RepairLegacyStorages
- */
-class RepairLegacyStoragesTest extends TestCase {
- /** @var \OCP\IDBConnection */
- private $connection;
- /** @var \OCP\IConfig */
- private $config;
- private $user;
- /** @var \OC\Repair\RepairLegacyStorages */
- private $repair;
-
- private $dataDir;
- private $oldDataDir;
-
- private $legacyStorageId;
- private $newStorageId;
-
- /** @var IOutput | PHPUnit_Framework_MockObject_MockObject */
- private $outputMock;
-
- protected function setUp() {
- parent::setUp();
-
- $this->config = \OC::$server->getConfig();
- $this->connection = \OC::$server->getDatabaseConnection();
- $this->oldDataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/');
-
- $this->repair = new \OC\Repair\RepairLegacyStorages($this->config, $this->connection);
-
- $this->outputMock = $this->getMockBuilder('\OCP\Migration\IOutput')
- ->disableOriginalConstructor()
- ->getMock();
- }
-
- protected function tearDown() {
- $user = \OC::$server->getUserManager()->get($this->user);
- if ($user) {
- $user->delete();
- }
-
- $sql = 'DELETE FROM `*PREFIX*storages`';
- $this->connection->executeQuery($sql);
- $sql = 'DELETE FROM `*PREFIX*filecache`';
- $this->connection->executeQuery($sql);
- $this->config->setSystemValue('datadirectory', $this->oldDataDir);
- $this->config->setAppValue('core', 'repairlegacystoragesdone', 'no');
-
- parent::tearDown();
- }
-
- /**
- * @param string $dataDir
- * @param string $userId
- * @throws \Exception
- */
- function prepareSettings($dataDir, $userId) {
- // hard-coded string as we want a predictable fixed length
- // no data will be written there
- $this->dataDir = $dataDir;
- $this->config->setSystemValue('datadirectory', $this->dataDir);
-
- $this->user = $userId;
- $this->legacyStorageId = 'local::' . $this->dataDir . $this->user . '/';
- $this->newStorageId = 'home::' . $this->user;
- \OC::$server->getUserManager()->createUser($this->user, $this->user);
- }
-
- /**
- * Create a storage entry
- *
- * @param string $storageId
- * @return int
- */
- private function createStorage($storageId) {
- $sql = 'INSERT INTO `*PREFIX*storages` (`id`)'
- . ' VALUES (?)';
-
- $storageId = Storage::adjustStorageId($storageId);
- $numRows = $this->connection->executeUpdate($sql, array($storageId));
- $this->assertSame(1, $numRows);
-
- return (int)\OC::$server->getDatabaseConnection()->lastInsertId('*PREFIX*storages');
- }
-
- /**
- * Create dummy data in the filecache for the given storage numeric id
- *
- * @param string $storageId storage id
- */
- private function createData($storageId) {
- $cache = new Cache($storageId);
- $cache->put(
- 'dummyfile.txt',
- array('size' => 5, 'mtime' => 12, 'mimetype' => 'text/plain')
- );
- }
-
- /**
- * Test that existing home storages are left alone when valid.
- *
- * @dataProvider settingsProvider
- *
- * @param string $dataDir
- * @param string $userId
- */
- public function testNoopWithExistingHomeStorage($dataDir, $userId) {
- $this->prepareSettings($dataDir, $userId);
- $newStorageNumId = $this->createStorage($this->newStorageId);
-
- $this->repair->run($this->outputMock);
-
- $this->assertNull(Storage::getNumericStorageId($this->legacyStorageId));
- $this->assertSame($newStorageNumId, Storage::getNumericStorageId($this->newStorageId));
- }
-
- /**
- * Test that legacy storages are converted to home storages when
- * the latter does not exist.
- *
- * @dataProvider settingsProvider
- *
- * @param string $dataDir
- * @param string $userId
- */
- public function testConvertLegacyToHomeStorage($dataDir, $userId) {
- $this->prepareSettings($dataDir, $userId);
- $legacyStorageNumId = $this->createStorage($this->legacyStorageId);
-
- $this->repair->run($this->outputMock);
-
- $this->assertNull(Storage::getNumericStorageId($this->legacyStorageId));
- $this->assertSame($legacyStorageNumId, Storage::getNumericStorageId($this->newStorageId));
- }
-
- /**
- * Test that legacy storages are converted to home storages
- * when home storage already exists but has no data.
- *
- * @dataProvider settingsProvider
- *
- * @param string $dataDir
- * @param string $userId
- */
- public function testConvertLegacyToExistingEmptyHomeStorage($dataDir, $userId) {
- $this->prepareSettings($dataDir, $userId);
- $legacyStorageNumId = $this->createStorage($this->legacyStorageId);
- $this->createStorage($this->newStorageId);
-
- $this->createData($this->legacyStorageId);
-
- $this->repair->run($this->outputMock);
-
- $this->assertNull(Storage::getNumericStorageId($this->legacyStorageId));
- $this->assertSame($legacyStorageNumId, Storage::getNumericStorageId($this->newStorageId));
- }
-
- /**
- * Test that legacy storages are converted to home storages
- * when home storage already exists and the legacy storage
- * has no data.
- *
- * @dataProvider settingsProvider
- *
- * @param string $dataDir
- * @param string $userId
- */
- public function testConvertEmptyLegacyToHomeStorage($dataDir, $userId) {
- $this->prepareSettings($dataDir, $userId);
- $this->createStorage($this->legacyStorageId);
- $newStorageNumId = $this->createStorage($this->newStorageId);
-
- $this->createData($this->newStorageId);
-
- $this->repair->run($this->outputMock);
-
- $this->assertNull(Storage::getNumericStorageId($this->legacyStorageId));
- $this->assertSame($newStorageNumId, Storage::getNumericStorageId($this->newStorageId));
- }
-
- /**
- * Test that nothing is done when both conflicting legacy
- * and home storage have data.
- *
- * @dataProvider settingsProvider
- *
- * @param string $dataDir
- * @param string $userId
- */
- public function testConflictNoop($dataDir, $userId) {
- $this->prepareSettings($dataDir, $userId);
- $legacyStorageNumId = $this->createStorage($this->legacyStorageId);
- $newStorageNumId = $this->createStorage($this->newStorageId);
-
- $this->createData($this->legacyStorageId);
- $this->createData($this->newStorageId);
-
- $this->outputMock->expects($this->exactly(2))->method('warning');
- $this->repair->run($this->outputMock);
-
- // storages left alone
- $this->assertSame($legacyStorageNumId, Storage::getNumericStorageId($this->legacyStorageId));
- $this->assertSame($newStorageNumId, Storage::getNumericStorageId($this->newStorageId));
-
- // do not set the done flag
- $this->assertNotEquals('yes', $this->config->getAppValue('core', 'repairlegacystoragesdone'));
- }
-
- /**
- * Test that the data dir local entry is left alone
- *
- * @dataProvider settingsProvider
- *
- * @param string $dataDir
- * @param string $userId
- */
- public function testDataDirEntryNoop($dataDir, $userId) {
- $this->prepareSettings($dataDir, $userId);
- $storageId = 'local::' . $this->dataDir;
- $numId = $this->createStorage($storageId);
-
- $this->repair->run($this->outputMock);
-
- $this->assertSame($numId, Storage::getNumericStorageId($storageId));
- }
-
- /**
- * Test that external local storages are left alone
- *
- * @dataProvider settingsProvider
- *
- * @param string $dataDir
- * @param string $userId
- */
- public function testLocalExtStorageNoop($dataDir, $userId) {
- $this->prepareSettings($dataDir, $userId);
- $storageId = 'local::/tmp/somedir/' . $this->user;
- $numId = $this->createStorage($storageId);
-
- $this->repair->run($this->outputMock);
-
- $this->assertSame($numId, Storage::getNumericStorageId($storageId));
- }
-
- /**
- * Test that other external storages are left alone
- *
- * @dataProvider settingsProvider
- *
- * @param string $dataDir
- * @param string $userId
- */
- public function testExtStorageNoop($dataDir, $userId) {
- $this->prepareSettings($dataDir, $userId);
- $storageId = 'smb::user@password/tmp/somedir/' . $this->user;
- $numId = $this->createStorage($storageId);
-
- $this->repair->run($this->outputMock);
-
- $this->assertSame($numId, Storage::getNumericStorageId($storageId));
- }
-
- /**
- * Provides data dir and user name
- */
- function settingsProvider() {
- return array(
- // regular data dir
- array(
- '/tmp/oc-autotest/datadir/',
- $this->getUniqueID('user_'),
- ),
- // long datadir / short user
- array(
- '/tmp/oc-autotest/datadir01234567890123456789012345678901234567890123456789END/',
- $this->getUniqueID('user_'),
- ),
- // short datadir / long user
- array(
- '/tmp/oc-autotest/datadir/',
- 'u123456789012345678901234567890123456789012345678901234567890END', // 64 chars
- ),
- );
- }
-
- /**
- * Only run the repair once
- */
- public function testOnlyRunOnce() {
- $this->outputMock->expects($this->exactly(1))->method('info');
-
- $this->prepareSettings('/tmp/oc-autotest/datadir', $this->getUniqueID('user_'));
- $this->assertNotEquals('yes', $this->config->getAppValue('core', 'repairlegacystoragesdone'));
- $this->repair->run($this->outputMock);
- $this->assertEquals('yes', $this->config->getAppValue('core', 'repairlegacystoragesdone'));
-
- $this->outputMock->expects($this->never())->method('info');
- $this->repair->run($this->outputMock);
- $this->assertEquals('yes', $this->config->getAppValue('core', 'repairlegacystoragesdone'));
- }
-}
diff --git a/tests/lib/Security/CertificateManagerTest.php b/tests/lib/Security/CertificateManagerTest.php
index 92a063d47c7..408e65c6766 100644
--- a/tests/lib/Security/CertificateManagerTest.php
+++ b/tests/lib/Security/CertificateManagerTest.php
@@ -8,8 +8,10 @@
namespace Test\Security;
+use OC\Files\Storage\Temporary;
use \OC\Security\CertificateManager;
use OCP\IConfig;
+use OCP\ILogger;
/**
* Class CertificateManagerTest
@@ -43,7 +45,7 @@ class CertificateManagerTest extends \Test\TestCase {
$config->expects($this->any())->method('getSystemValue')
->with('installed', false)->willReturn(true);
- $this->certificateManager = new CertificateManager($this->username, new \OC\Files\View(), $config);
+ $this->certificateManager = new CertificateManager($this->username, new \OC\Files\View(), $config, $this->createMock(ILogger::class));
}
protected function tearDown() {
@@ -143,7 +145,7 @@ class CertificateManagerTest extends \Test\TestCase {
/** @var CertificateManager | \PHPUnit_Framework_MockObject_MockObject $certificateManager */
$certificateManager = $this->getMockBuilder('OC\Security\CertificateManager')
- ->setConstructorArgs([$uid, $view, $config])
+ ->setConstructorArgs([$uid, $view, $config, $this->createMock(ILogger::class)])
->setMethods(['getFilemtimeOfCaBundle', 'getCertificateBundle'])
->getMock();
@@ -210,5 +212,4 @@ class CertificateManagerTest extends \Test\TestCase {
[null, 10, 5, 8, false, true],
];
}
-
}
diff --git a/tests/lib/ServerTest.php b/tests/lib/ServerTest.php
index 02fccee628e..9c375dd654e 100644
--- a/tests/lib/ServerTest.php
+++ b/tests/lib/ServerTest.php
@@ -79,8 +79,6 @@ class ServerTest extends \Test\TestCase {
['DateTimeFormatter', '\OCP\IDateTimeFormatter'],
['DateTimeZone', '\OC\DateTimeZone'],
['DateTimeZone', '\OCP\IDateTimeZone'],
- ['Db', '\OC\AppFramework\Db\Db'],
- ['Db', '\OCP\IDb'],
['EncryptionFileHelper', '\OC\Encryption\File'],
['EncryptionFileHelper', '\OCP\Encryption\IFile'],
diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php
index 150609499ad..70401abb652 100644
--- a/tests/lib/Settings/ManagerTest.php
+++ b/tests/lib/Settings/ManagerTest.php
@@ -25,44 +25,52 @@ namespace Tests\Settings;
use OC\Settings\Admin\Sharing;
use OC\Settings\Manager;
+use OC\Settings\Mapper;
use OC\Settings\Section;
use OCP\Encryption\IManager;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\ILogger;
+use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Lock\ILockingProvider;
use Test\TestCase;
class ManagerTest extends TestCase {
- /** @var Manager */
+ /** @var Manager|\PHPUnit_Framework_MockObject_MockObject */
private $manager;
- /** @var ILogger */
+ /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
private $logger;
- /** @var IDBConnection */
+ /** @var IDBConnection|\PHPUnit_Framework_MockObject_MockObject */
private $dbConnection;
- /** @var IL10N */
+ /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
private $l10n;
- /** @var IConfig */
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
private $config;
- /** @var IManager */
+ /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
private $encryptionManager;
- /** @var IUserManager */
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
private $userManager;
- /** @var ILockingProvider */
+ /** @var ILockingProvider|\PHPUnit_Framework_MockObject_MockObject */
private $lockingProvider;
+ /** @var Mapper|\PHPUnit_Framework_MockObject_MockObject */
+ private $mapper;
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ private $url;
public function setUp() {
parent::setUp();
- $this->logger = $this->getMockBuilder('\OCP\ILogger')->getMock();
- $this->dbConnection = $this->getMockBuilder('\OCP\IDBConnection')->getMock();
- $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
- $this->encryptionManager = $this->getMockBuilder('\OCP\Encryption\IManager')->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock();
- $this->lockingProvider = $this->getMockBuilder('\OCP\Lock\ILockingProvider')->getMock();
+ $this->logger = $this->createMock(ILogger::class);
+ $this->dbConnection = $this->createMock(IDBConnection::class);
+ $this->l10n = $this->createMock(IL10N::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->encryptionManager = $this->createMock(IManager::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->lockingProvider = $this->createMock(ILockingProvider::class);
+ $this->mapper = $this->createMock(Mapper::class);
+ $this->url = $this->createMock(IURLGenerator::class);
$this->manager = new Manager(
$this->logger,
@@ -71,63 +79,50 @@ class ManagerTest extends TestCase {
$this->config,
$this->encryptionManager,
$this->userManager,
- $this->lockingProvider
+ $this->lockingProvider,
+ $this->mapper,
+ $this->url
);
}
- public function testSetupSettings() {
- $qb = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock();
- $qb
- ->expects($this->once())
- ->method('select')
- ->with('class')
- ->willReturn($qb);
- $this->dbConnection
- ->expects($this->at(0))
- ->method('getQueryBuilder')
- ->willReturn($qb);
- $qb
- ->expects($this->once())
- ->method('from')
- ->with('admin_settings')
- ->willReturn($qb);
- $expressionBuilder = $this->getMockBuilder('\OCP\DB\QueryBuilder\IExpressionBuilder')->getMock();
- $qb
- ->expects($this->once())
- ->method('expr')
- ->willReturn($expressionBuilder);
- $param = $this->getMockBuilder('\OCP\DB\QueryBuilder\IParameter')->getMock();
- $qb
- ->expects($this->once())
- ->method('createNamedParameter')
- ->with('OCA\Files\Settings\Admin')
- ->willReturn($param);
- $expressionBuilder
- ->expects($this->once())
- ->method('eq')
- ->with('class', $param)
- ->willReturn('myString');
- $qb
- ->expects($this->once())
- ->method('where')
- ->with('myString')
- ->willReturn($qb);
- $stmt = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')->getMock();
- $qb
- ->expects($this->once())
- ->method('execute')
- ->willReturn($stmt);
-
- $qb1 = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock();
- $qb1
- ->expects($this->once())
- ->method('insert')
- ->with('admin_settings')
- ->willReturn($qb1);
- $this->dbConnection
- ->expects($this->at(1))
- ->method('getQueryBuilder')
- ->willReturn($qb1);
+ public function testSetupSettingsUpdate() {
+ $this->mapper->expects($this->any())
+ ->method('has')
+ ->with('admin_settings', 'OCA\Files\Settings\Admin')
+ ->will($this->returnValue(true));
+
+ $this->mapper->expects($this->once())
+ ->method('update')
+ ->with('admin_settings',
+ 'class',
+ 'OCA\Files\Settings\Admin', [
+ 'section' => 'additional',
+ 'priority' => 5
+ ]);
+ $this->mapper->expects($this->never())
+ ->method('add');
+
+ $this->manager->setupSettings([
+ 'admin' => 'OCA\Files\Settings\Admin',
+ ]);
+ }
+
+ public function testSetupSettingsAdd() {
+ $this->mapper->expects($this->any())
+ ->method('has')
+ ->with('admin_settings', 'OCA\Files\Settings\Admin')
+ ->will($this->returnValue(false));
+
+ $this->mapper->expects($this->once())
+ ->method('add')
+ ->with('admin_settings', [
+ 'class' => 'OCA\Files\Settings\Admin',
+ 'section' => 'additional',
+ 'priority' => 5
+ ]);
+
+ $this->mapper->expects($this->never())
+ ->method('update');
$this->manager->setupSettings([
'admin' => 'OCA\Files\Settings\Admin',
@@ -135,95 +130,71 @@ class ManagerTest extends TestCase {
}
public function testGetAdminSections() {
- $qb = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock();
- $expr = $this->getMockBuilder('OCP\DB\QueryBuilder\IExpressionBuilder')->getMock();
- $qb
- ->expects($this->once())
- ->method('selectDistinct')
- ->with('s.class')
- ->willReturn($qb);
- $qb
- ->expects($this->once())
- ->method('addSelect')
- ->with('s.priority')
- ->willReturn($qb);
- $qb
- ->expects($this->exactly(2))
- ->method('from')
- ->willReturn($qb);
- $qb
- ->expects($this->once())
- ->method('expr')
- ->willReturn($expr);
- $qb
- ->expects($this->once())
- ->method('where')
- ->willReturn($qb);
- $stmt = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')->getMock();
- $qb
- ->expects($this->once())
- ->method('execute')
- ->willReturn($stmt);
- $this->dbConnection
- ->expects($this->once())
- ->method('getQueryBuilder')
- ->willReturn($qb);
$this->l10n
->expects($this->any())
->method('t')
->will($this->returnArgument(0));
+ $this->mapper->expects($this->once())
+ ->method('getAdminSectionsFromDB')
+ ->will($this->returnValue([
+ ['class' => \OCA\WorkflowEngine\Settings\Section::class, 'priority' => 90]
+ ]));
+
+ $this->url->expects($this->exactly(5))
+ ->method('imagePath')
+ ->willReturnMap([
+ ['settings', 'admin.svg', '1'],
+ ['core', 'actions/share.svg', '2'],
+ ['core', 'actions/password.svg', '3'],
+ ['core', 'actions/settings-dark.svg', '4'],
+ ['settings', 'help.svg', '5'],
+ ]);
+
+ $this->assertEquals([
+ 0 => [new Section('server', 'Server settings', 0, '1')],
+ 5 => [new Section('sharing', 'Sharing', 0, '2')],
+ 45 => [new Section('encryption', 'Encryption', 0, '3')],
+ 90 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)],
+ 98 => [new Section('additional', 'Additional settings', 0, '4')],
+ 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],
+ ], $this->manager->getAdminSections());
+ }
+
+ public function testGetAdminSectionsEmptySection() {
+ $this->l10n
+ ->expects($this->any())
+ ->method('t')
+ ->will($this->returnArgument(0));
+
+ $this->mapper->expects($this->once())
+ ->method('getAdminSectionsFromDB')
+ ->will($this->returnValue([
+ ]));
+
+ $this->url->expects($this->exactly(5))
+ ->method('imagePath')
+ ->willReturnMap([
+ ['settings', 'admin.svg', '1'],
+ ['core', 'actions/share.svg', '2'],
+ ['core', 'actions/password.svg', '3'],
+ ['core', 'actions/settings-dark.svg', '4'],
+ ['settings', 'help.svg', '5'],
+ ]);
+
$this->assertEquals([
- 0 => [new Section('server', 'Server settings', 0)],
- 5 => [new Section('sharing', 'Sharing', 0)],
- 45 => [new Section('encryption', 'Encryption', 0)],
- 98 => [new Section('additional', 'Additional settings', 0)],
- 99 => [new Section('tips-tricks', 'Tips & tricks', 0)],
+ 0 => [new Section('server', 'Server settings', 0, '1')],
+ 5 => [new Section('sharing', 'Sharing', 0, '2')],
+ 45 => [new Section('encryption', 'Encryption', 0, '3')],
+ 98 => [new Section('additional', 'Additional settings', 0, '4')],
+ 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],
], $this->manager->getAdminSections());
}
public function testGetAdminSettings() {
- $qb = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock();
- $qb
- ->expects($this->once())
- ->method('select')
- ->with(['class', 'priority'])
- ->willReturn($qb);
- $qb
- ->expects($this->once())
- ->method('from')
- ->with('admin_settings')
- ->willReturn($qb);
- $expressionBuilder = $this->getMockBuilder('\OCP\DB\QueryBuilder\IExpressionBuilder')->getMock();
- $qb
- ->expects($this->once())
- ->method('expr')
- ->willReturn($expressionBuilder);
- $param = $this->getMockBuilder('\OCP\DB\QueryBuilder\IParameter')->getMock();
- $qb
- ->expects($this->once())
- ->method('createParameter')
- ->with('section')
- ->willReturn($param);
- $expressionBuilder
- ->expects($this->once())
- ->method('eq')
- ->with('section', $param)
- ->willReturn('myString');
- $qb
- ->expects($this->once())
- ->method('where')
- ->with('myString')
- ->willReturn($qb);
- $stmt = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')->getMock();
- $qb
- ->expects($this->once())
- ->method('execute')
- ->willReturn($stmt);
- $this->dbConnection
- ->expects($this->exactly(2))
- ->method('getQueryBuilder')
- ->willReturn($qb);
+ $this->mapper->expects($this->any())
+ ->method('getAdminSettingsFromDB')
+ ->will($this->returnValue([]));
$this->assertEquals([
0 => [new Sharing($this->config)],
diff --git a/tests/lib/Settings/MapperTest.php b/tests/lib/Settings/MapperTest.php
new file mode 100644
index 00000000000..6a648acd5f7
--- /dev/null
+++ b/tests/lib/Settings/MapperTest.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @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 Tests\Settings;
+
+use OC\DB\QueryBuilder\Literal;
+use OC\Settings\Mapper;
+use Test\TestCase;
+
+/**
+ * @group DB
+ */
+class MapperTest extends TestCase {
+ const SECTION_PREFIX = 'test_section_';
+
+ /** @var Mapper */
+ private $mapper;
+
+ public function setUp() {
+ parent::setUp();
+ $this->mapper = new Mapper(\OC::$server->getDatabaseConnection());
+ }
+
+ public function tearDown() {
+ parent::tearDown();
+
+ $db = \OC::$server->getDatabaseConnection();
+ $builder = $db->getQueryBuilder();
+
+ $builder->delete(Mapper::TABLE_ADMIN_SECTIONS)
+ ->where($builder->expr()->like('id', new Literal(self::SECTION_PREFIX . '%')));
+
+ $builder->delete(Mapper::TABLE_ADMIN_SETTINGS)
+ ->where($builder->expr()->like('section', new Literal(self::SECTION_PREFIX . '%')));
+ }
+
+ public function testManipulateSettings() {
+ $this->assertEquals(false, $this->mapper->has(Mapper::TABLE_ADMIN_SETTINGS, '\OC\Dummy'));
+ $this->assertNotContains('\OC\Dummy', $this->mapper->getClasses(Mapper::TABLE_ADMIN_SETTINGS));
+
+ $this->mapper->add(Mapper::TABLE_ADMIN_SETTINGS, [
+ 'class' => '\OC\Dummy',
+ 'section' => self::SECTION_PREFIX . '1',
+ 'priority' => 5
+ ]);
+
+ $this->assertEquals(true, $this->mapper->has(Mapper::TABLE_ADMIN_SETTINGS, '\OC\Dummy'));
+
+ $this->assertContains('\OC\Dummy', $this->mapper->getClasses(Mapper::TABLE_ADMIN_SETTINGS));
+
+ $rows = $this->mapper->getAdminSettingsFromDB(self::SECTION_PREFIX . '1');
+ $this->assertEquals([
+ ['class' => '\OC\Dummy', 'priority' => 5]
+ ], $rows);
+
+ $this->mapper->update(Mapper::TABLE_ADMIN_SETTINGS, 'class', '\OC\Dummy', [
+ 'section' => self::SECTION_PREFIX . '1', 'priority' => 15
+ ]);
+
+ $rows = $this->mapper->getAdminSettingsFromDB(self::SECTION_PREFIX . '1');
+ $this->assertEquals([
+ ['class' => '\OC\Dummy', 'priority' => 15]
+ ], $rows);
+
+ $this->mapper->update(Mapper::TABLE_ADMIN_SETTINGS, 'class', '\OC\Dummy', [
+ 'section' => self::SECTION_PREFIX . '2', 'priority' => 15
+ ]);
+
+ $this->assertEquals([], $this->mapper->getAdminSettingsFromDB(self::SECTION_PREFIX . '1'));
+ $rows = $this->mapper->getAdminSettingsFromDB(self::SECTION_PREFIX . '2');
+ $this->assertEquals([
+ ['class' => '\OC\Dummy', 'priority' => 15]
+ ], $rows);
+
+ $this->mapper->remove(Mapper::TABLE_ADMIN_SETTINGS, '\OC\Dummy');
+
+ $this->assertEquals(false, $this->mapper->has(Mapper::TABLE_ADMIN_SETTINGS, '\OC\Dummy'));
+ }
+
+ public function testGetAdminSections() {
+ $this->assertFalse($this->mapper->has(Mapper::TABLE_ADMIN_SECTIONS, '\OC\Dummy'));
+
+ $this->mapper->add(Mapper::TABLE_ADMIN_SECTIONS, [
+ 'id' => self::SECTION_PREFIX . '1',
+ 'class' => '\OC\Dummy',
+ 'priority' => 1,
+ ]);
+
+ $this->assertTrue($this->mapper->has(Mapper::TABLE_ADMIN_SECTIONS, '\OC\Dummy'));
+
+ // until we add a setting for the section it's not returned
+ $this->assertNotContains([
+ 'class' => '\OC\Dummy',
+ 'priority' => 1,
+ ], $this->mapper->getAdminSectionsFromDB());
+
+ $this->mapper->add(Mapper::TABLE_ADMIN_SETTINGS, [
+ 'class' => '\OC\Dummy',
+ 'section' => self::SECTION_PREFIX . '1',
+ 'priority' => 5
+ ]);
+
+ $this->assertContains([
+ 'class' => '\OC\Dummy',
+ 'priority' => 1,
+ ], $this->mapper->getAdminSectionsFromDB());
+
+ $this->mapper->remove(Mapper::TABLE_ADMIN_SETTINGS, '\OC\Dummy');
+
+ $this->assertNotContains([
+ 'class' => '\OC\Dummy',
+ 'priority' => 1,
+ ], $this->mapper->getAdminSectionsFromDB());
+
+ $this->mapper->remove(Mapper::TABLE_ADMIN_SECTIONS, '\OC\Dummy');
+
+ $this->assertFalse($this->mapper->has(Mapper::TABLE_ADMIN_SECTIONS, '\OC\Dummy'));
+ }
+}
diff --git a/tests/lib/SetupTest.php b/tests/lib/SetupTest.php
index a8389eaaf56..acbce938a25 100644
--- a/tests/lib/SetupTest.php
+++ b/tests/lib/SetupTest.php
@@ -55,16 +55,12 @@ class SetupTest extends \Test\TestCase {
));
$this->setupClass
->expects($this->once())
- ->method('class_exists')
- ->will($this->returnValue(true));
- $this->setupClass
- ->expects($this->once())
->method('is_callable')
->will($this->returnValue(false));
$this->setupClass
->expects($this->any())
->method('getAvailableDbDriversForPdo')
- ->will($this->returnValue([]));
+ ->will($this->returnValue(['sqlite']));
$result = $this->setupClass->getSupportedDatabases();
$expectedResult = array(
'sqlite' => 'SQLite'
@@ -82,10 +78,6 @@ class SetupTest extends \Test\TestCase {
));
$this->setupClass
->expects($this->any())
- ->method('class_exists')
- ->will($this->returnValue(false));
- $this->setupClass
- ->expects($this->any())
->method('is_callable')
->will($this->returnValue(false));
$this->setupClass
@@ -106,16 +98,12 @@ class SetupTest extends \Test\TestCase {
));
$this->setupClass
->expects($this->any())
- ->method('class_exists')
- ->will($this->returnValue(true));
- $this->setupClass
- ->expects($this->any())
->method('is_callable')
->will($this->returnValue(true));
$this->setupClass
->expects($this->any())
->method('getAvailableDbDriversForPdo')
- ->will($this->returnValue(['mysql', 'pgsql']));
+ ->will($this->returnValue(['sqlite', 'mysql', 'pgsql']));
$result = $this->setupClass->getSupportedDatabases();
$expectedResult = array(
'sqlite' => 'SQLite',
diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php
index bd85e3c73aa..7b01a8f9e70 100644
--- a/tests/lib/Share20/ManagerTest.php
+++ b/tests/lib/Share20/ManagerTest.php
@@ -61,25 +61,25 @@ class ManagerTest extends \Test\TestCase {
/** @var Manager */
protected $manager;
- /** @var ILogger */
+ /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
protected $logger;
- /** @var IConfig */
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
protected $config;
- /** @var ISecureRandom */
+ /** @var ISecureRandom|\PHPUnit_Framework_MockObject_MockObject */
protected $secureRandom;
- /** @var IHasher */
+ /** @var IHasher|\PHPUnit_Framework_MockObject_MockObject */
protected $hasher;
- /** @var IShareProvider | \PHPUnit_Framework_MockObject_MockObject */
+ /** @var IShareProvider|\PHPUnit_Framework_MockObject_MockObject */
protected $defaultProvider;
- /** @var IMountManager */
+ /** @var IMountManager|\PHPUnit_Framework_MockObject_MockObject */
protected $mountManager;
- /** @var IGroupManager */
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
protected $groupManager;
- /** @var IL10N */
+ /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
protected $l;
/** @var DummyFactory */
protected $factory;
- /** @var IUserManager */
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
/** @var IRootFolder | \PHPUnit_Framework_MockObject_MockObject */
protected $rootFolder;
@@ -488,7 +488,7 @@ class ManagerTest extends \Test\TestCase {
->method('delete')
->withConsecutive($child1, $child2, $child3);
- $result = $this->invokePrivate($manager, 'deleteChildren', [$share]);
+ $result = self::invokePrivate($manager, 'deleteChildren', [$share]);
$this->assertSame($shares, $result);
}
@@ -532,7 +532,7 @@ class ManagerTest extends \Test\TestCase {
}
/**
- * @expectedException InvalidArgumentException
+ * @expectedException \InvalidArgumentException
* @expectedExceptionMessage Passwords are enforced for link shares
*/
public function testVerifyPasswordNullButEnforced() {
@@ -540,7 +540,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_enforce_links_password', 'no', 'yes'],
]));
- $this->invokePrivate($this->manager, 'verifyPassword', [null]);
+ self::invokePrivate($this->manager, 'verifyPassword', [null]);
}
public function testVerifyPasswordNull() {
@@ -548,7 +548,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_enforce_links_password', 'no', 'no'],
]));
- $result = $this->invokePrivate($this->manager, 'verifyPassword', [null]);
+ $result = self::invokePrivate($this->manager, 'verifyPassword', [null]);
$this->assertNull($result);
}
@@ -564,12 +564,12 @@ class ManagerTest extends \Test\TestCase {
}
);
- $result = $this->invokePrivate($this->manager, 'verifyPassword', ['password']);
+ $result = self::invokePrivate($this->manager, 'verifyPassword', ['password']);
$this->assertNull($result);
}
/**
- * @expectedException Exception
+ * @expectedException \Exception
* @expectedExceptionMessage password not accepted
*/
public function testVerifyPasswordHookFails() {
@@ -585,7 +585,7 @@ class ManagerTest extends \Test\TestCase {
}
);
- $this->invokePrivate($this->manager, 'verifyPassword', ['password']);
+ self::invokePrivate($this->manager, 'verifyPassword', ['password']);
}
public function createShare($id, $type, $path, $sharedWith, $sharedBy, $shareOwner,
@@ -699,6 +699,7 @@ class ManagerTest extends \Test\TestCase {
*
* @param $share
* @param $exceptionMessage
+ * @param $exception
*/
public function testGeneralChecks($share, $exceptionMessage, $exception) {
$thrown = null;
@@ -718,7 +719,7 @@ class ManagerTest extends \Test\TestCase {
try {
- $this->invokePrivate($this->manager, 'generalCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'generalCreateChecks', [$share]);
$thrown = false;
} catch (\OCP\Share\Exceptions\GenericShareException $e) {
$this->assertEquals($exceptionMessage, $e->getHint());
@@ -754,7 +755,7 @@ class ManagerTest extends \Test\TestCase {
->setSharedBy('user1')
->setNode($userFolder);
- $this->invokePrivate($this->manager, 'generalCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'generalCreateChecks', [$share]);
}
/**
@@ -770,11 +771,11 @@ class ManagerTest extends \Test\TestCase {
$share = $this->manager->newShare();
$share->setExpirationDate($past);
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
}
/**
- * @expectedException InvalidArgumentException
+ * @expectedException \InvalidArgumentException
* @expectedExceptionMessage Expiration date is enforced
*/
public function testvalidateExpirationDateEnforceButNotSet() {
@@ -787,7 +788,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_enforce_expire_date', 'no', 'yes'],
]));
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
}
public function testvalidateExpirationDateEnforceButNotEnabledAndNotSet() {
@@ -799,7 +800,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_enforce_expire_date', 'no', 'yes'],
]));
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$this->assertNull($share->getExpirationDate());
}
@@ -818,7 +819,7 @@ class ManagerTest extends \Test\TestCase {
$expected->setTime(0,0,0);
$expected->add(new \DateInterval('P3D'));
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$this->assertNotNull($share->getExpirationDate());
$this->assertEquals($expected, $share->getExpirationDate());
@@ -839,7 +840,7 @@ class ManagerTest extends \Test\TestCase {
]));
try {
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
} catch (\OCP\Share\Exceptions\GenericShareException $e) {
$this->assertEquals('Cannot set expiration date more than 3 days in the future', $e->getMessage());
$this->assertEquals('Cannot set expiration date more than 3 days in the future', $e->getHint());
@@ -871,7 +872,7 @@ class ManagerTest extends \Test\TestCase {
return $data['expirationDate'] == $future;
}));
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$this->assertEquals($expected, $share->getExpirationDate());
}
@@ -892,7 +893,7 @@ class ManagerTest extends \Test\TestCase {
return $data['expirationDate'] == $expected && $data['passwordSet'] === false;
}));
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$this->assertEquals($expected, $share->getExpirationDate());
}
@@ -907,7 +908,7 @@ class ManagerTest extends \Test\TestCase {
$share = $this->manager->newShare();
$share->setPassword('password');
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$this->assertNull($share->getExpirationDate());
}
@@ -934,7 +935,7 @@ class ManagerTest extends \Test\TestCase {
return $data['expirationDate'] == $expected;
}));
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$this->assertEquals($expected, $share->getExpirationDate());
}
@@ -955,7 +956,7 @@ class ManagerTest extends \Test\TestCase {
$share = $this->manager->newShare();
$share->setExpirationDate($nextWeek);
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$save->sub(new \DateInterval('P2D'));
$this->assertEquals($save, $share->getExpirationDate());
@@ -980,7 +981,7 @@ class ManagerTest extends \Test\TestCase {
$data['message'] = 'Invalid date!';
}));
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
}
public function testValidateExpirationDateExistingShareNoDefault() {
@@ -994,7 +995,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_expire_after_n_days', '7', '6'],
]));
- $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
+ self::invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$this->assertEquals(null, $share->getExpirationDate());
}
@@ -1030,7 +1031,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_only_share_with_group_members', 'no', 'yes'],
]));
- $this->invokePrivate($this->manager, 'userCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'userCreateChecks', [$share]);
}
public function testUserCreateChecksShareWithGroupMembersOnlySharedGroup() {
@@ -1068,7 +1069,7 @@ class ManagerTest extends \Test\TestCase {
->with($path)
->willReturn([]);
- $this->invokePrivate($this->manager, 'userCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'userCreateChecks', [$share]);
}
/**
@@ -1093,7 +1094,7 @@ class ManagerTest extends \Test\TestCase {
->with($path)
->willReturn([$share2]);
- $this->invokePrivate($this->manager, 'userCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'userCreateChecks', [$share]);
}
/**
@@ -1135,7 +1136,7 @@ class ManagerTest extends \Test\TestCase {
->with($path)
->willReturn([$share2]);
- $this->invokePrivate($this->manager, 'userCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'userCreateChecks', [$share]);
}
public function testUserCreateChecksIdenticalPathNotSharedWithUser() {
@@ -1170,7 +1171,7 @@ class ManagerTest extends \Test\TestCase {
->with($path)
->willReturn([$share2]);
- $this->invokePrivate($this->manager, 'userCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'userCreateChecks', [$share]);
}
/**
@@ -1186,7 +1187,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_group_sharing', 'yes', 'no'],
]));
- $this->invokePrivate($this->manager, 'groupCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'groupCreateChecks', [$share]);
}
/**
@@ -1212,7 +1213,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_group_sharing', 'yes', 'yes'],
]));
- $this->invokePrivate($this->manager, 'groupCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'groupCreateChecks', [$share]);
}
public function testGroupCreateChecksShareWithGroupMembersOnlyInGroup() {
@@ -1241,7 +1242,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_group_sharing', 'yes', 'yes'],
]));
- $this->invokePrivate($this->manager, 'groupCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'groupCreateChecks', [$share]);
}
/**
@@ -1272,7 +1273,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_group_sharing', 'yes', 'yes'],
]));
- $this->invokePrivate($this->manager, 'groupCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'groupCreateChecks', [$share]);
}
public function testGroupCreateChecksPathAlreadySharedWithDifferentGroup() {
@@ -1296,7 +1297,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_group_sharing', 'yes', 'yes'],
]));
- $this->invokePrivate($this->manager, 'groupCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'groupCreateChecks', [$share]);
}
/**
@@ -1312,7 +1313,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_links', 'yes', 'no'],
]));
- $this->invokePrivate($this->manager, 'linkCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'linkCreateChecks', [$share]);
}
/**
@@ -1330,7 +1331,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_links', 'yes', 'yes'],
]));
- $this->invokePrivate($this->manager, 'linkCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'linkCreateChecks', [$share]);
}
/**
@@ -1349,7 +1350,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_public_upload', 'yes', 'no']
]));
- $this->invokePrivate($this->manager, 'linkCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'linkCreateChecks', [$share]);
}
public function testLinkCreateChecksPublicUpload() {
@@ -1364,7 +1365,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_public_upload', 'yes', 'yes']
]));
- $this->invokePrivate($this->manager, 'linkCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'linkCreateChecks', [$share]);
}
public function testLinkCreateChecksReadOnly() {
@@ -1379,7 +1380,7 @@ class ManagerTest extends \Test\TestCase {
['core', 'shareapi_allow_public_upload', 'yes', 'no']
]));
- $this->invokePrivate($this->manager, 'linkCreateChecks', [$share]);
+ self::invokePrivate($this->manager, 'linkCreateChecks', [$share]);
}
/**
@@ -1397,7 +1398,7 @@ class ManagerTest extends \Test\TestCase {
$this->mountManager->method('findIn')->with('path')->willReturn([$mount]);
- $this->invokePrivate($this->manager, 'pathCreateChecks', [$path]);
+ self::invokePrivate($this->manager, 'pathCreateChecks', [$path]);
}
public function testPathCreateChecksContainsNoSharedMount() {
@@ -1411,13 +1412,13 @@ class ManagerTest extends \Test\TestCase {
$this->mountManager->method('findIn')->with('path')->willReturn([$mount]);
- $this->invokePrivate($this->manager, 'pathCreateChecks', [$path]);
+ self::invokePrivate($this->manager, 'pathCreateChecks', [$path]);
}
public function testPathCreateChecksContainsNoFolder() {
$path = $this->createMock(File::class);
- $this->invokePrivate($this->manager, 'pathCreateChecks', [$path]);
+ self::invokePrivate($this->manager, 'pathCreateChecks', [$path]);
}
public function dataIsSharingDisabledForUser() {
@@ -1528,7 +1529,7 @@ class ManagerTest extends \Test\TestCase {
$exception = false;
try {
- $res = $this->invokePrivate($manager, 'canShare', [$share]);
+ $res = self::invokePrivate($manager, 'canShare', [$share]);
} catch (\Exception $e) {
$exception = true;
}
@@ -1767,6 +1768,116 @@ class ManagerTest extends \Test\TestCase {
$this->assertEquals('hashed', $share->getPassword());
}
+ public function testCreateShareMail() {
+ $manager = $this->createManagerMock()
+ ->setMethods([
+ 'canShare',
+ 'generalCreateChecks',
+ 'linkCreateChecks',
+ 'pathCreateChecks',
+ 'validateExpirationDate',
+ 'verifyPassword',
+ 'setLinkParent',
+ ])
+ ->getMock();
+
+ $shareOwner = $this->createMock(IUser::class);
+ $shareOwner->method('getUID')->willReturn('shareOwner');
+
+ $storage = $this->createMock(Storage::class);
+ $path = $this->createMock(File::class);
+ $path->method('getOwner')->willReturn($shareOwner);
+ $path->method('getName')->willReturn('target');
+ $path->method('getId')->willReturn(1);
+ $path->method('getStorage')->willReturn($storage);
+
+ $share = $this->manager->newShare();
+ $share->setShareType(\OCP\Share::SHARE_TYPE_EMAIL)
+ ->setNode($path)
+ ->setSharedBy('sharedBy')
+ ->setPermissions(\OCP\Constants::PERMISSION_ALL);
+
+ $manager->expects($this->once())
+ ->method('canShare')
+ ->with($share)
+ ->willReturn(true);
+ $manager->expects($this->once())
+ ->method('generalCreateChecks')
+ ->with($share);;
+ $manager->expects($this->never())
+ ->method('linkCreateChecks');
+ $manager->expects($this->once())
+ ->method('pathCreateChecks')
+ ->with($path);
+ $manager->expects($this->never())
+ ->method('validateExpirationDate');
+ $manager->expects($this->never())
+ ->method('verifyPassword');
+ $manager->expects($this->never())
+ ->method('setLinkParent');
+
+ $this->secureRandom->method('getMediumStrengthGenerator')
+ ->will($this->returnSelf());
+ $this->secureRandom->method('generate')
+ ->willReturn('token');
+
+ $this->defaultProvider
+ ->expects($this->once())
+ ->method('create')
+ ->with($share)
+ ->will($this->returnCallback(function(Share $share) {
+ return $share->setId(42);
+ }));
+
+ $hookListner = $this->getMockBuilder('Dummy')->setMethods(['pre', 'post'])->getMock();
+ \OCP\Util::connectHook('OCP\Share', 'pre_shared', $hookListner, 'pre');
+ \OCP\Util::connectHook('OCP\Share', 'post_shared', $hookListner, 'post');
+
+ $hookListnerExpectsPre = [
+ 'itemType' => 'file',
+ 'itemSource' => 1,
+ 'shareType' => \OCP\Share::SHARE_TYPE_EMAIL,
+ 'uidOwner' => 'sharedBy',
+ 'permissions' => 31,
+ 'fileSource' => 1,
+ 'expiration' => null,
+ 'token' => 'token',
+ 'run' => true,
+ 'error' => '',
+ 'itemTarget' => '/target',
+ 'shareWith' => null,
+ ];
+
+ $hookListnerExpectsPost = [
+ 'itemType' => 'file',
+ 'itemSource' => 1,
+ 'shareType' => \OCP\Share::SHARE_TYPE_EMAIL,
+ 'uidOwner' => 'sharedBy',
+ 'permissions' => 31,
+ 'fileSource' => 1,
+ 'expiration' => null,
+ 'token' => 'token',
+ 'id' => 42,
+ 'itemTarget' => '/target',
+ 'fileTarget' => '/target',
+ 'shareWith' => null,
+ ];
+
+ $hookListner->expects($this->once())
+ ->method('pre')
+ ->with($this->equalTo($hookListnerExpectsPre));
+ $hookListner->expects($this->once())
+ ->method('post')
+ ->with($this->equalTo($hookListnerExpectsPost));
+
+ /** @var IShare $share */
+ $share = $manager->createShare($share);
+
+ $this->assertSame('shareOwner', $share->getShareOwner());
+ $this->assertEquals('/target', $share->getTarget());
+ $this->assertEquals('token', $share->getToken());
+ }
+
/**
* @expectedException Exception
* @expectedExceptionMessage I won't let you share
@@ -2008,6 +2119,12 @@ class ManagerTest extends \Test\TestCase {
}
public function testGetShareByToken() {
+ $this->config
+ ->expects($this->once())
+ ->method('getAppValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->willReturn('yes');
+
$factory = $this->createMock(IProviderFactory::class);
$manager = new Manager(
@@ -2041,6 +2158,12 @@ class ManagerTest extends \Test\TestCase {
}
public function testGetShareByTokenWithException() {
+ $this->config
+ ->expects($this->once())
+ ->method('getAppValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->willReturn('yes');
+
$factory = $this->createMock(IProviderFactory::class);
$manager = new Manager(
@@ -2085,6 +2208,12 @@ class ManagerTest extends \Test\TestCase {
* @expectedException \OCP\Share\Exceptions\ShareNotFound
*/
public function testGetShareByTokenExpired() {
+ $this->config
+ ->expects($this->once())
+ ->method('getAppValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->willReturn('yes');
+
$manager = $this->createManagerMock()
->setMethods(['deleteShare'])
->getMock();
@@ -2107,6 +2236,12 @@ class ManagerTest extends \Test\TestCase {
}
public function testGetShareByTokenNotExpired() {
+ $this->config
+ ->expects($this->once())
+ ->method('getAppValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->willReturn('yes');
+
$date = new \DateTime();
$date->setTime(0,0,0);
$date->add(new \DateInterval('P2D'));
@@ -2123,12 +2258,33 @@ class ManagerTest extends \Test\TestCase {
$this->assertSame($share, $res);
}
- public function testGetShareByTokenPublicSharingDisabled() {
+ /**
+ * @expectedException \OCP\Share\Exceptions\ShareNotFound
+ */
+ public function testGetShareByTokenWithPublicLinksDisabled() {
+ $this->config
+ ->expects($this->once())
+ ->method('getAppValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->willReturn('no');
+ $this->manager->getShareByToken('validToken');
+ }
+
+ public function testGetShareByTokenPublicUploadDisabled() {
+ $this->config
+ ->expects($this->at(0))
+ ->method('getAppValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->willReturn('yes');
+
$share = $this->manager->newShare();
$share->setShareType(\OCP\Share::SHARE_TYPE_LINK)
->setPermissions(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE);
- $this->config->method('getAppValue')->will($this->returnValueMap([
+ $this->config
+ ->expects($this->at(1))
+ ->method('getAppValue')
+ ->will($this->returnValueMap([
['core', 'shareapi_allow_public_upload', 'yes', 'no'],
]));
diff --git a/tests/lib/StreamWrappersTest.php b/tests/lib/StreamWrappersTest.php
deleted file mode 100644
index eb35fd54454..00000000000
--- a/tests/lib/StreamWrappersTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Robin Appelman
- * @copyright 2012 Robin Appelman icewind@owncloud.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library 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 library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace Test;
-
-/**
- * Class StreamWrappersTest
- *
- * @group DB
- */
-class StreamWrappersTest extends \Test\TestCase {
-
- private static $trashBinStatus;
-
- public static function setUpBeforeClass() {
- self::$trashBinStatus = \OC_App::isEnabled('files_trashbin');
- \OC_App::disable('files_trashbin');
- }
-
- public static function tearDownAfterClass() {
- if (self::$trashBinStatus) {
- (new \OC_App())->enable('files_trashbin');
- }
- }
-
- public function testFakeDir() {
- $items = array('foo', 'bar');
- \OC\Files\Stream\Dir::register('test', $items);
- $dh = opendir('fakedir://test');
- $result = array();
- while ($file = readdir($dh)) {
- $result[] = $file;
- $this->assertContains($file, $items);
- }
- $this->assertEquals(count($items), count($result));
- }
-
- public function testCloseStream() {
- //ensure all basic stream stuff works
- $sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
- $tmpFile = \OC::$server->getTempManager()->getTemporaryFile('.txt');
- $file = 'close://' . $tmpFile;
- $this->assertTrue(file_exists($file));
- file_put_contents($file, file_get_contents($sourceFile));
- $this->assertEquals(file_get_contents($sourceFile), file_get_contents($file));
- unlink($file);
- clearstatcache();
- $this->assertFalse(file_exists($file));
-
- //test callback
- $tmpFile = \OC::$server->getTempManager()->getTemporaryFile('.txt');
- $file = 'close://' . $tmpFile;
- $actual = false;
- $callback = function($path) use (&$actual) { $actual = $path; };
- \OC\Files\Stream\Close::registerCallback($tmpFile, $callback);
- $fh = fopen($file, 'w');
- fwrite($fh, 'asd');
- fclose($fh);
- $this->assertSame($tmpFile, $actual);
- }
-}
diff --git a/tests/lib/Template/ResourceLocatorTest.php b/tests/lib/Template/ResourceLocatorTest.php
index 17326f6c691..580dfd60d0e 100644
--- a/tests/lib/Template/ResourceLocatorTest.php
+++ b/tests/lib/Template/ResourceLocatorTest.php
@@ -69,7 +69,7 @@ class ResourceLocatorTest extends \Test\TestCase {
->with('foo')
->will($this->throwException(new ResourceNotFoundException('foo', 'map')));
$this->logger->expects($this->exactly(2))
- ->method('error')
+ ->method('debug')
->with($this->stringContains('map/foo'));
/** @var \OC\Template\ResourceLocator $locator */
$locator->find(array('foo'));
diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php
index f115c11938a..afed2817910 100644
--- a/tests/lib/TestCase.php
+++ b/tests/lib/TestCase.php
@@ -184,7 +184,9 @@ abstract class TestCase extends TestCasePhpUnitCompatibility {
// fail hard if xml errors have not been cleaned up
$errors = libxml_get_errors();
libxml_clear_errors();
- $this->assertEquals([], $errors);
+ if (!empty($errors)) {
+ self::assertEquals([], $errors, "There have been xml parsing errors");
+ }
\OC\Files\Cache\Storage::getGlobalCache()->clearCache();
diff --git a/tests/lib/User/SessionTest.php b/tests/lib/User/SessionTest.php
index 27cb92d6732..51560d78a6a 100644
--- a/tests/lib/User/SessionTest.php
+++ b/tests/lib/User/SessionTest.php
@@ -528,7 +528,7 @@ class SessionTest extends \Test\TestCase {
->getMock();
$userSession = $this->getMockBuilder(Session::class)
//override, otherwise tests will fail because of setcookie()
- ->setMethods(['setMagicInCookie'])
+ ->setMethods(['setMagicInCookie', 'setLoginName'])
->setConstructorArgs([$manager, $session, $this->timeFactory, $this->tokenProvider, $this->config, $this->random])
->getMock();
@@ -566,6 +566,15 @@ class SessionTest extends \Test\TestCase {
->with($oldSessionId, $sessionId)
->will($this->returnValue(true));
+ $tokenObject = $this->createMock(IToken::class);
+ $tokenObject->expects($this->once())
+ ->method('getLoginName')
+ ->willReturn('foobar');
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with($sessionId)
+ ->willReturn($tokenObject);
+
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('foo'));
@@ -576,6 +585,9 @@ class SessionTest extends \Test\TestCase {
$session->expects($this->once())
->method('set')
->with('user_id', 'foo');
+ $userSession->expects($this->once())
+ ->method('setLoginName')
+ ->willReturn('foobar');
$granted = $userSession->loginWithCookie('foo', $token, $oldSessionId);
diff --git a/tests/lib/User/UserTest.php b/tests/lib/User/UserTest.php
index 5eee5d60d04..edb8ac4224e 100644
--- a/tests/lib/User/UserTest.php
+++ b/tests/lib/User/UserTest.php
@@ -10,11 +10,13 @@
namespace Test\User;
use OC\Hooks\PublicEmitter;
-use OC\User\Database;
+use OC\User\User;
use OCP\Comments\ICommentsManager;
use OCP\IConfig;
+use OCP\IUser;
use OCP\Notification\IManager as INotificationManager;
use OCP\Notification\INotification;
+use Test\TestCase;
/**
* Class UserTest
@@ -23,7 +25,7 @@ use OCP\Notification\INotification;
*
* @package Test\User
*/
-class UserTest extends \Test\TestCase {
+class UserTest extends TestCase {
public function testDisplayName() {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
@@ -39,7 +41,7 @@ class UserTest extends \Test\TestCase {
->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
->will($this->returnValue(true));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertEquals('Foo', $user->getDisplayName());
}
@@ -61,7 +63,7 @@ class UserTest extends \Test\TestCase {
->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
->will($this->returnValue(true));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertEquals('foo', $user->getDisplayName());
}
@@ -78,13 +80,13 @@ class UserTest extends \Test\TestCase {
->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
->will($this->returnValue(false));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertEquals('foo', $user->getDisplayName());
}
public function testSetPassword() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
@@ -101,13 +103,13 @@ class UserTest extends \Test\TestCase {
}
}));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertTrue($user->setPassword('bar',''));
}
public function testSetPasswordNotSupported() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->never())
@@ -117,13 +119,13 @@ class UserTest extends \Test\TestCase {
->method('implementsActions')
->will($this->returnValue(false));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertFalse($user->setPassword('bar',''));
}
public function testChangeAvatarSupportedYes() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->once())
@@ -141,13 +143,13 @@ class UserTest extends \Test\TestCase {
}
}));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertTrue($user->canChangeAvatar());
}
public function testChangeAvatarSupportedNo() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->once())
@@ -165,13 +167,13 @@ class UserTest extends \Test\TestCase {
}
}));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertFalse($user->canChangeAvatar());
}
public function testChangeAvatarNotSupported() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->never())
@@ -181,26 +183,58 @@ class UserTest extends \Test\TestCase {
->method('implementsActions')
->willReturn(false);
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertTrue($user->canChangeAvatar());
}
public function testDelete() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('deleteUser')
->with($this->equalTo('foo'));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
+ $this->assertTrue($user->delete());
+ }
+
+ public function testDeleteWithDifferentHome() {
+ /**
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->createMock(Dummy::class);
+
+ $backend->expects($this->at(0))
+ ->method('implementsActions')
+ ->will($this->returnCallback(function ($actions) {
+ if ($actions === Backend::GET_HOME) {
+ return true;
+ } else {
+ return false;
+ }
+ }));
+
+ // important: getHome MUST be called before deleteUser because
+ // once the user is deleted, getHome implementations might not
+ // return anything
+ $backend->expects($this->at(1))
+ ->method('getHome')
+ ->with($this->equalTo('foo'))
+ ->will($this->returnValue('/home/foo'));
+
+ $backend->expects($this->at(2))
+ ->method('deleteUser')
+ ->with($this->equalTo('foo'));
+
+ $user = new User('foo', $backend);
$this->assertTrue($user->delete());
}
public function testGetHome() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
@@ -218,20 +252,20 @@ class UserTest extends \Test\TestCase {
}
}));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertEquals('/home/foo', $user->getHome());
}
public function testGetBackendClassName() {
- $user = new \OC\User\User('foo', new \Test\Util\User\Dummy());
+ $user = new User('foo', new \Test\Util\User\Dummy());
$this->assertEquals('Dummy', $user->getBackendClassName());
- $user = new \OC\User\User('foo', new \OC\User\Database());
+ $user = new User('foo', new \OC\User\Database());
$this->assertEquals('Database', $user->getBackendClassName());
}
public function testGetHomeNotSupported() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->never())
@@ -252,13 +286,13 @@ class UserTest extends \Test\TestCase {
->with($this->equalTo('datadirectory'))
->will($this->returnValue('arbitrary/path'));
- $user = new \OC\User\User('foo', $backend, null, $allConfig);
+ $user = new User('foo', $backend, null, $allConfig);
$this->assertEquals('arbitrary/path/foo', $user->getHome());
}
public function testCanChangePassword() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
@@ -272,13 +306,13 @@ class UserTest extends \Test\TestCase {
}
}));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertTrue($user->canChangePassword());
}
public function testCanChangePasswordNotSupported() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
@@ -286,13 +320,13 @@ class UserTest extends \Test\TestCase {
->method('implementsActions')
->will($this->returnValue(false));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertFalse($user->canChangePassword());
}
public function testCanChangeDisplayName() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
@@ -306,13 +340,13 @@ class UserTest extends \Test\TestCase {
}
}));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertTrue($user->canChangeDisplayName());
}
public function testCanChangeDisplayNameNotSupported() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
@@ -320,15 +354,15 @@ class UserTest extends \Test\TestCase {
->method('implementsActions')
->will($this->returnValue(false));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertFalse($user->canChangeDisplayName());
}
public function testSetDisplayNameSupported() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->createMock(Database::class);
+ $backend = $this->createMock(\OC\User\Database::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -345,7 +379,7 @@ class UserTest extends \Test\TestCase {
->with('foo','Foo')
->willReturn(true);
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertTrue($user->setDisplayName('Foo'));
$this->assertEquals('Foo',$user->getDisplayName());
}
@@ -355,9 +389,9 @@ class UserTest extends \Test\TestCase {
*/
public function testSetDisplayNameEmpty() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->createMock(Database::class);
+ $backend = $this->createMock(\OC\User\Database::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -369,16 +403,16 @@ class UserTest extends \Test\TestCase {
}
}));
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertFalse($user->setDisplayName(' '));
$this->assertEquals('foo',$user->getDisplayName());
}
public function testSetDisplayNameNotSupported() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->createMock(Database::class);
+ $backend = $this->createMock(\OC\User\Database::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -387,7 +421,7 @@ class UserTest extends \Test\TestCase {
$backend->expects($this->never())
->method('setDisplayName');
- $user = new \OC\User\User('foo', $backend);
+ $user = new User('foo', $backend);
$this->assertFalse($user->setDisplayName('Foo'));
$this->assertEquals('foo',$user->getDisplayName());
}
@@ -397,14 +431,14 @@ class UserTest extends \Test\TestCase {
$test = $this;
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('setPassword');
/**
- * @param \OC\User\User $user
+ * @param User $user
* @param string $password
*/
$hook = function ($user, $password) use ($test, &$hooksCalled) {
@@ -427,7 +461,7 @@ class UserTest extends \Test\TestCase {
}
}));
- $user = new \OC\User\User('foo', $backend, $emitter);
+ $user = new User('foo', $backend, $emitter);
$user->setPassword('bar','');
$this->assertEquals(2, $hooksCalled);
@@ -450,17 +484,17 @@ class UserTest extends \Test\TestCase {
$test = $this;
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('deleteUser')
->willReturn($result);
$emitter = new PublicEmitter();
- $user = new \OC\User\User('foo', $backend, $emitter);
+ $user = new User('foo', $backend, $emitter);
/**
- * @param \OC\User\User $user
+ * @param User $user
*/
$hook = function ($user) use ($test, &$hooksCalled) {
$hooksCalled++;
@@ -527,7 +561,7 @@ class UserTest extends \Test\TestCase {
public function testGetCloudId() {
/**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$urlGenerator = $this->getMockBuilder('\OC\URLGenerator')
@@ -538,7 +572,160 @@ class UserTest extends \Test\TestCase {
->method('getAbsoluteURL')
->withAnyParameters()
->willReturn('http://localhost:8888/owncloud');
- $user = new \OC\User\User('foo', $backend, null, null, $urlGenerator);
- $this->assertEquals("foo@localhost:8888/owncloud", $user->getCloudId());
+ $user = new User('foo', $backend, null, null, $urlGenerator);
+ $this->assertEquals('foo@localhost:8888/owncloud', $user->getCloudId());
+ }
+
+ public function testSetEMailAddressEmpty() {
+ /**
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
+
+ $test = $this;
+ $hooksCalled = 0;
+
+ /**
+ * @param IUser $user
+ * @param string $feature
+ * @param string $value
+ */
+ $hook = function (IUser $user, $feature, $value) use ($test, &$hooksCalled) {
+ $hooksCalled++;
+ $test->assertEquals('eMailAddress', $feature);
+ $test->assertEquals('', $value);
+ };
+
+ $emitter = new PublicEmitter();
+ $emitter->listen('\OC\User', 'changeUser', $hook);
+
+ $config = $this->createMock(IConfig::class);
+ $config->expects($this->once())
+ ->method('deleteUserValue')
+ ->with(
+ 'foo',
+ 'settings',
+ 'email'
+ );
+
+ $user = new User('foo', $backend, $emitter, $config);
+ $user->setEMailAddress('');
+ }
+
+ public function testSetEMailAddress() {
+ /**
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
+
+ $test = $this;
+ $hooksCalled = 0;
+
+ /**
+ * @param IUser $user
+ * @param string $feature
+ * @param string $value
+ */
+ $hook = function (IUser $user, $feature, $value) use ($test, &$hooksCalled) {
+ $hooksCalled++;
+ $test->assertEquals('eMailAddress', $feature);
+ $test->assertEquals('foo@bar.com', $value);
+ };
+
+ $emitter = new PublicEmitter();
+ $emitter->listen('\OC\User', 'changeUser', $hook);
+
+ $config = $this->createMock(IConfig::class);
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with(
+ 'foo',
+ 'settings',
+ 'email',
+ 'foo@bar.com'
+ );
+
+ $user = new User('foo', $backend, $emitter, $config);
+ $user->setEMailAddress('foo@bar.com');
+ }
+
+ public function testGetLastLogin() {
+ /**
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
+
+ $config = $this->createMock(IConfig::class);
+ $config->method('getUserValue')
+ ->will($this->returnCallback(function ($uid, $app, $key, $default) {
+ if ($uid === 'foo' && $app === 'login' && $key === 'lastLogin') {
+ return 42;
+ } else {
+ return $default;
+ }
+ }));
+
+ $user = new User('foo', $backend, null, $config);
+ $this->assertSame(42, $user->getLastLogin());
+ }
+
+ public function testSetEnabled() {
+ /**
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
+
+ $config = $this->createMock(IConfig::class);
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with(
+ $this->equalTo('foo'),
+ $this->equalTo('core'),
+ $this->equalTo('enabled'),
+ 'true'
+ );
+
+ $user = new User('foo', $backend, null, $config);
+ $user->setEnabled(true);
+ }
+
+ public function testSetDisabled() {
+ /**
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
+
+ $config = $this->createMock(IConfig::class);
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with(
+ $this->equalTo('foo'),
+ $this->equalTo('core'),
+ $this->equalTo('enabled'),
+ 'false'
+ );
+
+ $user = new User('foo', $backend, null, $config);
+ $user->setEnabled(false);
+ }
+
+ public function testGetEMailAddress() {
+ /**
+ * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
+
+ $config = $this->createMock(IConfig::class);
+ $config->method('getUserValue')
+ ->will($this->returnCallback(function ($uid, $app, $key, $default) {
+ if ($uid === 'foo' && $app === 'settings' && $key === 'email') {
+ return 'foo@bar.com';
+ } else {
+ return $default;
+ }
+ }));
+
+ $user = new User('foo', $backend, null, $config);
+ $this->assertSame('foo@bar.com', $user->getEMailAddress());
}
}
diff --git a/tests/lib/UserTest.php b/tests/lib/UserTest.php
index 7a033c2921e..2a477522dea 100644
--- a/tests/lib/UserTest.php
+++ b/tests/lib/UserTest.php
@@ -25,7 +25,7 @@ class UserTest extends TestCase {
protected function setUp(){
parent::setUp();
- $this->backend = $this->getMock('\Test\Util\User\Dummy');
+ $this->backend = $this->createMock(\Test\Util\User\Dummy::class);
$manager = \OC::$server->getUserManager();
$manager->registerBackend($this->backend);
}
diff --git a/tests/preseed-config.php b/tests/preseed-config.php
index e2c5a55fa58..53579406472 100644
--- a/tests/preseed-config.php
+++ b/tests/preseed-config.php
@@ -21,3 +21,20 @@ if (is_dir(OC::$SERVERROOT.'/apps2')) {
if (substr(strtolower(PHP_OS), 0, 3) === 'win') {
$CONFIG['openssl'] = ['config' => OC::$SERVERROOT . '/tests/data/openssl.cnf'];
}
+
+if (getenv('OBJECT_STORE') === 's3') {
+ $CONFIG['objectstore'] = [
+ 'class' => 'OC\\Files\\ObjectStore\\S3',
+ 'arguments' => array(
+ 'bucket' => 'nextcloud',
+ 'autocreate' => true,
+ 'key' => 'dummy',
+ 'secret' => 'dummy',
+ 'hostname' => 'localhost',
+ 'port' => 4569,
+ 'use_ssl' => false,
+ // required for some non amazon s3 implementations
+ 'use_path_style' => true
+ )
+ ];
+}
diff --git a/themes/example/defaults.php b/themes/example/defaults.php
index 25ec350ed1b..1a2389d0bc2 100644
--- a/themes/example/defaults.php
+++ b/themes/example/defaults.php
@@ -41,7 +41,7 @@ class OC_Theme {
* @return string URL
*/
public function getiOSClientUrl() {
- return 'https://itunes.apple.com/us/app/owncloud/id543672169?mt=8';
+ return 'https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8';
}
/**
@@ -49,7 +49,7 @@ class OC_Theme {
* @return string AppId
*/
public function getiTunesAppId() {
- return '543672169';
+ return '1125420102';
}
/**
@@ -65,7 +65,7 @@ class OC_Theme {
* @return string URL
*/
public function getDocBaseUrl() {
- return 'https://docs.nextcloud.org';
+ return 'https://docs.nextcloud.com';
}
/**
diff --git a/version.php b/version.php
index 10eac196be7..90f4e65055a 100644
--- a/version.php
+++ b/version.php
@@ -26,12 +26,12 @@
// between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
// when updating major/minor version number.
-$OC_Version = array(11, 0, 0, 6);
+$OC_Version = array(12, 0, 0, 12);
// The human readable string
-$OC_VersionString = '11.0 RC1';
+$OC_VersionString = '12.0 alpha';
-$OC_VersionCanBeUpgradedFrom = array(9, 1);
+$OC_VersionCanBeUpgradedFrom = array(11);
// default Nextcloud channel
$OC_Channel = 'git';